Simplifiy transport querying function

reviewable/pr16713/r2
ncteisen 6 years ago
parent f13a743126
commit 4cc16f951c
  1. 29
      src/core/ext/filters/client_channel/client_channel_channelz.cc
  2. 5
      src/core/ext/filters/client_channel/client_channel_channelz.h
  3. 16
      src/core/ext/filters/client_channel/subchannel.cc
  4. 4
      src/core/ext/filters/client_channel/subchannel.h
  5. 9
      src/core/ext/transport/chttp2/transport/chttp2_transport.cc
  6. 5
      src/core/ext/transport/cronet/transport/cronet_transport.cc
  7. 5
      src/core/ext/transport/inproc/inproc_transport.cc
  8. 5
      src/core/lib/transport/transport.cc
  9. 10
      src/core/lib/transport/transport.h
  10. 3
      src/core/lib/transport/transport_impl.h
  11. 10
      test/cpp/microbenchmarks/bm_call_create.cc

@ -136,23 +136,6 @@ void SubchannelNode::PopulateConnectivityState(grpc_json* json) {
false);
}
void SubchannelNode::PopulateChildSockets(grpc_json* json) {
ChildRefsList child_sockets;
grpc_json* json_iterator = nullptr;
grpc_subchannel_populate_child_sockets(subchannel_, &child_sockets);
if (!child_sockets.empty()) {
grpc_json* array_parent = grpc_json_create_child(
nullptr, json, "socketRef", nullptr, GRPC_JSON_ARRAY, false);
for (size_t i = 0; i < child_sockets.size(); ++i) {
json_iterator =
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
GRPC_JSON_OBJECT, false);
grpc_json_add_number_string_child(json_iterator, nullptr, "socketId",
child_sockets[i]);
}
}
}
grpc_json* SubchannelNode::RenderJson() {
grpc_json* top_level_json = grpc_json_create(GRPC_JSON_OBJECT);
grpc_json* json = top_level_json;
@ -184,7 +167,17 @@ grpc_json* SubchannelNode::RenderJson() {
// ask CallCountingHelper to populate trace and call count data.
call_counter_.PopulateCallCounts(json);
json = top_level_json;
PopulateChildSockets(json);
// populate the child socket.
intptr_t socket_uuid = grpc_subchannel_get_child_socket_uuid(subchannel_);
if (socket_uuid != 0) {
grpc_json* array_parent = grpc_json_create_child(
nullptr, json, "socketRef", nullptr, GRPC_JSON_ARRAY, false);
json_iterator =
grpc_json_create_child(json_iterator, array_parent, nullptr, nullptr,
GRPC_JSON_OBJECT, false);
grpc_json_add_number_string_child(json_iterator, nullptr, "socketId",
socket_uuid);
}
return top_level_json;
}

@ -31,6 +31,11 @@ typedef struct grpc_subchannel grpc_subchannel;
namespace grpc_core {
// TODO(ncteisen), this only contains the uuids of the children for now,
// since that is all that is strictly needed. In a future enhancement we will
// add human readable names as in the channelz.proto
typedef InlinedVector<intptr_t, 10> ChildRefsList;
namespace channelz {
// Subtype of ChannelNode that overrides and provides client_channel specific

@ -97,7 +97,9 @@ struct grpc_subchannel {
/** set during connection */
grpc_connect_out_args connecting_result;
grpc_transport* transport;
/** uuid of this subchannel's socket. 0 if this subchannel is not
connected */
intptr_t socket_uuid;
/** callback for connection finishing */
grpc_closure on_connected;
@ -256,6 +258,7 @@ static void disconnect(grpc_subchannel* c) {
c->disconnected = true;
grpc_connector_shutdown(c->connector, GRPC_ERROR_CREATE_FROM_STATIC_STRING(
"Subchannel disconnected"));
c->socket_uuid = 0;
c->connected_subchannel.reset();
gpr_mu_unlock(&c->mu);
}
@ -413,11 +416,9 @@ grpc_core::channelz::SubchannelNode* grpc_subchannel_get_channelz_node(
return subchannel->channelz_subchannel.get();
}
void grpc_subchannel_populate_child_sockets(
grpc_subchannel* subchannel, grpc_core::ChildRefsList* child_sockets) {
if (subchannel->transport != nullptr) {
grpc_transport_populate_sockets(subchannel->transport, child_sockets);
}
intptr_t grpc_subchannel_get_child_socket_uuid(
grpc_subchannel* subchannel) {
return subchannel->socket_uuid;
}
static void continue_connect_locked(grpc_subchannel* c) {
@ -578,6 +579,7 @@ static void on_connected_subchannel_connectivity_changed(void* p,
grpc_connectivity_state_name(
connected_subchannel_watcher->connectivity_state));
}
c->socket_uuid = 0;
c->connected_subchannel.reset();
grpc_connectivity_state_set(&c->state_tracker,
GRPC_CHANNEL_TRANSIENT_FAILURE,
@ -630,7 +632,7 @@ static bool publish_transport_locked(grpc_subchannel* c) {
GRPC_ERROR_UNREF(error);
return false;
}
c->transport = c->connecting_result.transport;
c->socket_uuid = grpc_transport_get_socket_uuid(c->connecting_result.transport);
memset(&c->connecting_result, 0, sizeof(c->connecting_result));
/* initialize state watcher */

@ -126,8 +126,8 @@ void grpc_subchannel_call_unref(
grpc_core::channelz::SubchannelNode* grpc_subchannel_get_channelz_node(
grpc_subchannel* subchannel);
void grpc_subchannel_populate_child_sockets(
grpc_subchannel* subchannel, grpc_core::ChildRefsList* child_sockets);
intptr_t grpc_subchannel_get_child_socket_uuid(
grpc_subchannel* subchannel);
/** Returns a pointer to the parent data associated with \a subchannel_call.
The data will be of the size specified in \a parent_data_size

@ -3157,12 +3157,13 @@ static grpc_endpoint* chttp2_get_endpoint(grpc_transport* t) {
return (reinterpret_cast<grpc_chttp2_transport*>(t))->ep;
}
static void populate_sockets(grpc_transport* transport,
grpc_core::ChildRefsList* child_sockets) {
static intptr_t get_socket_uuid(grpc_transport* transport) {
grpc_chttp2_transport* t =
reinterpret_cast<grpc_chttp2_transport*>(transport);
if (t->channelz_socket != nullptr) {
child_sockets->push_back(t->channelz_socket->uuid());
return t->channelz_socket->uuid();
} else {
return 0;
}
}
@ -3176,7 +3177,7 @@ static const grpc_transport_vtable vtable = {sizeof(grpc_chttp2_stream),
destroy_stream,
destroy_transport,
chttp2_get_endpoint,
populate_sockets};
get_socket_uuid};
static const grpc_transport_vtable* get_vtable(void) { return &vtable; }

@ -1439,8 +1439,7 @@ static grpc_endpoint* get_endpoint(grpc_transport* gt) { return nullptr; }
static void perform_op(grpc_transport* gt, grpc_transport_op* op) {}
static void populate_sockets(grpc_transport* t,
grpc_core::ChildRefsList* child_sockets) {}
static intptr_t get_socket_uuid(grpc_transport* t) { return 0; }
static const grpc_transport_vtable grpc_cronet_vtable = {
sizeof(stream_obj),
@ -1453,7 +1452,7 @@ static const grpc_transport_vtable grpc_cronet_vtable = {
destroy_stream,
destroy_transport,
get_endpoint,
populate_sockets};
get_socket_uuid};
grpc_transport* grpc_create_cronet_transport(void* engine, const char* target,
const grpc_channel_args* args,

@ -1170,8 +1170,7 @@ static void set_pollset_set(grpc_transport* gt, grpc_stream* gs,
static grpc_endpoint* get_endpoint(grpc_transport* t) { return nullptr; }
static void populate_sockets(grpc_transport* t,
grpc_core::ChildRefsList* child_sockets) {}
static intptr_t get_socket_uuid(grpc_transport* t) { return 0; }
/*******************************************************************************
* GLOBAL INIT AND DESTROY
@ -1197,7 +1196,7 @@ static const grpc_transport_vtable inproc_vtable = {
sizeof(inproc_stream), "inproc", init_stream,
set_pollset, set_pollset_set, perform_stream_op,
perform_transport_op, destroy_stream, destroy_transport,
get_endpoint, populate_sockets};
get_endpoint, get_socket_uuid};
/*******************************************************************************
* Main inproc transport functions

@ -199,9 +199,8 @@ grpc_endpoint* grpc_transport_get_endpoint(grpc_transport* transport) {
return transport->vtable->get_endpoint(transport);
}
void grpc_transport_populate_sockets(grpc_transport* transport,
grpc_core::ChildRefsList* child_sockets) {
return transport->vtable->populate_sockets(transport, child_sockets);
intptr_t grpc_transport_get_socket_uuid(grpc_transport* transport) {
return transport->vtable->get_socket_uuid(transport);
}
// This comment should be sung to the tune of

@ -39,13 +39,6 @@
#define GRPC_PROTOCOL_VERSION_MIN_MAJOR 2
#define GRPC_PROTOCOL_VERSION_MIN_MINOR 1
namespace grpc_core {
// TODO(ncteisen), this only contains the uuids of the children for now,
// since that is all that is strictly needed. In a future enhancement we will
// add human readable names as in the channelz.proto
typedef InlinedVector<intptr_t, 10> ChildRefsList;
} // namespace grpc_core
/* forward declarations */
typedef struct grpc_transport grpc_transport;
@ -373,8 +366,7 @@ void grpc_transport_destroy(grpc_transport* transport);
/* Get the endpoint used by \a transport */
grpc_endpoint* grpc_transport_get_endpoint(grpc_transport* transport);
void grpc_transport_populate_sockets(grpc_transport* transport,
grpc_core::ChildRefsList* child_sockets);
intptr_t grpc_transport_get_socket_uuid(grpc_transport* transport);
/* Allocate a grpc_transport_op, and preconfigure the on_consumed closure to
\a on_consumed and then delete the returned transport op */

@ -61,8 +61,7 @@ typedef struct grpc_transport_vtable {
/* implementation of grpc_transport_get_endpoint */
grpc_endpoint* (*get_endpoint)(grpc_transport* self);
void (*populate_sockets)(grpc_transport* self,
grpc_core::ChildRefsList* child_sockets);
intptr_t (*get_socket_uuid)(grpc_transport* self);
} grpc_transport_vtable;
/* an instance of a grpc transport */

@ -446,11 +446,13 @@ void Destroy(grpc_transport* self) {}
/* implementation of grpc_transport_get_endpoint */
grpc_endpoint* GetEndpoint(grpc_transport* self) { return nullptr; }
intptr_t GetSocketUuid(grpc_transport* t) { return 0; }
static const grpc_transport_vtable dummy_transport_vtable = {
0, "dummy_http2", InitStream,
SetPollset, SetPollsetSet, PerformStreamOp,
PerformOp, DestroyStream, Destroy,
GetEndpoint};
0, "dummy_http2", InitStream,
SetPollset, SetPollsetSet, PerformStreamOp,
PerformOp, DestroyStream, Destroy,
GetEndpoint, GetSocketUuid};
static grpc_transport dummy_transport = {&dummy_transport_vtable};

Loading…
Cancel
Save