diff --git a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc index f321fec444c..d861746999d 100644 --- a/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +++ b/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc @@ -265,7 +265,8 @@ static void pf_update_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy, (void *)p, (unsigned long)addresses->num_addresses); } grpc_lb_subchannel_list *subchannel_list = grpc_lb_subchannel_list_create( - exec_ctx, &p->base, addresses, args, pf_connectivity_changed_locked); + exec_ctx, &p->base, &grpc_lb_pick_first_trace, addresses, args, + pf_connectivity_changed_locked); if (subchannel_list->num_subchannels == 0) { // Empty update or no valid subchannels. Unsubscribe from all current // subchannels and put the channel in TRANSIENT_FAILURE. diff --git a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc index 1644fcc1bc2..499631f1b18 100644 --- a/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +++ b/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc @@ -586,7 +586,8 @@ static void rr_update_locked(grpc_exec_ctx *exec_ctx, grpc_lb_policy *policy, } grpc_lb_addresses *addresses = (grpc_lb_addresses *)arg->value.pointer.p; grpc_lb_subchannel_list *subchannel_list = grpc_lb_subchannel_list_create( - exec_ctx, &p->base, addresses, args, rr_connectivity_changed_locked); + exec_ctx, &p->base, &grpc_lb_round_robin_trace, addresses, args, + rr_connectivity_changed_locked); if (subchannel_list->num_subchannels == 0) { grpc_connectivity_state_set( exec_ctx, &p->state_tracker, GRPC_CHANNEL_TRANSIENT_FAILURE, diff --git a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc index df23a32f97f..02c8460b277 100644 --- a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +++ b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc @@ -28,19 +28,16 @@ #include "src/core/lib/iomgr/sockaddr_utils.h" #include "src/core/lib/transport/connectivity_state.h" -extern grpc_tracer_flag grpc_lb_round_robin_trace; -extern grpc_tracer_flag grpc_lb_pick_first_trace; - void grpc_lb_subchannel_data_unref_subchannel(grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_data *sd, const char *reason) { if (sd->subchannel != NULL) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*sd->subchannel_list->tracer)) { gpr_log(GPR_DEBUG, - "[LB %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR + "[%s %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR " (subchannel %p): unreffing subchannel", - sd->subchannel_list->policy, sd->subchannel_list, + sd->subchannel_list->tracer->name, sd->subchannel_list->policy, + sd->subchannel_list, (size_t)(sd - sd->subchannel_list->subchannels), sd->subchannel_list->num_subchannels, sd->subchannel); } @@ -61,12 +58,12 @@ void grpc_lb_subchannel_data_unref_subchannel(grpc_exec_ctx *exec_ctx, void grpc_lb_subchannel_data_start_connectivity_watch( grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_data *sd) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*sd->subchannel_list->tracer)) { gpr_log(GPR_DEBUG, - "[LB %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR + "[%s %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR " (subchannel %p): requesting connectivity change notification", - sd->subchannel_list->policy, sd->subchannel_list, + sd->subchannel_list->tracer->name, sd->subchannel_list->policy, + sd->subchannel_list, (size_t)(sd - sd->subchannel_list->subchannels), sd->subchannel_list->num_subchannels, sd->subchannel); } @@ -79,12 +76,12 @@ void grpc_lb_subchannel_data_start_connectivity_watch( void grpc_lb_subchannel_data_stop_connectivity_watch( grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_data *sd) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*sd->subchannel_list->tracer)) { gpr_log(GPR_DEBUG, - "[LB %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR + "[%s %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR " (subchannel %p): stopping connectivity watch", - sd->subchannel_list->policy, sd->subchannel_list, + sd->subchannel_list->tracer->name, sd->subchannel_list->policy, + sd->subchannel_list, (size_t)(sd - sd->subchannel_list->subchannels), sd->subchannel_list->num_subchannels, sd->subchannel); } @@ -93,18 +90,18 @@ void grpc_lb_subchannel_data_stop_connectivity_watch( } grpc_lb_subchannel_list *grpc_lb_subchannel_list_create( - grpc_exec_ctx *exec_ctx, grpc_lb_policy *p, + grpc_exec_ctx *exec_ctx, grpc_lb_policy *p, grpc_tracer_flag *tracer, const grpc_lb_addresses *addresses, const grpc_lb_policy_args *args, grpc_iomgr_cb_func connectivity_changed_cb) { grpc_lb_subchannel_list *subchannel_list = (grpc_lb_subchannel_list *)gpr_zalloc(sizeof(*subchannel_list)); - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*tracer)) { gpr_log(GPR_DEBUG, - "[LB %p] Creating subchannel list %p for %" PRIdPTR " subchannels", - p, subchannel_list, addresses->num_addresses); + "[%s %p] Creating subchannel list %p for %" PRIdPTR " subchannels", + tracer->name, p, subchannel_list, addresses->num_addresses); } subchannel_list->policy = p; + subchannel_list->tracer = tracer; gpr_ref_init(&subchannel_list->refcount, 1); subchannel_list->subchannels = (grpc_lb_subchannel_data *)gpr_zalloc( sizeof(grpc_lb_subchannel_data) * addresses->num_addresses); @@ -131,14 +128,13 @@ grpc_lb_subchannel_list *grpc_lb_subchannel_list_create( grpc_channel_args_destroy(exec_ctx, new_args); if (subchannel == NULL) { // Subchannel could not be created. - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*tracer)) { char *address_uri = grpc_sockaddr_to_uri(&addresses->addresses[i].address); gpr_log(GPR_DEBUG, - "[LB %p] could not create subchannel for address uri %s, " + "[%s %p] could not create subchannel for address uri %s, " "ignoring", - subchannel_list->policy, address_uri); + tracer->name, subchannel_list->policy, address_uri); gpr_free(address_uri); } continue; @@ -150,27 +146,26 @@ grpc_lb_subchannel_list *grpc_lb_subchannel_list_create( grpc_subchannel_check_connectivity(subchannel, &error); if (error != GRPC_ERROR_NONE) { // The subchannel is in error (e.g. shutting down). Ignore it. - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*tracer)) { char *address_uri = grpc_sockaddr_to_uri(&addresses->addresses[i].address); gpr_log(GPR_DEBUG, - "[LB %p] subchannel for address uri %s shutting down, ignoring", - subchannel_list->policy, address_uri); + "[%s %p] subchannel for address uri %s shutting down, ignoring", + tracer->name, subchannel_list->policy, address_uri); gpr_free(address_uri); } GRPC_SUBCHANNEL_UNREF(exec_ctx, subchannel, "new_sc_connectivity_error"); GRPC_ERROR_UNREF(error); continue; } - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*tracer)) { char *address_uri = grpc_sockaddr_to_uri(&addresses->addresses[i].address); - gpr_log(GPR_DEBUG, "[LB %p] subchannel list %p index %" PRIdPTR + gpr_log(GPR_DEBUG, "[%s %p] subchannel list %p index %" PRIdPTR ": Created subchannel %p for address uri %s; " "initial connectivity state: %s", - p, subchannel_list, subchannel_index, subchannel, address_uri, + tracer->name, p, subchannel_list, subchannel_index, subchannel, + address_uri, grpc_connectivity_state_name(subchannel_connectivity_state)); gpr_free(address_uri); } @@ -199,10 +194,10 @@ grpc_lb_subchannel_list *grpc_lb_subchannel_list_create( static void subchannel_list_destroy(grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_list *subchannel_list) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { - gpr_log(GPR_DEBUG, "[LB %p] Destroying subchannel_list %p", - subchannel_list->policy, subchannel_list); + if (GRPC_TRACER_ON(*subchannel_list->tracer)) { + gpr_log(GPR_DEBUG, "[%s %p] Destroying subchannel_list %p", + subchannel_list->tracer->name, subchannel_list->policy, + subchannel_list); } for (size_t i = 0; i < subchannel_list->num_subchannels; i++) { grpc_lb_subchannel_data *sd = &subchannel_list->subchannels[i]; @@ -216,12 +211,12 @@ static void subchannel_list_destroy(grpc_exec_ctx *exec_ctx, void grpc_lb_subchannel_list_ref(grpc_lb_subchannel_list *subchannel_list, const char *reason) { gpr_ref_non_zero(&subchannel_list->refcount); - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*subchannel_list->tracer)) { const gpr_atm count = gpr_atm_acq_load(&subchannel_list->refcount.count); - gpr_log(GPR_DEBUG, "[LB %p] subchannel_list %p REF %lu->%lu (%s)", - subchannel_list->policy, subchannel_list, - (unsigned long)(count - 1), (unsigned long)count, reason); + gpr_log(GPR_DEBUG, "[%s %p] subchannel_list %p REF %lu->%lu (%s)", + subchannel_list->tracer->name, subchannel_list->policy, + subchannel_list, (unsigned long)(count - 1), + (unsigned long)count, reason); } } @@ -229,12 +224,12 @@ void grpc_lb_subchannel_list_unref(grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_list *subchannel_list, const char *reason) { const bool done = gpr_unref(&subchannel_list->refcount); - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*subchannel_list->tracer)) { const gpr_atm count = gpr_atm_acq_load(&subchannel_list->refcount.count); - gpr_log(GPR_DEBUG, "[LB %p] subchannel_list %p UNREF %lu->%lu (%s)", - subchannel_list->policy, subchannel_list, - (unsigned long)(count + 1), (unsigned long)count, reason); + gpr_log(GPR_DEBUG, "[%s %p] subchannel_list %p UNREF %lu->%lu (%s)", + subchannel_list->tracer->name, subchannel_list->policy, + subchannel_list, (unsigned long)(count + 1), + (unsigned long)count, reason); } if (done) { subchannel_list_destroy(exec_ctx, subchannel_list); @@ -256,12 +251,12 @@ void grpc_lb_subchannel_list_unref_for_connectivity_watch( static void grpc_lb_subchannel_data_cancel_connectivity_watch( grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_data *sd, const char *reason) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { + if (GRPC_TRACER_ON(*sd->subchannel_list->tracer)) { gpr_log(GPR_DEBUG, - "[LB %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR + "[%s %p] subchannel list %p index %" PRIdPTR " of %" PRIdPTR " (subchannel %p): canceling connectivity watch (%s)", - sd->subchannel_list->policy, sd->subchannel_list, + sd->subchannel_list->tracer->name, sd->subchannel_list->policy, + sd->subchannel_list, (size_t)(sd - sd->subchannel_list->subchannels), sd->subchannel_list->num_subchannels, sd->subchannel, reason); } @@ -272,10 +267,10 @@ static void grpc_lb_subchannel_data_cancel_connectivity_watch( void grpc_lb_subchannel_list_shutdown_and_unref( grpc_exec_ctx *exec_ctx, grpc_lb_subchannel_list *subchannel_list, const char *reason) { - if (GRPC_TRACER_ON(grpc_lb_round_robin_trace) || - GRPC_TRACER_ON(grpc_lb_pick_first_trace)) { - gpr_log(GPR_DEBUG, "[LB %p] Shutting down subchannel_list %p (%s)", - subchannel_list->policy, subchannel_list, reason); + if (GRPC_TRACER_ON(*subchannel_list->tracer)) { + gpr_log(GPR_DEBUG, "[%s %p] Shutting down subchannel_list %p (%s)", + subchannel_list->tracer->name, subchannel_list->policy, + subchannel_list, reason); } GPR_ASSERT(!subchannel_list->shutting_down); subchannel_list->shutting_down = true; diff --git a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h index cf872afbe24..814180388dd 100644 --- a/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +++ b/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h @@ -21,6 +21,7 @@ #include "src/core/ext/filters/client_channel/lb_policy_registry.h" #include "src/core/ext/filters/client_channel/subchannel.h" +#include "src/core/lib/debug/trace.h" #include "src/core/lib/transport/connectivity_state.h" // TODO(roth): This code is intended to be shared between pick_first and @@ -87,6 +88,8 @@ struct grpc_lb_subchannel_list { /** backpointer to owning policy */ grpc_lb_policy *policy; + grpc_tracer_flag *tracer; + /** all our subchannels */ size_t num_subchannels; grpc_lb_subchannel_data *subchannels; @@ -118,7 +121,7 @@ struct grpc_lb_subchannel_list { }; grpc_lb_subchannel_list *grpc_lb_subchannel_list_create( - grpc_exec_ctx *exec_ctx, grpc_lb_policy *p, + grpc_exec_ctx *exec_ctx, grpc_lb_policy *p, grpc_tracer_flag *tracer, const grpc_lb_addresses *addresses, const grpc_lb_policy_args *args, grpc_iomgr_cb_func connectivity_changed_cb);