mesos-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From vinodk...@apache.org
Subject [06/15] mesos git commit: Devolved v1 operator protos to unversioned operator protos in Master.
Date Thu, 16 Jun 2016 19:52:42 GMT
Devolved v1 operator protos to unversioned operator protos in Master.

Review: https://reviews.apache.org/r/48585/


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/305b6032
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/305b6032
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/305b6032

Branch: refs/heads/master
Commit: 305b6032a9048be9fecef370151510900c9f4548
Parents: 53dcd8a
Author: haosdent huang <haosdent@gmail.com>
Authored: Thu Jun 16 12:50:51 2016 -0700
Committer: Vinod Kone <vinodkone@gmail.com>
Committed: Thu Jun 16 12:52:17 2016 -0700

----------------------------------------------------------------------
 src/internal/devolve.cpp  |   6 ++
 src/internal/devolve.hpp  |   5 ++
 src/internal/evolve.cpp   |   8 +++
 src/internal/evolve.hpp   |   4 ++
 src/master/http.cpp       | 126 +++++++++++++++++++++--------------------
 src/master/master.hpp     |  14 ++---
 src/master/validation.cpp |  64 ++++++++++-----------
 src/master/validation.hpp |   4 +-
 8 files changed, 128 insertions(+), 103 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/internal/devolve.cpp
----------------------------------------------------------------------
diff --git a/src/internal/devolve.cpp b/src/internal/devolve.cpp
index 4233246..78052fa 100644
--- a/src/internal/devolve.cpp
+++ b/src/internal/devolve.cpp
@@ -132,5 +132,11 @@ scheduler::Event devolve(const v1::scheduler::Event& event)
   return devolve<scheduler::Event>(event);
 }
 
+
+mesos::master::Call devolve(const v1::master::Call& call)
+{
+  return devolve<mesos::master::Call>(call);
+}
+
 } // namespace internal {
 } // namespace mesos {

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/internal/devolve.hpp
----------------------------------------------------------------------
diff --git a/src/internal/devolve.hpp b/src/internal/devolve.hpp
index 00842bb..4a33a36 100644
--- a/src/internal/devolve.hpp
+++ b/src/internal/devolve.hpp
@@ -23,8 +23,11 @@
 
 #include <mesos/executor/executor.hpp>
 
+#include <mesos/master/master.hpp>
+
 #include <mesos/scheduler/scheduler.hpp>
 
+#include <mesos/v1/master.hpp>
 #include <mesos/v1/mesos.hpp>
 
 #include <mesos/v1/executor/executor.hpp>
@@ -52,6 +55,8 @@ scheduler::Event devolve(const v1::scheduler::Event& event);
 
 executor::Call devolve(const v1::executor::Call& call);
 
+mesos::master::Call devolve(const v1::master::Call& call);
+
 // Helper for repeated field devolving to 'T1' from 'T2'.
 template <typename T1, typename T2>
 google::protobuf::RepeatedPtrField<T1> devolve(

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/internal/evolve.cpp
----------------------------------------------------------------------
diff --git a/src/internal/evolve.cpp b/src/internal/evolve.cpp
index 7f16cbd..003ff82 100644
--- a/src/internal/evolve.cpp
+++ b/src/internal/evolve.cpp
@@ -14,6 +14,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <mesos/master/master.hpp>
+
 #include <mesos/v1/agent.hpp>
 #include <mesos/v1/master.hpp>
 
@@ -151,6 +153,12 @@ v1::MasterInfo evolve(const MasterInfo& masterInfo)
 }
 
 
+v1::master::Response evolve(const mesos::master::Response& response)
+{
+  return evolve<v1::master::Response>(response);
+}
+
+
 v1::scheduler::Call evolve(const scheduler::Call& call)
 {
   return evolve<v1::scheduler::Call>(call);

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/internal/evolve.hpp
----------------------------------------------------------------------
diff --git a/src/internal/evolve.hpp b/src/internal/evolve.hpp
index 66a3dea..816c272 100644
--- a/src/internal/evolve.hpp
+++ b/src/internal/evolve.hpp
@@ -23,6 +23,8 @@
 
 #include <mesos/executor/executor.hpp>
 
+#include <mesos/master/master.hpp>
+
 #include <mesos/scheduler/scheduler.hpp>
 
 #include <mesos/v1/agent.hpp>
@@ -57,6 +59,8 @@ v1::TaskInfo evolve(const TaskInfo& taskInfo);
 v1::TaskStatus evolve(const TaskStatus& status);
 v1::MasterInfo evolve(const MasterInfo& masterInfo);
 
+v1::master::Response evolve(const mesos::master::Response& response);
+
 v1::scheduler::Call evolve(const scheduler::Call& call);
 
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/master/http.cpp
----------------------------------------------------------------------
diff --git a/src/master/http.cpp b/src/master/http.cpp
index 1402985..493c006 100644
--- a/src/master/http.cpp
+++ b/src/master/http.cpp
@@ -33,6 +33,8 @@
 
 #include <mesos/maintenance/maintenance.hpp>
 
+#include <mesos/master/master.hpp>
+
 #include <mesos/v1/master.hpp>
 
 #include <process/collect.hpp>
@@ -533,7 +535,7 @@ Future<Response> Master::Http::api(
     return MethodNotAllowed({"POST"}, request.method);
   }
 
-  v1::master::Call call;
+  v1::master::Call v1Call;
 
   // TODO(anand): Content type values are case-insensitive.
   Option<string> contentType = request.headers.get("Content-Type");
@@ -543,7 +545,7 @@ Future<Response> Master::Http::api(
   }
 
   if (contentType.get() == APPLICATION_PROTOBUF) {
-    if (!call.ParseFromString(request.body)) {
+    if (!v1Call.ParseFromString(request.body)) {
       return BadRequest("Failed to parse body into Call protobuf");
     }
   } else if (contentType.get() == APPLICATION_JSON) {
@@ -561,17 +563,19 @@ Future<Response> Master::Http::api(
                         parse.error());
     }
 
-    call = parse.get();
+    v1Call = parse.get();
   } else {
     return UnsupportedMediaType(
         string("Expecting 'Content-Type' of ") +
         APPLICATION_JSON + " or " + APPLICATION_PROTOBUF);
   }
 
+  mesos::master::Call call = devolve(v1Call);
+
   Option<Error> error = validation::master::call::validate(call, principal);
 
   if (error.isSome()) {
-    return BadRequest("Failed to validate v1::master::Call: " +
+    return BadRequest("Failed to validate master::Call: " +
                       error.get().message);
   }
 
@@ -589,97 +593,97 @@ Future<Response> Master::Http::api(
   }
 
   switch (call.type()) {
-    case v1::master::Call::UNKNOWN:
+    case mesos::master::Call::UNKNOWN:
       return NotImplemented();
 
-    case v1::master::Call::GET_HEALTH:
+    case mesos::master::Call::GET_HEALTH:
       return getHealth(call, principal, acceptType);
 
-    case v1::master::Call::GET_FLAGS:
+    case mesos::master::Call::GET_FLAGS:
       return getFlags(call, principal, acceptType);
 
-    case v1::master::Call::GET_VERSION:
+    case mesos::master::Call::GET_VERSION:
       return getVersion(call, principal, acceptType);
 
-    case v1::master::Call::GET_METRICS:
+    case mesos::master::Call::GET_METRICS:
       return NotImplemented();
 
-    case v1::master::Call::GET_LOGGING_LEVEL:
+    case mesos::master::Call::GET_LOGGING_LEVEL:
       return getLoggingLevel(call, principal, acceptType);
 
-    case v1::master::Call::SET_LOGGING_LEVEL:
+    case mesos::master::Call::SET_LOGGING_LEVEL:
       return NotImplemented();
 
-    case v1::master::Call::LIST_FILES:
+    case mesos::master::Call::LIST_FILES:
       return NotImplemented();
 
-    case v1::master::Call::READ_FILE:
+    case mesos::master::Call::READ_FILE:
       return NotImplemented();
 
-    case v1::master::Call::GET_STATE:
+    case mesos::master::Call::GET_STATE:
       return NotImplemented();
 
-    case v1::master::Call::GET_STATE_SUMMARY:
+    case mesos::master::Call::GET_STATE_SUMMARY:
       return NotImplemented();
 
-    case v1::master::Call::GET_AGENTS:
+    case mesos::master::Call::GET_AGENTS:
       return NotImplemented();
 
-    case v1::master::Call::GET_FRAMEWORKS:
+    case mesos::master::Call::GET_FRAMEWORKS:
       return NotImplemented();
 
-    case v1::master::Call::GET_TASKS:
+    case mesos::master::Call::GET_TASKS:
       return NotImplemented();
 
-    case v1::master::Call::GET_ROLES:
+    case mesos::master::Call::GET_ROLES:
       return NotImplemented();
 
-    case v1::master::Call::GET_WEIGHTS:
+    case mesos::master::Call::GET_WEIGHTS:
       return NotImplemented();
 
-    case v1::master::Call::UPDATE_WEIGHTS:
+    case mesos::master::Call::UPDATE_WEIGHTS:
       return NotImplemented();
 
-    case v1::master::Call::GET_LEADING_MASTER:
+    case mesos::master::Call::GET_LEADING_MASTER:
       return getLeadingMaster(call, principal, acceptType);
 
-    case v1::master::Call::RESERVE_RESOURCES:
+    case mesos::master::Call::RESERVE_RESOURCES:
       return NotImplemented();
 
-    case v1::master::Call::UNRESERVE_RESOURCES:
+    case mesos::master::Call::UNRESERVE_RESOURCES:
       return NotImplemented();
 
-    case v1::master::Call::CREATE_VOLUMES:
+    case mesos::master::Call::CREATE_VOLUMES:
       return NotImplemented();
 
-    case v1::master::Call::DESTROY_VOLUMES:
+    case mesos::master::Call::DESTROY_VOLUMES:
       return NotImplemented();
 
-    case v1::master::Call::GET_MAINTENANCE_STATUS:
+    case mesos::master::Call::GET_MAINTENANCE_STATUS:
       return NotImplemented();
 
-    case v1::master::Call::GET_MAINTENANCE_SCHEDULE:
+    case mesos::master::Call::GET_MAINTENANCE_SCHEDULE:
       return NotImplemented();
 
-    case v1::master::Call::UPDATE_MAINTENANCE_SCHEDULE:
+    case mesos::master::Call::UPDATE_MAINTENANCE_SCHEDULE:
       return NotImplemented();
 
-    case v1::master::Call::START_MAINTENANCE:
+    case mesos::master::Call::START_MAINTENANCE:
       return NotImplemented();
 
-    case v1::master::Call::STOP_MAINTENANCE:
+    case mesos::master::Call::STOP_MAINTENANCE:
       return NotImplemented();
 
-    case v1::master::Call::GET_QUOTA:
+    case mesos::master::Call::GET_QUOTA:
       return NotImplemented();
 
-    case v1::master::Call::SET_QUOTA:
+    case mesos::master::Call::SET_QUOTA:
       return NotImplemented();
 
-    case v1::master::Call::REMOVE_QUOTA:
+    case mesos::master::Call::REMOVE_QUOTA:
       return NotImplemented();
 
-    case v1::master::Call::SUBSCRIBE:
+    case mesos::master::Call::SUBSCRIBE:
       return NotImplemented();
   }
 
@@ -1282,16 +1286,14 @@ JSON::Object Master::Http::_flags() const
 
 
 Future<Response> Master::Http::getFlags(
-    const v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal,
     ContentType contentType) const
 {
-  CHECK_EQ(v1::master::Call::GET_FLAGS, call.type());
-
-  v1::master::Response response =
-    evolve<v1::master::Response::GET_FLAGS>(_flags());
+  CHECK_EQ(mesos::master::Call::GET_FLAGS, call.type());
 
-  return OK(serialize(contentType, response),
+  return OK(serialize(contentType,
+                      evolve<v1::master::Response::GET_FLAGS>(_flags())),
             stringify(contentType));
 }
 
@@ -1315,69 +1317,69 @@ Future<Response> Master::Http::health(const Request& request)
const
 
 
 Future<Response> Master::Http::getHealth(
-    const v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal,
     ContentType contentType) const
 {
-  CHECK_EQ(v1::master::Call::GET_HEALTH, call.type());
+  CHECK_EQ(mesos::master::Call::GET_HEALTH, call.type());
 
-  v1::master::Response response;
-  response.set_type(v1::master::Response::GET_HEALTH);
+  mesos::master::Response response;
+  response.set_type(mesos::master::Response::GET_HEALTH);
   response.mutable_get_health()->set_healthy(true);
 
   return OK(serialize(contentType, response),
             stringify(contentType));
+  return OK(serialize(contentType, evolve(response)),
+            stringify(contentType));
 }
 
 
 Future<Response> Master::Http::getVersion(
-    const v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal,
     ContentType contentType) const
 {
-  CHECK_EQ(v1::master::Call::GET_VERSION, call.type());
-
-  v1::master::Response response =
-    evolve<v1::master::Response::GET_VERSION>(version());
+  CHECK_EQ(mesos::master::Call::GET_VERSION, call.type());
 
-  return OK(serialize(contentType, response),
+  return OK(serialize(contentType,
+                      evolve<v1::master::Response::GET_VERSION>(version())),
             stringify(contentType));
 }
 
 
 Future<Response> Master::Http::getLoggingLevel(
-    const v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal,
     ContentType contentType) const
 {
-  CHECK_EQ(v1::master::Call::GET_LOGGING_LEVEL, call.type());
+  CHECK_EQ(mesos::master::Call::GET_LOGGING_LEVEL, call.type());
 
-  v1::master::Response response;
-  response.set_type(v1::master::Response::GET_LOGGING_LEVEL);
+  mesos::master::Response response;
+  response.set_type(mesos::master::Response::GET_LOGGING_LEVEL);
   response.mutable_get_logging_level()->set_level(FLAGS_v);
 
-  return OK(serialize(contentType, response),
+  return OK(serialize(contentType, evolve(response)),
             stringify(contentType));
 }
 
 
 Future<Response> Master::Http::getLeadingMaster(
-    const v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal,
     ContentType contentType) const
 {
-  CHECK_EQ(v1::master::Call::GET_LEADING_MASTER, call.type());
+  CHECK_EQ(mesos::master::Call::GET_LEADING_MASTER, call.type());
 
-  v1::master::Response response;
-  response.set_type(v1::master::Response::GET_LEADING_MASTER);
+  mesos::master::Response response;
+  response.set_type(mesos::master::Response::GET_LEADING_MASTER);
 
   // It is guaranteed that this master has been elected as the leader.
   CHECK(master->elected());
 
   response.mutable_get_leading_master()->mutable_master_info()->CopyFrom(
-    evolve(master->info()));
+    master->info());
 
-  return OK(serialize(contentType, response),
+  return OK(serialize(contentType, evolve(response)),
             stringify(contentType));
 }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/master/master.hpp
----------------------------------------------------------------------
diff --git a/src/master/master.hpp b/src/master/master.hpp
index a0944dd..a18f091 100644
--- a/src/master/master.hpp
+++ b/src/master/master.hpp
@@ -42,7 +42,7 @@
 
 #include <mesos/scheduler/scheduler.hpp>
 
-#include <mesos/v1/master.hpp>
+#include <mesos/master/master.hpp>
 
 #include <process/limiter.hpp>
 #include <process/http.hpp>
@@ -1280,30 +1280,30 @@ private:
         const std::string& endpoint,
         const std::string& method) const;
 
-    // v1 master API handlers.
+    // Master API handlers.
 
     process::Future<process::http::Response> getFlags(
-        const v1::master::Call& call,
+        const mesos::master::Call& call,
         const Option<std::string>& principal,
         ContentType contentType) const;
 
     process::Future<process::http::Response> getHealth(
-        const v1::master::Call& call,
+        const mesos::master::Call& call,
         const Option<std::string>& principal,
         ContentType contentType) const;
 
     process::Future<process::http::Response> getVersion(
-        const v1::master::Call& call,
+        const mesos::master::Call& call,
         const Option<std::string>& principal,
         ContentType contentType) const;
 
     process::Future<process::http::Response> getLoggingLevel(
-        const v1::master::Call& call,
+        const mesos::master::Call& call,
         const Option<std::string>& principal,
         ContentType contentType) const;
 
     process::Future<process::http::Response> getLeadingMaster(
-        const v1::master::Call& call,
+        const mesos::master::Call& call,
         const Option<std::string>& principal,
         ContentType contentType) const;
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/master/validation.cpp
----------------------------------------------------------------------
diff --git a/src/master/validation.cpp b/src/master/validation.cpp
index 7b9c228..7f139fb 100644
--- a/src/master/validation.cpp
+++ b/src/master/validation.cpp
@@ -54,7 +54,7 @@ namespace master {
 namespace call {
 
 Option<Error> validate(
-    const mesos::v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<string>& principal)
 {
   if (!call.IsInitialized()) {
@@ -66,139 +66,139 @@ Option<Error> validate(
   }
 
   switch (call.type()) {
-    case v1::master::Call::UNKNOWN:
+    case mesos::master::Call::UNKNOWN:
       return None();
 
-    case v1::master::Call::GET_HEALTH:
+    case mesos::master::Call::GET_HEALTH:
       return None();
 
-    case v1::master::Call::GET_FLAGS:
+    case mesos::master::Call::GET_FLAGS:
       return None();
 
-    case v1::master::Call::GET_VERSION:
+    case mesos::master::Call::GET_VERSION:
       return None();
 
-    case v1::master::Call::GET_METRICS:
+    case mesos::master::Call::GET_METRICS:
       if (!call.has_get_metrics()) {
         return Error("Expecting 'get_metrics' to be present");
       }
       return None();
 
-    case v1::master::Call::GET_LOGGING_LEVEL:
+    case mesos::master::Call::GET_LOGGING_LEVEL:
       return None();
 
-    case v1::master::Call::SET_LOGGING_LEVEL:
+    case mesos::master::Call::SET_LOGGING_LEVEL:
       if (!call.has_set_logging_level()) {
         return Error("Expecting 'set_logging_level' to be present");
       }
       return None();
 
-    case v1::master::Call::LIST_FILES:
+    case mesos::master::Call::LIST_FILES:
       if (!call.has_list_files()) {
         return Error("Expecting 'list_files' to be present");
       }
       return None();
 
-    case v1::master::Call::READ_FILE:
+    case mesos::master::Call::READ_FILE:
       if (!call.has_read_file()) {
         return Error("Expecting 'read_file' to be present");
       }
       return None();
 
-    case v1::master::Call::GET_STATE:
+    case mesos::master::Call::GET_STATE:
       return None();
 
-    case v1::master::Call::GET_STATE_SUMMARY:
+    case mesos::master::Call::GET_STATE_SUMMARY:
       return None();
 
-    case v1::master::Call::GET_AGENTS:
+    case mesos::master::Call::GET_AGENTS:
       return None();
 
-    case v1::master::Call::GET_FRAMEWORKS:
+    case mesos::master::Call::GET_FRAMEWORKS:
       return None();
 
-    case v1::master::Call::GET_TASKS:
+    case mesos::master::Call::GET_TASKS:
       if (!call.has_get_tasks()) {
         return Error("Expecting 'get_tasks' to be present");
       }
       return None();
 
-    case v1::master::Call::GET_ROLES:
+    case mesos::master::Call::GET_ROLES:
       return None();
 
-    case v1::master::Call::GET_WEIGHTS:
+    case mesos::master::Call::GET_WEIGHTS:
       return None();
 
-    case v1::master::Call::UPDATE_WEIGHTS:
+    case mesos::master::Call::UPDATE_WEIGHTS:
       return None();
 
-    case v1::master::Call::GET_LEADING_MASTER:
+    case mesos::master::Call::GET_LEADING_MASTER:
       return None();
 
-    case v1::master::Call::RESERVE_RESOURCES:
+    case mesos::master::Call::RESERVE_RESOURCES:
       if (!call.has_reserve_resources()) {
         return Error("Expecting 'reserve_resources' to be present");
       }
       return None();
 
-    case v1::master::Call::UNRESERVE_RESOURCES:
+    case mesos::master::Call::UNRESERVE_RESOURCES:
       if (!call.has_unreserve_resources()) {
         return Error("Expecting 'unreserve_resources' to be present");
       }
       return None();
 
-    case v1::master::Call::CREATE_VOLUMES:
+    case mesos::master::Call::CREATE_VOLUMES:
       if (!call.has_create_volumes()) {
         return Error("Expecting 'create_volumes' to be present");
       }
       return None();
 
-    case v1::master::Call::DESTROY_VOLUMES:
+    case mesos::master::Call::DESTROY_VOLUMES:
       if (!call.has_destroy_volumes()) {
         return Error("Expecting 'destroy_volumes' to be present");
       }
       return None();
 
-    case v1::master::Call::GET_MAINTENANCE_STATUS:
+    case mesos::master::Call::GET_MAINTENANCE_STATUS:
       return None();
 
-    case v1::master::Call::GET_MAINTENANCE_SCHEDULE:
+    case mesos::master::Call::GET_MAINTENANCE_SCHEDULE:
       return None();
 
-    case v1::master::Call::UPDATE_MAINTENANCE_SCHEDULE:
+    case mesos::master::Call::UPDATE_MAINTENANCE_SCHEDULE:
       if (!call.has_update_maintenance_schedule()) {
         return Error("Expecting 'update_maintenance_schedule' to be present");
       }
       return None();
 
-    case v1::master::Call::START_MAINTENANCE:
+    case mesos::master::Call::START_MAINTENANCE:
       if (!call.has_start_maintenance()) {
         return Error("Expecting 'start_maintenance' to be present");
       }
       return None();
 
-    case v1::master::Call::STOP_MAINTENANCE:
+    case mesos::master::Call::STOP_MAINTENANCE:
       if (!call.has_stop_maintenance()) {
         return Error("Expecting 'stop_maintenance' to be present");
       }
       return None();
 
-    case v1::master::Call::GET_QUOTA:
+    case mesos::master::Call::GET_QUOTA:
       return None();
 
-    case v1::master::Call::SET_QUOTA:
+    case mesos::master::Call::SET_QUOTA:
       if (!call.has_set_quota()) {
         return Error("Expecting 'set_quota' to be present");
       }
       return None();
 
-    case v1::master::Call::REMOVE_QUOTA:
+    case mesos::master::Call::REMOVE_QUOTA:
       if (!call.has_remove_quota()) {
         return Error("Expecting 'remove_quota' to be present");
       }
       return None();
 
-    case v1::master::Call::SUBSCRIBE:
+    case mesos::master::Call::SUBSCRIBE:
       return None();
   }
 

http://git-wip-us.apache.org/repos/asf/mesos/blob/305b6032/src/master/validation.hpp
----------------------------------------------------------------------
diff --git a/src/master/validation.hpp b/src/master/validation.hpp
index e1271bb..43d876b 100644
--- a/src/master/validation.hpp
+++ b/src/master/validation.hpp
@@ -24,7 +24,7 @@
 
 #include <mesos/scheduler/scheduler.hpp>
 
-#include <mesos/v1/master.hpp>
+#include <mesos/master/master.hpp>
 
 #include <stout/error.hpp>
 #include <stout/option.hpp>
@@ -46,7 +46,7 @@ namespace call {
 // Validates that a master:Call is well-formed.
 // TODO(bmahler): Add unit tests.
 Option<Error> validate(
-    const mesos::v1::master::Call& call,
+    const mesos::master::Call& call,
     const Option<std::string>& principal = None());
 
 } // namespace call {


Mime
View raw message