|
|
|
@ -129,6 +129,8 @@ typedef struct client_channel_channel_data { |
|
|
|
|
grpc_core::UniquePtr<char> info_lb_policy_name; |
|
|
|
|
/** service config in JSON form */ |
|
|
|
|
grpc_core::UniquePtr<char> info_service_config_json; |
|
|
|
|
/* backpointer to grpc_channel's channelz node */ |
|
|
|
|
grpc_core::channelz::ClientChannelNode* channelz_channel; |
|
|
|
|
} channel_data; |
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
@ -153,6 +155,23 @@ static void watch_lb_policy_locked(channel_data* chand, |
|
|
|
|
grpc_core::LoadBalancingPolicy* lb_policy, |
|
|
|
|
grpc_connectivity_state current_state); |
|
|
|
|
|
|
|
|
|
static const char* channel_connectivity_state_change_string( |
|
|
|
|
grpc_connectivity_state state) { |
|
|
|
|
switch (state) { |
|
|
|
|
case GRPC_CHANNEL_IDLE: |
|
|
|
|
return "Channel state change to IDLE"; |
|
|
|
|
case GRPC_CHANNEL_CONNECTING: |
|
|
|
|
return "Channel state change to CONNECTING"; |
|
|
|
|
case GRPC_CHANNEL_READY: |
|
|
|
|
return "Channel state change to READY"; |
|
|
|
|
case GRPC_CHANNEL_TRANSIENT_FAILURE: |
|
|
|
|
return "Channel state change to TRANSIENT_FAILURE"; |
|
|
|
|
case GRPC_CHANNEL_SHUTDOWN: |
|
|
|
|
return "Channel state change to SHUTDOWN"; |
|
|
|
|
} |
|
|
|
|
GPR_UNREACHABLE_CODE(return "UNKNOWN"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void set_channel_connectivity_state_locked(channel_data* chand, |
|
|
|
|
grpc_connectivity_state state, |
|
|
|
|
grpc_error* error, |
|
|
|
@ -177,6 +196,12 @@ static void set_channel_connectivity_state_locked(channel_data* chand, |
|
|
|
|
gpr_log(GPR_INFO, "chand=%p: setting connectivity state to %s", chand, |
|
|
|
|
grpc_connectivity_state_name(state)); |
|
|
|
|
} |
|
|
|
|
if (chand->channelz_channel != nullptr) { |
|
|
|
|
chand->channelz_channel->AddTraceEvent( |
|
|
|
|
grpc_core::channelz::ChannelTrace::Severity::Info, |
|
|
|
|
grpc_slice_from_static_string( |
|
|
|
|
channel_connectivity_state_change_string(state))); |
|
|
|
|
} |
|
|
|
|
grpc_connectivity_state_set(&chand->state_tracker, state, error, reason); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -699,6 +724,7 @@ static grpc_error* cc_init_channel_elem(grpc_channel_element* elem, |
|
|
|
|
// Record enable_retries.
|
|
|
|
|
arg = grpc_channel_args_find(args->channel_args, GRPC_ARG_ENABLE_RETRIES); |
|
|
|
|
chand->enable_retries = grpc_channel_arg_get_bool(arg, true); |
|
|
|
|
chand->channelz_channel = nullptr; |
|
|
|
|
// Record client channel factory.
|
|
|
|
|
arg = grpc_channel_args_find(args->channel_args, |
|
|
|
|
GRPC_ARG_CLIENT_CHANNEL_FACTORY); |
|
|
|
@ -3208,6 +3234,12 @@ static void try_to_connect_locked(void* arg, grpc_error* error_ignored) { |
|
|
|
|
GRPC_CHANNEL_STACK_UNREF(chand->owning_stack, "try_to_connect"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_client_channel_set_channelz_node( |
|
|
|
|
grpc_channel_element* elem, grpc_core::channelz::ClientChannelNode* node) { |
|
|
|
|
channel_data* chand = static_cast<channel_data*>(elem->channel_data); |
|
|
|
|
chand->channelz_channel = node; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_client_channel_populate_child_refs( |
|
|
|
|
grpc_channel_element* elem, |
|
|
|
|
grpc_core::channelz::ChildRefsList* child_subchannels, |
|
|
|
|