Repository: mesos
Updated Branches:
  refs/heads/master 4bfe2dbab -> e0a77d826


Used move constructors for making CSI gRPC calls.

This patch takes the advantages of the moving constructors of the CSI
request protobuf messages to avoid copying the messages.

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


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

Branch: refs/heads/master
Commit: e0a77d82655601dee22169b330bb13341b3d3989
Parents: db9b173
Author: Chun-Hung Hsiao <chhs...@mesosphere.io>
Authored: Fri May 18 16:24:05 2018 -0700
Committer: Chun-Hung Hsiao <chhs...@mesosphere.io>
Committed: Fri Jun 8 15:09:20 2018 -0700

----------------------------------------------------------------------
 src/csi/client.cpp                         | 106 ++++++++++++++++--------
 src/csi/client.hpp                         |  36 ++++----
 src/resource_provider/storage/provider.cpp |   7 +-
 3 files changed, 94 insertions(+), 55 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/e0a77d82/src/csi/client.cpp
----------------------------------------------------------------------
diff --git a/src/csi/client.cpp b/src/csi/client.cpp
index 923ee6f..a36e622 100644
--- a/src/csi/client.cpp
+++ b/src/csi/client.cpp
@@ -14,6 +14,8 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
+#include <utility>
+
 #include "csi/client.hpp"
 
 using process::Failure;
@@ -28,10 +30,13 @@ namespace v0 {
 template <>
 Future<GetPluginInfoResponse>
 Client::call<GET_PLUGIN_INFO>(
-    const GetPluginInfoRequest& request)
+    GetPluginInfoRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Identity, GetPluginInfo), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Identity, GetPluginInfo),
+        std::move(request))
     .then([](const Try<GetPluginInfoResponse, StatusError>& result)
         -> Future<GetPluginInfoResponse> {
       return result;
@@ -42,13 +47,13 @@ Client::call<GET_PLUGIN_INFO>(
 template <>
 Future<GetPluginCapabilitiesResponse>
 Client::call<GET_PLUGIN_CAPABILITIES>(
-    const GetPluginCapabilitiesRequest& request)
+    GetPluginCapabilitiesRequest request)
 {
   return runtime
     .call(
         connection,
         GRPC_CLIENT_METHOD(Identity, GetPluginCapabilities),
-        request)
+        std::move(request))
     .then([](const Try<GetPluginCapabilitiesResponse, StatusError>& result)
         -> Future<GetPluginCapabilitiesResponse> {
       return result;
@@ -59,10 +64,13 @@ Client::call<GET_PLUGIN_CAPABILITIES>(
 template <>
 Future<ProbeResponse>
 Client::call<PROBE>(
-    const ProbeRequest& request)
+    ProbeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Identity, Probe), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Identity, Probe),
+        std::move(request))
     .then([](const Try<ProbeResponse, StatusError>& result)
         -> Future<ProbeResponse> {
       return result;
@@ -73,10 +81,13 @@ Client::call<PROBE>(
 template <>
 Future<CreateVolumeResponse>
 Client::call<CREATE_VOLUME>(
-    const CreateVolumeRequest& request)
+    CreateVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Controller, CreateVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Controller, CreateVolume),
+        std::move(request))
     .then([](const Try<CreateVolumeResponse, StatusError>& result)
         -> Future<CreateVolumeResponse> {
       return result;
@@ -87,10 +98,13 @@ Client::call<CREATE_VOLUME>(
 template <>
 Future<DeleteVolumeResponse>
 Client::call<DELETE_VOLUME>(
-    const DeleteVolumeRequest& request)
+    DeleteVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Controller, DeleteVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Controller, DeleteVolume),
+        std::move(request))
     .then([](const Try<DeleteVolumeResponse, StatusError>& result)
         -> Future<DeleteVolumeResponse> {
       return result;
@@ -101,13 +115,13 @@ Client::call<DELETE_VOLUME>(
 template <>
 Future<ControllerPublishVolumeResponse>
 Client::call<CONTROLLER_PUBLISH_VOLUME>(
-    const ControllerPublishVolumeRequest& request)
+    ControllerPublishVolumeRequest request)
 {
   return runtime
     .call(
         connection,
         GRPC_CLIENT_METHOD(Controller, ControllerPublishVolume),
-        request)
+        std::move(request))
     .then([](const Try<ControllerPublishVolumeResponse, StatusError>& result)
         -> Future<ControllerPublishVolumeResponse> {
       return result;
@@ -118,13 +132,13 @@ Client::call<CONTROLLER_PUBLISH_VOLUME>(
 template <>
 Future<ControllerUnpublishVolumeResponse>
 Client::call<CONTROLLER_UNPUBLISH_VOLUME>(
-    const ControllerUnpublishVolumeRequest& request)
+    ControllerUnpublishVolumeRequest request)
 {
   return runtime
     .call(
         connection,
         GRPC_CLIENT_METHOD(Controller, ControllerUnpublishVolume),
-        request)
+        std::move(request))
     .then([](const Try<ControllerUnpublishVolumeResponse, StatusError>& result)
         -> Future<ControllerUnpublishVolumeResponse> {
       return result;
@@ -135,13 +149,13 @@ Client::call<CONTROLLER_UNPUBLISH_VOLUME>(
 template <>
 Future<ValidateVolumeCapabilitiesResponse>
 Client::call<VALIDATE_VOLUME_CAPABILITIES>(
-    const ValidateVolumeCapabilitiesRequest& request)
+    ValidateVolumeCapabilitiesRequest request)
 {
   return runtime
     .call(
         connection,
         GRPC_CLIENT_METHOD(Controller, ValidateVolumeCapabilities),
-        request)
+        std::move(request))
     .then([](const Try<ValidateVolumeCapabilitiesResponse, StatusError>& 
result)
         -> Future<ValidateVolumeCapabilitiesResponse> {
       return result;
@@ -152,10 +166,13 @@ Client::call<VALIDATE_VOLUME_CAPABILITIES>(
 template <>
 Future<ListVolumesResponse>
 Client::call<LIST_VOLUMES>(
-    const ListVolumesRequest& request)
+    ListVolumesRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Controller, ListVolumes), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Controller, ListVolumes),
+        std::move(request))
     .then([](const Try<ListVolumesResponse, StatusError>& result)
         -> Future<ListVolumesResponse> {
       return result;
@@ -166,10 +183,13 @@ Client::call<LIST_VOLUMES>(
 template <>
 Future<GetCapacityResponse>
 Client::call<GET_CAPACITY>(
-    const GetCapacityRequest& request)
+    GetCapacityRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Controller, GetCapacity), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Controller, GetCapacity),
+        std::move(request))
     .then([](const Try<GetCapacityResponse, StatusError>& result)
         -> Future<GetCapacityResponse> {
       return result;
@@ -180,13 +200,13 @@ Client::call<GET_CAPACITY>(
 template <>
 Future<ControllerGetCapabilitiesResponse>
 Client::call<CONTROLLER_GET_CAPABILITIES>(
-    const ControllerGetCapabilitiesRequest& request)
+    ControllerGetCapabilitiesRequest request)
 {
   return runtime
     .call(
         connection,
         GRPC_CLIENT_METHOD(Controller, ControllerGetCapabilities),
-        request)
+        std::move(request))
     .then([](const Try<ControllerGetCapabilitiesResponse, StatusError>& result)
         -> Future<ControllerGetCapabilitiesResponse> {
       return result;
@@ -197,10 +217,13 @@ Client::call<CONTROLLER_GET_CAPABILITIES>(
 template <>
 Future<NodeStageVolumeResponse>
 Client::call<NODE_STAGE_VOLUME>(
-    const NodeStageVolumeRequest& request)
+    NodeStageVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodeStageVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodeStageVolume),
+        std::move(request))
     .then([](const Try<NodeStageVolumeResponse, StatusError>& result)
         -> Future<NodeStageVolumeResponse> {
       return result;
@@ -211,10 +234,13 @@ Client::call<NODE_STAGE_VOLUME>(
 template <>
 Future<NodeUnstageVolumeResponse>
 Client::call<NODE_UNSTAGE_VOLUME>(
-    const NodeUnstageVolumeRequest& request)
+    NodeUnstageVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodeUnstageVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodeUnstageVolume),
+        std::move(request))
     .then([](const Try<NodeUnstageVolumeResponse, StatusError>& result)
         -> Future<NodeUnstageVolumeResponse> {
       return result;
@@ -225,10 +251,13 @@ Client::call<NODE_UNSTAGE_VOLUME>(
 template <>
 Future<NodePublishVolumeResponse>
 Client::call<NODE_PUBLISH_VOLUME>(
-    const NodePublishVolumeRequest& request)
+    NodePublishVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodePublishVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodePublishVolume),
+        std::move(request))
     .then([](const Try<NodePublishVolumeResponse, StatusError>& result)
         -> Future<NodePublishVolumeResponse> {
       return result;
@@ -239,10 +268,13 @@ Client::call<NODE_PUBLISH_VOLUME>(
 template <>
 Future<NodeUnpublishVolumeResponse>
 Client::call<NODE_UNPUBLISH_VOLUME>(
-    const NodeUnpublishVolumeRequest& request)
+    NodeUnpublishVolumeRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodeUnpublishVolume), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodeUnpublishVolume),
+        std::move(request))
     .then([](const Try<NodeUnpublishVolumeResponse, StatusError>& result)
         -> Future<NodeUnpublishVolumeResponse> {
       return result;
@@ -253,10 +285,13 @@ Client::call<NODE_UNPUBLISH_VOLUME>(
 template <>
 Future<NodeGetIdResponse>
 Client::call<NODE_GET_ID>(
-    const NodeGetIdRequest& request)
+    NodeGetIdRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodeGetId), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodeGetId),
+        std::move(request))
     .then([](const Try<NodeGetIdResponse, StatusError>& result)
         -> Future<NodeGetIdResponse> {
       return result;
@@ -267,10 +302,13 @@ Client::call<NODE_GET_ID>(
 template <>
 Future<NodeGetCapabilitiesResponse>
 Client::call<NODE_GET_CAPABILITIES>(
-    const NodeGetCapabilitiesRequest& request)
+    NodeGetCapabilitiesRequest request)
 {
   return runtime
-    .call(connection, GRPC_CLIENT_METHOD(Node, NodeGetCapabilities), request)
+    .call(
+        connection,
+        GRPC_CLIENT_METHOD(Node, NodeGetCapabilities),
+        std::move(request))
     .then([](const Try<NodeGetCapabilitiesResponse, StatusError>& result)
         -> Future<NodeGetCapabilitiesResponse> {
       return result;

http://git-wip-us.apache.org/repos/asf/mesos/blob/e0a77d82/src/csi/client.hpp
----------------------------------------------------------------------
diff --git a/src/csi/client.hpp b/src/csi/client.hpp
index 1c57ac5..5d40d54 100644
--- a/src/csi/client.hpp
+++ b/src/csi/client.hpp
@@ -36,7 +36,7 @@ public:
 
   template <RPC rpc>
   process::Future<typename RPCTraits<rpc>::response_type> call(
-      const typename RPCTraits<rpc>::request_type& request);
+      typename RPCTraits<rpc>::request_type request);
 
 private:
   process::grpc::client::Connection connection;
@@ -47,103 +47,103 @@ private:
 template <>
 process::Future<GetPluginInfoResponse>
 Client::call<GET_PLUGIN_INFO>(
-    const GetPluginInfoRequest& request);
+    GetPluginInfoRequest request);
 
 
 template <>
 process::Future<GetPluginCapabilitiesResponse>
 Client::call<GET_PLUGIN_CAPABILITIES>(
-    const GetPluginCapabilitiesRequest& request);
+    GetPluginCapabilitiesRequest request);
 
 
 template <>
 process::Future<ProbeResponse>
 Client::call<PROBE>(
-    const ProbeRequest& request);
+    ProbeRequest request);
 
 
 template <>
 process::Future<CreateVolumeResponse>
 Client::call<CREATE_VOLUME>(
-    const CreateVolumeRequest& request);
+    CreateVolumeRequest request);
 
 
 template <>
 process::Future<DeleteVolumeResponse>
 Client::call<DELETE_VOLUME>(
-    const DeleteVolumeRequest& request);
+    DeleteVolumeRequest request);
 
 
 template <>
 process::Future<ControllerPublishVolumeResponse>
 Client::call<CONTROLLER_PUBLISH_VOLUME>(
-    const ControllerPublishVolumeRequest& request);
+    ControllerPublishVolumeRequest request);
 
 
 template <>
 process::Future<ControllerUnpublishVolumeResponse>
 Client::call<CONTROLLER_UNPUBLISH_VOLUME>(
-    const ControllerUnpublishVolumeRequest& request);
+    ControllerUnpublishVolumeRequest request);
 
 
 template <>
 process::Future<ValidateVolumeCapabilitiesResponse>
 Client::call<VALIDATE_VOLUME_CAPABILITIES>(
-    const ValidateVolumeCapabilitiesRequest& request);
+    ValidateVolumeCapabilitiesRequest request);
 
 
 template <>
 process::Future<ListVolumesResponse>
 Client::call<LIST_VOLUMES>(
-    const ListVolumesRequest& request);
+    ListVolumesRequest request);
 
 
 template <>
 process::Future<GetCapacityResponse>
 Client::call<GET_CAPACITY>(
-    const GetCapacityRequest& request);
+    GetCapacityRequest request);
 
 
 template <>
 process::Future<ControllerGetCapabilitiesResponse>
 Client::call<CONTROLLER_GET_CAPABILITIES>(
-    const ControllerGetCapabilitiesRequest& request);
+    ControllerGetCapabilitiesRequest request);
 
 
 template <>
 process::Future<NodeStageVolumeResponse>
 Client::call<NODE_STAGE_VOLUME>(
-    const NodeStageVolumeRequest& request);
+    NodeStageVolumeRequest request);
 
 
 template <>
 process::Future<NodeUnstageVolumeResponse>
 Client::call<NODE_UNSTAGE_VOLUME>(
-    const NodeUnstageVolumeRequest& request);
+    NodeUnstageVolumeRequest request);
 
 
 template <>
 process::Future<NodePublishVolumeResponse>
 Client::call<NODE_PUBLISH_VOLUME>(
-    const NodePublishVolumeRequest& request);
+    NodePublishVolumeRequest request);
 
 
 template <>
 process::Future<NodeUnpublishVolumeResponse>
 Client::call<NODE_UNPUBLISH_VOLUME>(
-    const NodeUnpublishVolumeRequest& request);
+    NodeUnpublishVolumeRequest request);
 
 
 template <>
 process::Future<NodeGetIdResponse>
 Client::call<NODE_GET_ID>(
-    const NodeGetIdRequest& request);
+    NodeGetIdRequest request);
 
 
 template <>
 process::Future<NodeGetCapabilitiesResponse>
 Client::call<NODE_GET_CAPABILITIES>(
-    const NodeGetCapabilitiesRequest& request);
+    NodeGetCapabilitiesRequest request);
 
 } // namespace v0 {
 } // namespace csi {

http://git-wip-us.apache.org/repos/asf/mesos/blob/e0a77d82/src/resource_provider/storage/provider.cpp
----------------------------------------------------------------------
diff --git a/src/resource_provider/storage/provider.cpp 
b/src/resource_provider/storage/provider.cpp
index 333336e..b90a4b8 100644
--- a/src/resource_provider/storage/provider.cpp
+++ b/src/resource_provider/storage/provider.cpp
@@ -20,6 +20,7 @@
 #include <cctype>
 #include <memory>
 #include <numeric>
+#include <utility>
 
 #include <glog/logging.h>
 
@@ -379,7 +380,7 @@ private:
   template <csi::v0::RPC rpc>
   Future<typename csi::v0::RPCTraits<rpc>::response_type> call(
       csi::v0::Client client,
-      const typename csi::v0::RPCTraits<rpc>::request_type& request);
+      typename csi::v0::RPCTraits<rpc>::request_type&& request);
 
   Future<csi::v0::Client> connect(const string& endpoint);
   Future<csi::v0::Client> getService(const ContainerID& containerId);
@@ -1766,11 +1767,11 @@ template <csi::v0::RPC rpc>
 Future<typename csi::v0::RPCTraits<rpc>::response_type>
 StorageLocalResourceProviderProcess::call(
     csi::v0::Client client,
-    const typename csi::v0::RPCTraits<rpc>::request_type& request)
+    typename csi::v0::RPCTraits<rpc>::request_type&& request)
 {
   ++metrics.csi_plugin_rpcs_pending.at(rpc);
 
-  return client.call<rpc>(request)
+  return client.call<rpc>(std::move(request))
     .onAny(defer(self(), [=](
         const Future<typename csi::v0::RPCTraits<rpc>::response_type>& future) 
{
       --metrics.csi_plugin_rpcs_pending.at(rpc);

Reply via email to