// We rebuild the channel each time we construct the channel. It appears that the gRPC library is
// This is for initializing gRPC channel at channel creation. This GetState(true) is used to poke
// the gRPC lb at channel creation, it doesn't have any effect no matter it succeeds or fails. But
*this, service_full_name, method_name, std::move(request), callbacks, parent_span, options);
auto grpc_stream = std::make_unique<GoogleAsyncStreamImpl>(*this, service_full_name, method_name,
: parent_(parent), tls_(parent_.tls_), dispatcher_(parent_.dispatcher_), stub_(parent_.stub_),
current_span_ = options.parent_span_->spawnChild(Tracing::EgressConfig::get(), child_span_name,
GoogleAsyncStreamImpl::PendingMessage::PendingMessage(Buffer::InstancePtr request, bool end_stream)
parent_.metadata_parser_->evaluateHeaders(*initial_metadata, options_.parent_context.stream_info);
void GoogleAsyncStreamImpl::sendMessageRaw(Buffer::InstancePtr&& request, bool end_stream) {
if (!call_initialized_ || finish_pending_ || write_pending_ || write_pending_queue_.empty() ||
// The items in completed_ops_ execute in the order they were originally added to the queue since
ENVOY_LOG(debug, "Finish with grpc-status code {}", static_cast<int>(status_.error_code()));
absl::string_view method_name, Buffer::InstancePtr request, RawAsyncRequestCallbacks& callbacks,