3535import io .grpc .alts .AltsContextUtil ;
3636import java .time .Duration ;
3737import java .util .Base64 ;
38+ import java .util .logging .Logger ;
3839import java .util .regex .Matcher ;
3940import java .util .regex .Pattern ;
4041import javax .annotation .Nullable ;
4142
4243@ InternalApi
4344public class MetadataExtractorInterceptor implements ClientInterceptor {
45+ static final Logger LOG = Logger .getLogger (MetadataExtractorInterceptor .class .getName ());
46+
4447 private final SidebandData sidebandData = new SidebandData ();
4548
4649 public GrpcCallContext injectInto (GrpcCallContext ctx ) {
@@ -128,9 +131,14 @@ private void reset() {
128131 }
129132
130133 void onResponseHeaders (Metadata md , Attributes attributes ) {
134+ LOG .info ("Raw Response Metadata: " + md );
135+ peerInfo = extractPeerInfo (md , gfeTiming , attributes );
136+ // 3. Log the final resolved PeerInfo
131137 responseParams = extractResponseParams (md );
132138 gfeTiming = extractGfeLatency (md );
139+ LOG .info ("Extracted GFE Timing (server-timing): " + gfeTiming );
133140 peerInfo = extractPeerInfo (md , gfeTiming , attributes );
141+ LOG .info ("Final Resolved PeerInfo: " + peerInfo );
134142 }
135143
136144 void onClose (Status status , Metadata trailers ) {
@@ -157,22 +165,28 @@ private static Duration extractGfeLatency(Metadata metadata) {
157165 private static PeerInfo extractPeerInfo (
158166 Metadata metadata , Duration gfeTiming , Attributes attributes ) {
159167 String encodedStr = metadata .get (PEER_INFO_KEY );
168+ LOG .info ("Raw bigtable-peer-info header value: " + encodedStr );
160169 if (Strings .isNullOrEmpty (encodedStr )) {
170+ LOG .info ("bigtable-peer-info header was missing or empty. Returning null." );
161171 return null ;
162172 }
163173
164174 try {
165175 byte [] decoded = Base64 .getUrlDecoder ().decode (encodedStr );
166176 PeerInfo peerInfo = PeerInfo .parseFrom (decoded );
167177 PeerInfo .TransportType effectiveTransport = peerInfo .getTransportType ();
178+ LOG .info ("Parsed TransportType straight from protobuf: " + effectiveTransport );
168179
169180 // TODO: remove this once transport_type is being sent by the server
170181 // This is a temporary workaround to detect directpath until its available from the server
171182 if (effectiveTransport == PeerInfo .TransportType .TRANSPORT_TYPE_UNKNOWN ) {
183+ LOG .info ("TransportType was UNKNOWN. Fallback checking ALTS context: isAlts=" + isAlts );
172184 boolean isAlts = AltsContextUtil .check (attributes );
173185 if (isAlts ) {
186+ LOG .info ("Fallback applied: Set to DIRECT_ACCESS based on ALTS." );
174187 effectiveTransport = PeerInfo .TransportType .TRANSPORT_TYPE_DIRECT_ACCESS ;
175188 } else if (gfeTiming != null ) {
189+ LOG .info ("Fallback applied: Set to CLOUD_PATH based on presence of gfeTiming." );
176190 effectiveTransport = PeerInfo .TransportType .TRANSPORT_TYPE_CLOUD_PATH ;
177191 }
178192 }
0 commit comments