Răsfoiți Sursa

Added trace logging.

Mark D. Roth 7 ani în urmă
părinte
comite
88832144f4

+ 27 - 9
src/core/ext/filters/client_channel/lb_policy/subchannel_list.h

@@ -358,8 +358,7 @@ void SubchannelData<SubchannelListType, SubchannelDataType>::
 template <typename SubchannelListType, typename SubchannelDataType>
 bool SubchannelData<SubchannelListType, SubchannelDataType>::
     UpdateConnectedSubchannelLocked() {
-// FIXME: add trace logging
-  // If the subchannel is READY, get a ref to the connected subchannel.
+  // If the subchannel is READY, take a ref to the connected subchannel.
   if (pending_connectivity_state_unsafe_ == GRPC_CHANNEL_READY) {
     connected_subchannel_ =
         grpc_subchannel_get_connected_subchannel(subchannel_);
@@ -375,14 +374,20 @@ bool SubchannelData<SubchannelListType, SubchannelDataType>::
     // is READY again (e.g., if the subchannel has transitioned back to
     // READY before the next watch gets requested).
     if (connected_subchannel_ == nullptr) {
+      if (subchannel_list_->tracer()->enabled()) {
+        gpr_log(GPR_INFO,
+                "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
+                " (subchannel %p): state is READY but connected subchannel is "
+                "null; moving to state IDLE",
+                subchannel_list_->tracer()->name(),
+                subchannel_list_->policy(), subchannel_list_, Index(),
+                subchannel_list_->num_subchannels(), subchannel_);
+      }
       pending_connectivity_state_unsafe_ = GRPC_CHANNEL_IDLE;
       return false;
     }
-  }
-// FIXME: do this for any other state?
-  // If we get TRANSIENT_FAILURE, unref the connected subchannel.
-  else if (pending_connectivity_state_unsafe_ ==
-           GRPC_CHANNEL_TRANSIENT_FAILURE) {
+  } else {
+    // For any state other than READY, unref the connected subchannel.
     connected_subchannel_.reset();
   }
   return true;
@@ -392,12 +397,25 @@ template <typename SubchannelListType, typename SubchannelDataType>
 void SubchannelData<SubchannelListType, SubchannelDataType>::
     OnConnectivityChangedLocked(void* arg, grpc_error* error) {
   SubchannelData* sd = static_cast<SubchannelData*>(arg);
-// FIXME: add trace logging
-  if (sd->subchannel_list()->shutting_down() || error == GRPC_ERROR_CANCELLED) {
+  if (sd->subchannel_list_->tracer()->enabled()) {
+    gpr_log(GPR_INFO,
+            "[%s %p] subchannel list %p index %" PRIuPTR " of %" PRIuPTR
+            " (subchannel %p): connectivity changed: state=%s, error=%s, "
+            "shutting_down=%d",
+            sd->subchannel_list_->tracer()->name(),
+            sd->subchannel_list_->policy(), sd->subchannel_list_, sd->Index(),
+            sd->subchannel_list_->num_subchannels(), sd->subchannel_,
+            grpc_connectivity_state_name(
+                sd->pending_connectivity_state_unsafe_),
+            grpc_error_string(error), sd->subchannel_list_->shutting_down());
+  }
+  // If shutting down, unref subchannel and stop watching.
+  if (sd->subchannel_list_->shutting_down() || error == GRPC_ERROR_CANCELLED) {
     sd->UnrefSubchannelLocked("connectivity_shutdown");
     sd->StopConnectivityWatchLocked();
     return;
   }
+  // Get or release ref to connected subchannel.
   if (!sd->UpdateConnectedSubchannelLocked()) {
     // We don't want to report this connectivity state, so renew the watch.
     sd->StartOrRenewConnectivityWatchLocked();