You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by ch...@apache.org on 2019/04/05 06:34:04 UTC

[mesos] 02/04: Added spec inclusion header and type helpers for CSI v1.

This is an automated email from the ASF dual-hosted git repository.

chhsiao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mesos.git

commit 6ef64a3a6ff34975d58abbb0b78e2b402d39873c
Author: Chun-Hung Hsiao <ch...@mesosphere.io>
AuthorDate: Thu Mar 28 22:14:32 2019 -0700

    Added spec inclusion header and type helpers for CSI v1.
    
    Review: https://reviews.apache.org/r/70361
---
 include/mesos/csi/v1.hpp | 103 +++++++++++++++++++++++++++++++++++++++++++++++
 src/CMakeLists.txt       |   1 +
 src/Makefile.am          |   4 +-
 src/csi/v1.cpp           |  32 +++++++++++++++
 4 files changed, 139 insertions(+), 1 deletion(-)

diff --git a/include/mesos/csi/v1.hpp b/include/mesos/csi/v1.hpp
new file mode 100644
index 0000000..d4ebe42
--- /dev/null
+++ b/include/mesos/csi/v1.hpp
@@ -0,0 +1,103 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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 __MESOS_CSI_V1_HPP__
+#define __MESOS_CSI_V1_HPP__
+
+#include <ostream>
+#include <type_traits>
+
+// ONLY USEFUL AFTER RUNNING PROTOC.
+#include <csi/v1/csi.pb.h>
+
+// ONLY USEFUL AFTER RUNNING PROTOC WITH GRPC CPP PLUGIN.
+#include <csi/v1/csi.grpc.pb.h>
+
+#include <google/protobuf/message.h>
+
+#include <google/protobuf/util/json_util.h>
+#include <google/protobuf/util/message_differencer.h>
+
+#include <stout/check.hpp>
+
+namespace mesos {
+namespace csi {
+namespace v1 {
+
+using namespace ::csi::v1;
+
+} // namespace v1 {
+} // namespace csi {
+} // namespace mesos {
+
+
+namespace csi {
+namespace v1 {
+
+// Default implementation for comparing protobuf messages in namespace
+// `csi::v1`. Note that any non-template overloading of the equality operator
+// would take precedence over this function template.
+template <
+    typename Message,
+    typename std::enable_if<std::is_convertible<
+        Message*, google::protobuf::Message*>::value, int>::type = 0>
+bool operator==(const Message& left, const Message& right)
+{
+  // NOTE: `MessageDifferencer::Equivalent` would ignore unknown fields and load
+  // default values for unset fields (which are indistinguishable in proto3).
+  return google::protobuf::util::MessageDifferencer::Equivalent(left, right);
+}
+
+
+template <
+    typename Message,
+    typename std::enable_if<std::is_convertible<
+        Message*, google::protobuf::Message*>::value, int>::type = 0>
+bool operator!=(const Message& left, const Message& right)
+{
+  return !(left == right);
+}
+
+
+std::ostream& operator<<(
+    std::ostream& stream,
+    const ControllerServiceCapability::RPC::Type& type);
+
+
+// Default implementation for output protobuf messages in namespace `csi::v1`.
+// Note that any non-template overloading of the output operator would take
+// precedence over this function template.
+template <
+    typename Message,
+    typename std::enable_if<std::is_convertible<
+        Message*, google::protobuf::Message*>::value, int>::type = 0>
+std::ostream& operator<<(std::ostream& stream, const Message& message)
+{
+  // NOTE: We use Google's JSON utility functions for proto3.
+  std::string output;
+  google::protobuf::util::Status status =
+    google::protobuf::util::MessageToJsonString(message, &output);
+
+  CHECK(status.ok())
+    << "Could not convert messages to string: " << status.error_message();
+
+  return stream << output;
+}
+
+} // namespace v1 {
+} // namespace csi {
+
+#endif // __MESOS_CSI_V1_HPP__
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 5ffeccd..0512044 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -241,6 +241,7 @@ set(CSI_SRC
   csi/v0_client.cpp
   csi/v0_utils.cpp
   csi/v0_volume_manager.cpp
+  csi/v1.cpp
   csi/volume_manager.cpp)
 
 set(DOCKER_SRC
diff --git a/src/Makefile.am b/src/Makefile.am
index 6782e4b..2f25a84 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -710,7 +710,8 @@ csidir = $(pkgincludedir)/csi
 csi_HEADERS =								\
   $(top_srcdir)/include/mesos/csi/types.hpp				\
   $(top_srcdir)/include/mesos/csi/types.proto				\
-  $(top_srcdir)/include/mesos/csi/v0.hpp
+  $(top_srcdir)/include/mesos/csi/v0.hpp				\
+  $(top_srcdir)/include/mesos/csi/v1.hpp
 
 nodist_csi_HEADERS =							\
   ../include/mesos/csi/types.pb.h
@@ -1594,6 +1595,7 @@ libcsi_la_SOURCES =							\
   csi/v0_volume_manager.cpp						\
   csi/v0_volume_manager.hpp						\
   csi/v0_volume_manager_process.hpp					\
+  csi/v1.cpp								\
   csi/volume_manager.cpp						\
   csi/volume_manager.hpp
 
diff --git a/src/csi/v1.cpp b/src/csi/v1.cpp
new file mode 100644
index 0000000..a07d1fa
--- /dev/null
+++ b/src/csi/v1.cpp
@@ -0,0 +1,32 @@
+// Licensed to the Apache Software Foundation (ASF) under one
+// or more contributor license agreements.  See the NOTICE file
+// distributed with this work for additional information
+// regarding copyright ownership.  The ASF licenses this file
+// to you 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.
+
+#include <mesos/csi/v1.hpp>
+
+using std::ostream;
+
+namespace csi {
+namespace v1 {
+
+ostream& operator<<(
+    ostream& stream,
+    const ControllerServiceCapability::RPC::Type& type)
+{
+  return stream << ControllerServiceCapability::RPC::Type_Name(type);
+}
+
+} // namespace v1 {
+} // namespace csi {