diff --git a/src/core/lib/surface/call.cc b/src/core/lib/surface/call.cc index c92172f278e..f5abf1a1a62 100644 --- a/src/core/lib/surface/call.cc +++ b/src/core/lib/surface/call.cc @@ -509,26 +509,6 @@ static void destroy_call(void* call, grpc_error* error) { GRPC_CQ_INTERNAL_UNREF(c->cq, "bind"); } - grpc_core::channelz::ChannelNode* channelz_channel = - grpc_channel_get_channelz_node(c->channel); - if (c->is_client) { - if (channelz_channel != nullptr) { - if (*c->final_op.client.status != GRPC_STATUS_OK) { - channelz_channel->RecordCallFailed(); - } else { - channelz_channel->RecordCallSucceeded(); - } - } - } else { - if (channelz_channel != nullptr) { - if (*c->final_op.server.cancelled || c->status_error != GRPC_ERROR_NONE) { - channelz_channel->RecordCallFailed(); - } else { - channelz_channel->RecordCallSucceeded(); - } - } - } - grpc_slice slice = grpc_empty_slice(); grpc_error_get_status(c->status_error, c->send_deadline, &c->final_info.final_status, &slice, nullptr, @@ -734,6 +714,15 @@ static void set_final_status(grpc_call* call, grpc_error* error) { error_string); *call->final_op.client.status = code; *call->final_op.client.status_details = grpc_slice_ref_internal(slice); + grpc_core::channelz::ChannelNode* channelz_channel = + grpc_channel_get_channelz_node(call->channel); + if (channelz_channel != nullptr) { + if (code != GRPC_STATUS_OK) { + channelz_channel->RecordCallFailed(); + } else { + channelz_channel->RecordCallSucceeded(); + } + } } else { *call->final_op.server.cancelled = error != GRPC_ERROR_NONE || call->status_error != GRPC_ERROR_NONE; @@ -1683,6 +1672,15 @@ static grpc_call_error call_start_batch(grpc_call* call, const grpc_op* ops, static_cast( op->data.send_status_from_server.status)); call->status_error = status_error; + grpc_core::channelz::ChannelNode* channelz_channel = + grpc_channel_get_channelz_node(call->channel); + if (channelz_channel != nullptr) { + if (call->status_error != GRPC_ERROR_NONE) { + channelz_channel->RecordCallFailed(); + } else { + channelz_channel->RecordCallSucceeded(); + } + } if (!prepare_application_metadata( call, static_cast(