mirror of https://github.com/grpc/grpc.git
client channel: create a header file for internal interfaces (#32423)
This is just a bit of a code reorganization, no functional changes.pull/32451/head
parent
50e6af14ff
commit
3faeb3af80
17 changed files with 157 additions and 144 deletions
@ -0,0 +1,114 @@ |
||||
//
|
||||
// Copyright 2015 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#ifndef GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_INTERNAL_H |
||||
#define GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_INTERNAL_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include <utility> |
||||
|
||||
#include "absl/strings/string_view.h" |
||||
|
||||
#include "src/core/ext/filters/client_channel/config_selector.h" |
||||
#include "src/core/lib/channel/context.h" |
||||
#include "src/core/lib/gprpp/ref_counted_ptr.h" |
||||
#include "src/core/lib/gprpp/unique_type_name.h" |
||||
#include "src/core/lib/load_balancing/lb_policy.h" |
||||
#include "src/core/lib/service_config/service_config.h" |
||||
#include "src/core/lib/service_config/service_config_call_data.h" |
||||
#include "src/core/lib/service_config/service_config_parser.h" |
||||
|
||||
//
|
||||
// This file contains internal interfaces used to allow various plugins
|
||||
// (filters, LB policies, etc) to access internal data provided by the
|
||||
// ClientChannel that is not normally accessible via external APIs.
|
||||
//
|
||||
|
||||
namespace grpc_core { |
||||
|
||||
// Internal type for LB call state interface. Provides an interface for
|
||||
// LB policies to access internal call attributes.
|
||||
class ClientChannelLbCallState : public LoadBalancingPolicy::CallState { |
||||
public: |
||||
virtual absl::string_view GetCallAttribute(UniqueTypeName type) = 0; |
||||
}; |
||||
|
||||
// Internal type for ServiceConfigCallData. Provides access to the
|
||||
// CallDispatchController.
|
||||
class ClientChannelServiceConfigCallData : public ServiceConfigCallData { |
||||
public: |
||||
ClientChannelServiceConfigCallData( |
||||
RefCountedPtr<ServiceConfig> service_config, |
||||
const ServiceConfigParser::ParsedConfigVector* method_configs, |
||||
ServiceConfigCallData::CallAttributes call_attributes, |
||||
ConfigSelector::CallDispatchController* call_dispatch_controller, |
||||
grpc_call_context_element* call_context) |
||||
: ServiceConfigCallData(std::move(service_config), method_configs, |
||||
std::move(call_attributes)), |
||||
call_dispatch_controller_(call_dispatch_controller) { |
||||
call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = this; |
||||
call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].destroy = Destroy; |
||||
} |
||||
|
||||
ConfigSelector::CallDispatchController* call_dispatch_controller() { |
||||
return &call_dispatch_controller_; |
||||
} |
||||
|
||||
private: |
||||
// A wrapper for the CallDispatchController returned by the ConfigSelector.
|
||||
// Handles the case where the ConfigSelector doees not return any
|
||||
// CallDispatchController.
|
||||
// Also ensures that we call Commit() at most once, which allows the
|
||||
// client channel code to call Commit() when the call is complete in case
|
||||
// it wasn't called earlier, without needing to know whether or not it was.
|
||||
class CallDispatchControllerWrapper |
||||
: public ConfigSelector::CallDispatchController { |
||||
public: |
||||
explicit CallDispatchControllerWrapper( |
||||
ConfigSelector::CallDispatchController* call_dispatch_controller) |
||||
: call_dispatch_controller_(call_dispatch_controller) {} |
||||
|
||||
bool ShouldRetry() override { |
||||
if (call_dispatch_controller_ != nullptr) { |
||||
return call_dispatch_controller_->ShouldRetry(); |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
void Commit() override { |
||||
if (call_dispatch_controller_ != nullptr && !commit_called_) { |
||||
call_dispatch_controller_->Commit(); |
||||
commit_called_ = true; |
||||
} |
||||
} |
||||
|
||||
private: |
||||
ConfigSelector::CallDispatchController* call_dispatch_controller_; |
||||
bool commit_called_ = false; |
||||
}; |
||||
|
||||
static void Destroy(void* ptr) { |
||||
auto* self = static_cast<ClientChannelServiceConfigCallData*>(ptr); |
||||
self->~ClientChannelServiceConfigCallData(); |
||||
} |
||||
|
||||
CallDispatchControllerWrapper call_dispatch_controller_; |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_CLIENT_CHANNEL_INTERNAL_H
|
@ -1,39 +0,0 @@ |
||||
//
|
||||
// Copyright 2015 gRPC authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
//
|
||||
|
||||
#ifndef GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_CALL_STATE_INTERNAL_H |
||||
#define GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_CALL_STATE_INTERNAL_H |
||||
|
||||
#include <grpc/support/port_platform.h> |
||||
|
||||
#include "absl/strings/string_view.h" |
||||
|
||||
#include "src/core/lib/gprpp/unique_type_name.h" |
||||
#include "src/core/lib/load_balancing/lb_policy.h" |
||||
|
||||
namespace grpc_core { |
||||
|
||||
//
|
||||
// LbCallStateInternal
|
||||
//
|
||||
class LbCallStateInternal : public LoadBalancingPolicy::CallState { |
||||
public: |
||||
virtual absl::string_view GetCallAttribute(UniqueTypeName type) = 0; |
||||
}; |
||||
|
||||
} // namespace grpc_core
|
||||
|
||||
#endif // GRPC_SRC_CORE_EXT_FILTERS_CLIENT_CHANNEL_LB_CALL_STATE_INTERNAL_H
|
Loading…
Reference in new issue