From 21035da1c9c20b5204ad4e9f2339490b3a3b6c0f Mon Sep 17 00:00:00 2001
From: yang-g <yangg@google.com>
Date: Tue, 16 May 2017 11:42:04 -0700
Subject: [PATCH] Add api to server builder plugin to modify the builder

---
 include/grpc++/impl/server_builder_plugin.h | 4 ++++
 src/cpp/server/server_builder.cc            | 4 ++++
 2 files changed, 8 insertions(+)

diff --git a/include/grpc++/impl/server_builder_plugin.h b/include/grpc++/impl/server_builder_plugin.h
index 61632e32fa..00d806ddb1 100644
--- a/include/grpc++/impl/server_builder_plugin.h
+++ b/include/grpc++/impl/server_builder_plugin.h
@@ -40,6 +40,7 @@
 
 namespace grpc {
 
+class ServerBuilder;
 class ServerInitializer;
 class ChannelArguments;
 
@@ -48,6 +49,9 @@ class ServerBuilderPlugin {
   virtual ~ServerBuilderPlugin() {}
   virtual grpc::string name() = 0;
 
+  /// UpdateServerBuilder will be called at the beginning of BuildAndStart.
+  virtual void UpdateServerBuilder(ServerBuilder* builder) {}
+
   // InitServer will be called in ServerBuilder::BuildAndStart(), after the
   // Server instance is created.
   virtual void InitServer(ServerInitializer* si) = 0;
diff --git a/src/cpp/server/server_builder.cc b/src/cpp/server/server_builder.cc
index 2ead048a1f..c3de7fee76 100644
--- a/src/cpp/server/server_builder.cc
+++ b/src/cpp/server/server_builder.cc
@@ -180,6 +180,10 @@ ServerBuilder& ServerBuilder::AddListeningPort(
 }
 
 std::unique_ptr<Server> ServerBuilder::BuildAndStart() {
+  for (auto plugin = plugins_.begin(); plugin != plugins_.end(); plugin++) {
+    (*plugin)->UpdateServerBuilder(this);
+  }
+
   ChannelArguments args;
   for (auto option = options_.begin(); option != options_.end(); ++option) {
     (*option)->UpdateArguments(&args);
-- 
GitLab