aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/grpc/include/grpcpp/xds_server_builder.h
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-03-15 21:33:41 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-03-15 21:33:41 +0300
commit3dd665b514943f69657b593eb51af90b99b1206b (patch)
tree0eb633e628bb1fe6c639574b1184d43def7c0a73 /contrib/libs/grpc/include/grpcpp/xds_server_builder.h
parenta68afc731202027f105bc5723ee11788017c29e2 (diff)
downloadydb-3dd665b514943f69657b593eb51af90b99b1206b.tar.gz
intermediate changes
ref:953ca886ec160075b38c0f3614de029b423f0a9e
Diffstat (limited to 'contrib/libs/grpc/include/grpcpp/xds_server_builder.h')
-rw-r--r--contrib/libs/grpc/include/grpcpp/xds_server_builder.h75
1 files changed, 75 insertions, 0 deletions
diff --git a/contrib/libs/grpc/include/grpcpp/xds_server_builder.h b/contrib/libs/grpc/include/grpcpp/xds_server_builder.h
new file mode 100644
index 0000000000..c1549179ba
--- /dev/null
+++ b/contrib/libs/grpc/include/grpcpp/xds_server_builder.h
@@ -0,0 +1,75 @@
+//
+//
+// Copyright 2020 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 GRPCPP_XDS_SERVER_BUILDER_H
+#define GRPCPP_XDS_SERVER_BUILDER_H
+
+#include <grpc/impl/codegen/port_platform.h>
+
+#include <grpcpp/server_builder.h>
+
+namespace grpc {
+namespace experimental {
+
+class XdsServerServingStatusNotifierInterface {
+ public:
+ virtual ~XdsServerServingStatusNotifierInterface() = default;
+
+ // \a uri contains the listening target associated with the notification. Note
+ // that a single target provided to XdsServerBuilder can get resolved to
+ // multiple listening addresses. Status::OK signifies that the server is
+ // serving, while a non-OK status signifies that the server is not serving.
+ virtual void OnServingStatusChange(TString uri, grpc::Status status) = 0;
+};
+
+class XdsServerBuilder : public ::grpc::ServerBuilder {
+ public:
+ // It is the responsibility of the application to make sure that \a notifier
+ // outlasts the life of the server. Notifications will start being made
+ // asynchronously once `BuildAndStart()` has been called. Note that it is
+ // possible for notifications to be made before `BuildAndStart()` returns.
+ void set_status_notifier(XdsServerServingStatusNotifierInterface* notifier) {
+ notifier_ = notifier;
+ }
+
+ std::unique_ptr<Server> BuildAndStart() override {
+ grpc_server_config_fetcher* fetcher = grpc_server_config_fetcher_xds_create(
+ {OnServingStatusChange, notifier_});
+ if (fetcher == nullptr) return nullptr;
+ set_fetcher(fetcher);
+ return ServerBuilder::BuildAndStart();
+ }
+
+ private:
+ static void OnServingStatusChange(void* user_data, const char* uri,
+ grpc_status_code code,
+ const char* error_message) {
+ if (user_data == nullptr) return;
+ XdsServerServingStatusNotifierInterface* notifier =
+ static_cast<XdsServerServingStatusNotifierInterface*>(user_data);
+ notifier->OnServingStatusChange(
+ uri, grpc::Status(static_cast<StatusCode>(code), error_message));
+ }
+
+ XdsServerServingStatusNotifierInterface* notifier_ = nullptr;
+};
+
+} // namespace experimental
+} // namespace grpc
+
+#endif /* GRPCPP_XDS_SERVER_BUILDER_H */