This is an automated email from the ASF dual-hosted git repository. qianzhang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
commit 8a41f00a379431d65b144e120fe60da95e6195e9 Author: Qian Zhang <zhq527...@gmail.com> AuthorDate: Wed Jul 8 11:08:08 2020 +0800 Added CSI volume type into the `Volume` protobuf message. Also removed the `types.proto` file which has `VolumeCapability` defined as well so that we will have a single place (`mesos.proto`) to define this protobuf message. Review: https://reviews.apache.org/r/72660 --- include/mesos/csi/types.hpp | 40 ---------- include/mesos/csi/types.proto | 90 --------------------- include/mesos/mesos.proto | 91 ++++++++++++++++++++++ .../storage/disk_profile_adaptor.hpp | 4 +- include/mesos/type_utils.hpp | 6 ++ include/mesos/v1/mesos.proto | 91 ++++++++++++++++++++++ src/CMakeLists.txt | 2 - src/Makefile.am | 10 --- src/common/type_utils.cpp | 18 +++++ src/csi/state.proto | 4 +- src/csi/types.cpp | 36 --------- src/csi/v0_utils.cpp | 68 ++++++++-------- src/csi/v0_utils.hpp | 14 ++-- src/csi/v0_volume_manager.cpp | 12 +-- src/csi/v0_volume_manager.hpp | 8 +- src/csi/v0_volume_manager_process.hpp | 8 +- src/csi/v1_utils.cpp | 68 ++++++++-------- src/csi/v1_utils.hpp | 14 ++-- src/csi/v1_volume_manager.cpp | 12 +-- src/csi/v1_volume_manager.hpp | 8 +- src/csi/v1_volume_manager_process.hpp | 8 +- src/csi/volume_manager.hpp | 8 +- src/examples/test_csi_plugin.cpp | 6 +- src/resource_provider/state.proto | 4 +- src/tests/csi_utils_tests.cpp | 1 - src/tests/disk_profile_adaptor_tests.cpp | 6 +- 26 files changed, 324 insertions(+), 313 deletions(-) diff --git a/include/mesos/csi/types.hpp b/include/mesos/csi/types.hpp deleted file mode 100644 index df9df38..0000000 --- a/include/mesos/csi/types.hpp +++ /dev/null @@ -1,40 +0,0 @@ -// 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_TYPES_HPP__ -#define __MESOS_CSI_TYPES_HPP__ - -// ONLY USEFUL AFTER RUNNING PROTOC. -#include <mesos/csi/types.pb.h> - -namespace mesos { -namespace csi { -namespace types { - -bool operator==(const VolumeCapability& left, const VolumeCapability& right); - - -inline bool operator!=( - const VolumeCapability& left, const VolumeCapability& right) -{ - return !(left == right); -} - -} // namespace types { -} // namespace csi { -} // namespace mesos { - -#endif // __MESOS_CSI_TYPES_HPP__ diff --git a/include/mesos/csi/types.proto b/include/mesos/csi/types.proto deleted file mode 100644 index 3e1ac4b..0000000 --- a/include/mesos/csi/types.proto +++ /dev/null @@ -1,90 +0,0 @@ -// 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. - -syntax = "proto3"; - -package mesos.csi.types; - -// This file contains "unversioned" CSI protobuf definitions used by Mesos. For -// any CSI version, an unversioned CSI protobuf constructed from a versioned one -// can be used to reconstructed back the same versioned protobuf (excluding -// unknown fields). An unversioned protobuf can also be used to construct a -// protobuf of another CSI version, but version-specific details might be lost. - - -/** - * Protobuf to specify a capability of a volume: - * https://github.com/container-storage-interface/spec/blob/release-1.1/spec.md#createvolume - */ -message VolumeCapability { - // Indicate that the volume will be accessed via the block device API. - message BlockVolume { - // Intentionally empty, for now. - } - - // Indicate that the volume will be accessed via the filesystem API. - message MountVolume { - // The filesystem type. This field is OPTIONAL. - // An empty string is equal to an unspecified field value. - string fs_type = 1; - - // The mount options that can be used for the volume. This field is - // OPTIONAL. `mount_flags` MAY contain sensitive information. - // Therefore, the CO and the Plugin MUST NOT leak this information - // to untrusted entities. The total size of this repeated field - // SHALL NOT exceed 4 KiB. - repeated string mount_flags = 2; - } - - // Specify how a volume can be accessed. - message AccessMode { - enum Mode { - UNKNOWN = 0; - - // Can only be published once as read/write on a single node, at - // any given time. - SINGLE_NODE_WRITER = 1; - - // Can only be published once as readonly on a single node, at - // any given time. - SINGLE_NODE_READER_ONLY = 2; - - // Can be published as readonly at multiple nodes simultaneously. - MULTI_NODE_READER_ONLY = 3; - - // Can be published at multiple nodes simultaneously. Only one of - // the node can be used as read/write. The rest will be readonly. - MULTI_NODE_SINGLE_WRITER = 4; - - // Can be published as read/write at multiple nodes - // simultaneously. - MULTI_NODE_MULTI_WRITER = 5; - } - - // This field is REQUIRED. - Mode mode = 1; - } - - // Specifies what API the volume will be accessed using. One of the - // following fields MUST be specified. - oneof access_type { - BlockVolume block = 1; - MountVolume mount = 2; - } - - // This is a REQUIRED field. - AccessMode access_mode = 3; -} diff --git a/include/mesos/mesos.proto b/include/mesos/mesos.proto index 5f795f5..fe371ea 100644 --- a/include/mesos/mesos.proto +++ b/include/mesos/mesos.proto @@ -3056,6 +3056,7 @@ message Volume { HOST_PATH = 4; SANDBOX_PATH = 2; SECRET = 3; + CSI_VOLUME = 5; } message DockerVolume { @@ -3094,6 +3095,94 @@ message Volume { required string path = 2; } + // A volume which will be handled by the `volume/csi` isolator. + message CSIVolume { + // The name of the CSI plugin. + required string plugin_name = 1; + + // Specifies a capability of a volume. + // https://github.com/container-storage-interface/spec/blob/v1.3.0/csi.proto#L379:L438 + message VolumeCapability { + // Indicates that the volume will be accessed via the block device API. + message BlockVolume { + // Intentionally empty, for now. + } + + // Indicates that the volume will be accessed via the filesystem API. + message MountVolume { + // The filesystem type. An empty string is equal to an unspecified + // field value. + optional string fs_type = 1; + + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, Mesos and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + repeated string mount_flags = 2; + } + + // Specifies how a volume can be accessed. + message AccessMode { + enum Mode { + UNKNOWN = 0; + + // Can only be published once as read/write on a single node, at + // any given time. + SINGLE_NODE_WRITER = 1; + + // Can only be published once as readonly on a single node, at + // any given time. + SINGLE_NODE_READER_ONLY = 2; + + // Can be published as readonly at multiple nodes simultaneously. + MULTI_NODE_READER_ONLY = 3; + + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + MULTI_NODE_SINGLE_WRITER = 4; + + // Can be published as read/write at multiple nodes + // simultaneously. + MULTI_NODE_MULTI_WRITER = 5; + } + + required Mode mode = 1; + } + + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + oneof access_type { + BlockVolume block = 1; + MountVolume mount = 2; + } + + required AccessMode access_mode = 3; + } + + // Specifies the parameters used to stage/publish a pre-provisioned volume + // on an agent host. The fields are merged from `NodeStageVolumeRequest` + // and `NodePublishVolumeRequest` protobuf messages defined in CSI spec + // except two fields `staging_target_path` and `target_path` which will be + // internally determined by Mesos when staging/publishing the volume. + message StaticProvisioning { + required string volume_id = 1; + required VolumeCapability volume_capability = 2; + optional bool readonly = 3; + + // The secrets needed for staging/publishing the volume, e.g.: + // { + // "username": {"type": REFERENCE, "reference": {"name": "U_SECRET"}}, + // "password": {"type": REFERENCE, "reference": {"name": "P_SECRET"}} + // } + map<string, Secret> node_stage_secrets = 4; + map<string, Secret> node_publish_secrets = 5; + map<string, string> volume_context = 6; + } + + optional StaticProvisioning static_provisioning = 2; + } + // Enum fields should be optional, see: MESOS-4997. optional Type type = 1; @@ -3109,6 +3198,8 @@ message Volume { // The volume/secret isolator uses the secret-fetcher module (third-party or // internal) downloads the secret and makes it available at container_path. optional Secret secret = 4; + + optional CSIVolume csi_volume = 6; } optional Source source = 5; diff --git a/include/mesos/resource_provider/storage/disk_profile_adaptor.hpp b/include/mesos/resource_provider/storage/disk_profile_adaptor.hpp index 8b6da3a..e9d8815 100644 --- a/include/mesos/resource_provider/storage/disk_profile_adaptor.hpp +++ b/include/mesos/resource_provider/storage/disk_profile_adaptor.hpp @@ -23,8 +23,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <stout/hashset.hpp> @@ -63,7 +61,7 @@ public: * of `VolumeCapability` objects, the module will only allow a single * `VolumeCapability`. */ - csi::types::VolumeCapability capability; + Volume::Source::CSIVolume::VolumeCapability capability; /** * Free-form key-value pairs which should be passed into the body diff --git a/include/mesos/type_utils.hpp b/include/mesos/type_utils.hpp index 98a2995..da9fd96 100644 --- a/include/mesos/type_utils.hpp +++ b/include/mesos/type_utils.hpp @@ -87,6 +87,9 @@ bool operator==(const TaskStatus& left, const TaskStatus& right); bool operator==(const URL& left, const URL& right); bool operator==(const UUID& left, const UUID& right); bool operator==(const Volume& left, const Volume& right); +bool operator==( + const Volume::Source::CSIVolume::VolumeCapability& left, + const Volume::Source::CSIVolume::VolumeCapability& right); bool operator!=(const CheckStatusInfo& left, const CheckStatusInfo& right); bool operator!=(const ExecutorInfo& left, const ExecutorInfo& right); @@ -96,6 +99,9 @@ bool operator!=(const Operation& left, const Operation& right); bool operator!=(const OperationStatus& left, const OperationStatus& right); bool operator!=(const TaskStatus& left, const TaskStatus& right); +bool operator!=( + const Volume::Source::CSIVolume::VolumeCapability& left, + const Volume::Source::CSIVolume::VolumeCapability& right); inline bool operator==(const ExecutorID& left, const ExecutorID& right) { diff --git a/include/mesos/v1/mesos.proto b/include/mesos/v1/mesos.proto index 07d2f40..effcfa1 100644 --- a/include/mesos/v1/mesos.proto +++ b/include/mesos/v1/mesos.proto @@ -3045,6 +3045,7 @@ message Volume { HOST_PATH = 4; SANDBOX_PATH = 2; SECRET = 3; + CSI_VOLUME = 5; } message DockerVolume { @@ -3083,6 +3084,94 @@ message Volume { required string path = 2; } + // A volume which will be handled by the `volume/csi` isolator. + message CSIVolume { + // The name of the CSI plugin. + required string plugin_name = 1; + + // Specifies a capability of a volume. + // https://github.com/container-storage-interface/spec/blob/v1.3.0/csi.proto#L379:L438 + message VolumeCapability { + // Indicates that the volume will be accessed via the block device API. + message BlockVolume { + // Intentionally empty, for now. + } + + // Indicates that the volume will be accessed via the filesystem API. + message MountVolume { + // The filesystem type. An empty string is equal to an unspecified + // field value. + optional string fs_type = 1; + + // The mount options that can be used for the volume. This field is + // OPTIONAL. `mount_flags` MAY contain sensitive information. + // Therefore, Mesos and the Plugin MUST NOT leak this information + // to untrusted entities. The total size of this repeated field + // SHALL NOT exceed 4 KiB. + repeated string mount_flags = 2; + } + + // Specifies how a volume can be accessed. + message AccessMode { + enum Mode { + UNKNOWN = 0; + + // Can only be published once as read/write on a single node, at + // any given time. + SINGLE_NODE_WRITER = 1; + + // Can only be published once as readonly on a single node, at + // any given time. + SINGLE_NODE_READER_ONLY = 2; + + // Can be published as readonly at multiple nodes simultaneously. + MULTI_NODE_READER_ONLY = 3; + + // Can be published at multiple nodes simultaneously. Only one of + // the node can be used as read/write. The rest will be readonly. + MULTI_NODE_SINGLE_WRITER = 4; + + // Can be published as read/write at multiple nodes + // simultaneously. + MULTI_NODE_MULTI_WRITER = 5; + } + + required Mode mode = 1; + } + + // Specifies what API the volume will be accessed using. One of the + // following fields MUST be specified. + oneof access_type { + BlockVolume block = 1; + MountVolume mount = 2; + } + + required AccessMode access_mode = 3; + } + + // Specifies the parameters used to stage/publish a pre-provisioned volume + // on an agent host. The fields are merged from `NodeStageVolumeRequest` + // and `NodePublishVolumeRequest` protobuf messages defined in CSI spec + // except two fields `staging_target_path` and `target_path` which will be + // internally determined by Mesos when staging/publishing the volume. + message StaticProvisioning { + required string volume_id = 1; + required VolumeCapability volume_capability = 2; + optional bool readonly = 3; + + // The secrets needed for staging/publishing the volume, e.g.: + // { + // "username": {"type": REFERENCE, "reference": {"name": "U_SECRET"}}, + // "password": {"type": REFERENCE, "reference": {"name": "P_SECRET"}} + // } + map<string, Secret> node_stage_secrets = 4; + map<string, Secret> node_publish_secrets = 5; + map<string, string> volume_context = 6; + } + + optional StaticProvisioning static_provisioning = 2; + } + // Enum fields should be optional, see: MESOS-4997. optional Type type = 1; @@ -3098,6 +3187,8 @@ message Volume { // The volume/secret isolator uses the secret-fetcher module (third-party or // internal) downloads the secret and makes it available at container_path. optional Secret secret = 4; + + optional CSIVolume csi_volume = 6; } optional Source source = 5; diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bcb5128..4e15e3d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -39,7 +39,6 @@ PROTOC_GENERATE(TARGET mesos/allocator/allocator) PROTOC_GENERATE(TARGET mesos/authentication/authentication) PROTOC_GENERATE(TARGET mesos/authorizer/acls) PROTOC_GENERATE(TARGET mesos/authorizer/authorizer) -PROTOC_GENERATE(TARGET mesos/csi/types) PROTOC_GENERATE(TARGET mesos/maintenance/maintenance) PROTOC_GENERATE(TARGET mesos/master/master) PROTOC_GENERATE(TARGET mesos/module/hook) @@ -252,7 +251,6 @@ if (NOT WIN32) endif () set(CSI_SRC - csi/types.cpp csi/metrics.cpp csi/paths.cpp csi/service_manager.cpp diff --git a/src/Makefile.am b/src/Makefile.am index a89919d..447db32 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -293,7 +293,6 @@ APPC_SPEC_PROTO = $(top_srcdir)/include/mesos/appc/spec.proto AUTHENTICATION_PROTO = $(top_srcdir)/include/mesos/authentication/authentication.proto AUTHORIZATION_PROTO = $(top_srcdir)/include/mesos/authorizer/authorizer.proto CONTAINERIZER_PROTO = $(top_srcdir)/include/mesos/slave/containerizer.proto -CSI_TYPES_PROTO = $(top_srcdir)/include/mesos/csi/types.proto DOCKER_SPEC_PROTO = $(top_srcdir)/include/mesos/docker/spec.proto DOCKER_V1_PROTO = $(top_srcdir)/include/mesos/docker/v1.proto DOCKER_V2_PROTO = $(top_srcdir)/include/mesos/docker/v2.proto @@ -431,8 +430,6 @@ CXX_CSI_PROTOS = \ ../include/csi/v1/csi.grpc.pb.h \ ../include/csi/v1/csi.pb.cc \ ../include/csi/v1/csi.pb.h \ - ../include/mesos/csi/types.pb.cc \ - ../include/mesos/csi/types.pb.h \ csi/state.pb.cc \ csi/state.pb.h @@ -711,14 +708,9 @@ nodist_authorizer_HEADERS = \ 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/v1.hpp -nodist_csi_HEADERS = \ - ../include/mesos/csi/types.pb.h - # Install the generated CSI headers into $PREFIX/include. csi_v0dir = $(includedir)/csi/v0 @@ -1603,7 +1595,6 @@ libcsi_la_SOURCES = \ csi/service_manager.hpp \ csi/state.hpp \ csi/state.proto \ - csi/types.cpp \ csi/v0.cpp \ csi/v0_client.cpp \ csi/v0_client.hpp \ @@ -1698,7 +1689,6 @@ libmesos_la_SOURCES = \ $(AUTHENTICATION_PROTO) \ $(AUTHORIZATION_PROTO) \ $(CONTAINERIZER_PROTO) \ - $(CSI_TYPES_PROTO) \ $(EXECUTOR_PROTO) \ $(DOCKER_SPEC_PROTO) \ $(DOCKER_V1_PROTO) \ diff --git a/src/common/type_utils.cpp b/src/common/type_utils.cpp index 5bf7113..bb43784 100644 --- a/src/common/type_utils.cpp +++ b/src/common/type_utils.cpp @@ -195,6 +195,16 @@ bool operator==(const Volume& left, const Volume& right) } +bool operator==( + const Volume::Source::CSIVolume::VolumeCapability& left, + const Volume::Source::CSIVolume::VolumeCapability& 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); +} + + // TODO(bmahler): Leverage process::http::URL for equality. bool operator==(const URL& left, const URL& right) { @@ -648,6 +658,14 @@ bool operator!=(const TaskStatus& left, const TaskStatus& right) } +bool operator!=( + const Volume::Source::CSIVolume::VolumeCapability& left, + const Volume::Source::CSIVolume::VolumeCapability& right) +{ + return !(left == right); +} + + bool operator==(const CheckStatusInfo& left, const CheckStatusInfo& right) { return left.SerializeAsString() == right.SerializeAsString(); diff --git a/src/csi/state.proto b/src/csi/state.proto index 96ba420..28ad5ef 100644 --- a/src/csi/state.proto +++ b/src/csi/state.proto @@ -16,7 +16,7 @@ syntax = "proto3"; -import "mesos/csi/types.proto"; +import "mesos/mesos.proto"; package mesos.csi.state; @@ -44,7 +44,7 @@ message VolumeState { State state = 1; // The capability used to publish the volume. This is a REQUIRED field. - types.VolumeCapability volume_capability = 2; + Volume.Source.CSIVolume.VolumeCapability volume_capability = 2; // The parameters used when creating the volume. This is an OPTIONAL field. map<string, string> parameters = 6; diff --git a/src/csi/types.cpp b/src/csi/types.cpp deleted file mode 100644 index cb5ee8f..0000000 --- a/src/csi/types.cpp +++ /dev/null @@ -1,36 +0,0 @@ -// 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/types.hpp> - -#include <google/protobuf/util/message_differencer.h> - -using google::protobuf::util::MessageDifferencer; - -namespace mesos { -namespace csi { -namespace types { - -bool operator==(const VolumeCapability& left, const VolumeCapability& right) -{ - // NOTE: `MessageDifferencer::Equivalent` would ignore unknown fields and load - // default values for unset fields (which are indistinguishable in proto3). - return MessageDifferencer::Equivalent(left, right); -} - -} // namespace types { -} // namespace csi { -} // namespace mesos { diff --git a/src/csi/v0_utils.cpp b/src/csi/v0_utils.cpp index 248e417..706d880 100644 --- a/src/csi/v0_utils.cpp +++ b/src/csi/v0_utils.cpp @@ -35,55 +35,56 @@ RepeatedPtrField<T1> devolve(RepeatedPtrField<T2> from) } -types::VolumeCapability::BlockVolume devolve( +CSIVolume::VolumeCapability::BlockVolume devolve( const VolumeCapability::BlockVolume& block) { - return types::VolumeCapability::BlockVolume(); + return CSIVolume::VolumeCapability::BlockVolume(); } -types::VolumeCapability::MountVolume devolve( +CSIVolume::VolumeCapability::MountVolume devolve( const VolumeCapability::MountVolume& mount) { - types::VolumeCapability::MountVolume result; + CSIVolume::VolumeCapability::MountVolume result; result.set_fs_type(mount.fs_type()); *result.mutable_mount_flags() = mount.mount_flags(); return result; } -types::VolumeCapability::AccessMode devolve( +CSIVolume::VolumeCapability::AccessMode devolve( const VolumeCapability::AccessMode& accessMode) { - types::VolumeCapability::AccessMode result; + CSIVolume::VolumeCapability::AccessMode result; switch (accessMode.mode()) { case VolumeCapability::AccessMode::UNKNOWN: { - result.set_mode(types::VolumeCapability::AccessMode::UNKNOWN); + result.set_mode(CSIVolume::VolumeCapability::AccessMode::UNKNOWN); break; } case VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { - result.set_mode(types::VolumeCapability::AccessMode::SINGLE_NODE_WRITER); + result.set_mode( + CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_WRITER); break; } case VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { result.set_mode( - types::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); + CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); break; } case VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); break; } case VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); break; } case VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); break; } // NOTE: We avoid using a default clause for the following values in @@ -99,9 +100,9 @@ types::VolumeCapability::AccessMode devolve( } -types::VolumeCapability devolve(const VolumeCapability& capability) +CSIVolume::VolumeCapability devolve(const VolumeCapability& capability) { - types::VolumeCapability result; + CSIVolume::VolumeCapability result; switch (capability.access_type_case()) { case VolumeCapability::kBlock: { @@ -125,10 +126,10 @@ types::VolumeCapability devolve(const VolumeCapability& capability) } -RepeatedPtrField<types::VolumeCapability> devolve( +RepeatedPtrField<CSIVolume::VolumeCapability> devolve( const RepeatedPtrField<VolumeCapability>& capabilities) { - return devolve<types::VolumeCapability>(capabilities); + return devolve<CSIVolume::VolumeCapability>(capabilities); } @@ -146,14 +147,14 @@ RepeatedPtrField<T1> evolve(RepeatedPtrField<T2> from) VolumeCapability::BlockVolume evolve( - const types::VolumeCapability::BlockVolume& block) + const CSIVolume::VolumeCapability::BlockVolume& block) { return VolumeCapability::BlockVolume(); } VolumeCapability::MountVolume evolve( - const types::VolumeCapability::MountVolume& mount) + const CSIVolume::VolumeCapability::MountVolume& mount) { VolumeCapability::MountVolume result; result.set_fs_type(mount.fs_type()); @@ -163,62 +164,55 @@ VolumeCapability::MountVolume evolve( VolumeCapability::AccessMode evolve( - const types::VolumeCapability::AccessMode& accessMode) + const CSIVolume::VolumeCapability::AccessMode& accessMode) { VolumeCapability::AccessMode result; switch (accessMode.mode()) { - case types::VolumeCapability::AccessMode::UNKNOWN: { + case CSIVolume::VolumeCapability::AccessMode::UNKNOWN: { result.set_mode(VolumeCapability::AccessMode::UNKNOWN); break; } - case types::VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { result.set_mode(VolumeCapability::AccessMode::SINGLE_NODE_WRITER); break; } - case types::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { + case CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { result.set_mode(VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); break; } - // NOTE: We avoid using a default clause for the following values in - // proto3's open enum to enable the compiler to detect missing enum cases - // for us. See: https://github.com/google/protobuf/issues/3917 - case google::protobuf::kint32min: - case google::protobuf::kint32max: { - UNREACHABLE(); - } } return result; } -VolumeCapability evolve(const types::VolumeCapability& capability) +VolumeCapability evolve(const CSIVolume::VolumeCapability& capability) { VolumeCapability result; switch (capability.access_type_case()) { - case types::VolumeCapability::kBlock: { + case CSIVolume::VolumeCapability::kBlock: { *result.mutable_block() = evolve(capability.block()); break; } - case types::VolumeCapability::kMount: { + case CSIVolume::VolumeCapability::kMount: { *result.mutable_mount() = evolve(capability.mount()); break; } - case types::VolumeCapability::ACCESS_TYPE_NOT_SET: { + case CSIVolume::VolumeCapability::ACCESS_TYPE_NOT_SET: { break; } } @@ -232,7 +226,7 @@ VolumeCapability evolve(const types::VolumeCapability& capability) RepeatedPtrField<VolumeCapability> devolve( - const RepeatedPtrField<types::VolumeCapability>& capabilities) + const RepeatedPtrField<CSIVolume::VolumeCapability>& capabilities) { return evolve<VolumeCapability>(capabilities); } diff --git a/src/csi/v0_utils.hpp b/src/csi/v0_utils.hpp index 468b416..576a938 100644 --- a/src/csi/v0_utils.hpp +++ b/src/csi/v0_utils.hpp @@ -19,7 +19,8 @@ #include <google/protobuf/message.h> -#include <mesos/csi/types.hpp> +#include <mesos/mesos.hpp> + #include <mesos/csi/v0.hpp> #include <stout/foreach.hpp> @@ -29,6 +30,9 @@ namespace mesos { namespace csi { namespace v0 { +using CSIVolume = Volume::Source::CSIVolume; + + struct PluginCapabilities { PluginCapabilities() = default; @@ -140,17 +144,17 @@ struct NodeCapabilities // Helpers to devolve CSI v0 protobufs to their unversioned counterparts. -types::VolumeCapability devolve(const VolumeCapability& capability); +CSIVolume::VolumeCapability devolve(const VolumeCapability& capability); -google::protobuf::RepeatedPtrField<types::VolumeCapability> devolve( +google::protobuf::RepeatedPtrField<CSIVolume::VolumeCapability> devolve( const google::protobuf::RepeatedPtrField<VolumeCapability>& capabilities); // Helpers to evolve unversioned CSI protobufs to their v0 counterparts. -VolumeCapability evolve(const types::VolumeCapability& capability); +VolumeCapability evolve(const CSIVolume::VolumeCapability& capability); google::protobuf::RepeatedPtrField<VolumeCapability> evolve( - const google::protobuf::RepeatedPtrField<types::VolumeCapability>& + const google::protobuf::RepeatedPtrField<CSIVolume::VolumeCapability>& capabilities); } // namespace v0 { diff --git a/src/csi/v0_volume_manager.cpp b/src/csi/v0_volume_manager.cpp index 4b056e7..b383598 100644 --- a/src/csi/v0_volume_manager.cpp +++ b/src/csi/v0_volume_manager.cpp @@ -259,7 +259,7 @@ Future<vector<VolumeInfo>> VolumeManagerProcess::listVolumes() Future<Bytes> VolumeManagerProcess::getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { if (!controllerCapabilities->getCapacity) { @@ -280,7 +280,7 @@ Future<Bytes> VolumeManagerProcess::getCapacity( Future<VolumeInfo> VolumeManagerProcess::createVolume( const string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { if (!controllerCapabilities->createDeleteVolume) { @@ -329,7 +329,7 @@ Future<VolumeInfo> VolumeManagerProcess::createVolume( Future<Option<Error>> VolumeManagerProcess::validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { // If the volume has been checkpointed, the validation succeeds only if the @@ -1229,7 +1229,7 @@ Future<vector<VolumeInfo>> VolumeManager::listVolumes() Future<Bytes> VolumeManager::getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered @@ -1244,7 +1244,7 @@ Future<Bytes> VolumeManager::getCapacity( Future<VolumeInfo> VolumeManager::createVolume( const string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered @@ -1260,7 +1260,7 @@ Future<VolumeInfo> VolumeManager::createVolume( Future<Option<Error>> VolumeManager::validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered diff --git a/src/csi/v0_volume_manager.hpp b/src/csi/v0_volume_manager.hpp index 9d572e7..6920eb8 100644 --- a/src/csi/v0_volume_manager.hpp +++ b/src/csi/v0_volume_manager.hpp @@ -24,8 +24,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <process/grpc.hpp> #include <process/http.hpp> @@ -74,20 +72,20 @@ public: process::Future<std::vector<VolumeInfo>> listVolumes() override; process::Future<Bytes> getCapacity( - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; process::Future<VolumeInfo> createVolume( const std::string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; process::Future<Option<Error>> validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; diff --git a/src/csi/v0_volume_manager_process.hpp b/src/csi/v0_volume_manager_process.hpp index 50148ff..d5a5eb2 100644 --- a/src/csi/v0_volume_manager_process.hpp +++ b/src/csi/v0_volume_manager_process.hpp @@ -24,8 +24,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <process/grpc.hpp> #include <process/http.hpp> @@ -71,18 +69,18 @@ public: process::Future<std::vector<VolumeInfo>> listVolumes(); process::Future<Bytes> getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<VolumeInfo> createVolume( const std::string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<Option<Error>> validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<bool> deleteVolume(const std::string& volumeId); diff --git a/src/csi/v1_utils.cpp b/src/csi/v1_utils.cpp index e74138b..8d2eca3 100644 --- a/src/csi/v1_utils.cpp +++ b/src/csi/v1_utils.cpp @@ -35,55 +35,56 @@ RepeatedPtrField<T1> devolve(RepeatedPtrField<T2> from) } -types::VolumeCapability::BlockVolume devolve( +CSIVolume::VolumeCapability::BlockVolume devolve( const VolumeCapability::BlockVolume& block) { - return types::VolumeCapability::BlockVolume(); + return CSIVolume::VolumeCapability::BlockVolume(); } -types::VolumeCapability::MountVolume devolve( +CSIVolume::VolumeCapability::MountVolume devolve( const VolumeCapability::MountVolume& mount) { - types::VolumeCapability::MountVolume result; + CSIVolume::VolumeCapability::MountVolume result; result.set_fs_type(mount.fs_type()); *result.mutable_mount_flags() = mount.mount_flags(); return result; } -types::VolumeCapability::AccessMode devolve( +CSIVolume::VolumeCapability::AccessMode devolve( const VolumeCapability::AccessMode& accessMode) { - types::VolumeCapability::AccessMode result; + CSIVolume::VolumeCapability::AccessMode result; switch (accessMode.mode()) { case VolumeCapability::AccessMode::UNKNOWN: { - result.set_mode(types::VolumeCapability::AccessMode::UNKNOWN); + result.set_mode(CSIVolume::VolumeCapability::AccessMode::UNKNOWN); break; } case VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { - result.set_mode(types::VolumeCapability::AccessMode::SINGLE_NODE_WRITER); + result.set_mode( + CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_WRITER); break; } case VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { result.set_mode( - types::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); + CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); break; } case VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); break; } case VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); break; } case VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { result.set_mode( - types::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); + CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); break; } // NOTE: We avoid using a default clause for the following values in @@ -99,9 +100,9 @@ types::VolumeCapability::AccessMode devolve( } -types::VolumeCapability devolve(const VolumeCapability& capability) +CSIVolume::VolumeCapability devolve(const VolumeCapability& capability) { - types::VolumeCapability result; + CSIVolume::VolumeCapability result; switch (capability.access_type_case()) { case VolumeCapability::kBlock: { @@ -125,10 +126,10 @@ types::VolumeCapability devolve(const VolumeCapability& capability) } -RepeatedPtrField<types::VolumeCapability> devolve( +RepeatedPtrField<CSIVolume::VolumeCapability> devolve( const RepeatedPtrField<VolumeCapability>& capabilities) { - return devolve<types::VolumeCapability>(capabilities); + return devolve<CSIVolume::VolumeCapability>(capabilities); } @@ -146,14 +147,14 @@ RepeatedPtrField<T1> evolve(RepeatedPtrField<T2> from) VolumeCapability::BlockVolume evolve( - const types::VolumeCapability::BlockVolume& block) + const CSIVolume::VolumeCapability::BlockVolume& block) { return VolumeCapability::BlockVolume(); } VolumeCapability::MountVolume evolve( - const types::VolumeCapability::MountVolume& mount) + const CSIVolume::VolumeCapability::MountVolume& mount) { VolumeCapability::MountVolume result; result.set_fs_type(mount.fs_type()); @@ -163,62 +164,55 @@ VolumeCapability::MountVolume evolve( VolumeCapability::AccessMode evolve( - const types::VolumeCapability::AccessMode& accessMode) + const CSIVolume::VolumeCapability::AccessMode& accessMode) { VolumeCapability::AccessMode result; switch (accessMode.mode()) { - case types::VolumeCapability::AccessMode::UNKNOWN: { + case CSIVolume::VolumeCapability::AccessMode::UNKNOWN: { result.set_mode(VolumeCapability::AccessMode::UNKNOWN); break; } - case types::VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_WRITER: { result.set_mode(VolumeCapability::AccessMode::SINGLE_NODE_WRITER); break; } - case types::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { + case CSIVolume::VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY: { result.set_mode(VolumeCapability::AccessMode::SINGLE_NODE_READER_ONLY); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_READER_ONLY); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER); break; } - case types::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { + case CSIVolume::VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER: { result.set_mode(VolumeCapability::AccessMode::MULTI_NODE_MULTI_WRITER); break; } - // NOTE: We avoid using a default clause for the following values in - // proto3's open enum to enable the compiler to detect missing enum cases - // for us. See: https://github.com/google/protobuf/issues/3917 - case google::protobuf::kint32min: - case google::protobuf::kint32max: { - UNREACHABLE(); - } } return result; } -VolumeCapability evolve(const types::VolumeCapability& capability) +VolumeCapability evolve(const CSIVolume::VolumeCapability& capability) { VolumeCapability result; switch (capability.access_type_case()) { - case types::VolumeCapability::kBlock: { + case CSIVolume::VolumeCapability::kBlock: { *result.mutable_block() = evolve(capability.block()); break; } - case types::VolumeCapability::kMount: { + case CSIVolume::VolumeCapability::kMount: { *result.mutable_mount() = evolve(capability.mount()); break; } - case types::VolumeCapability::ACCESS_TYPE_NOT_SET: { + case CSIVolume::VolumeCapability::ACCESS_TYPE_NOT_SET: { break; } } @@ -232,7 +226,7 @@ VolumeCapability evolve(const types::VolumeCapability& capability) RepeatedPtrField<VolumeCapability> devolve( - const RepeatedPtrField<types::VolumeCapability>& capabilities) + const RepeatedPtrField<CSIVolume::VolumeCapability>& capabilities) { return evolve<VolumeCapability>(capabilities); } diff --git a/src/csi/v1_utils.hpp b/src/csi/v1_utils.hpp index 11a64d7..ca774d8 100644 --- a/src/csi/v1_utils.hpp +++ b/src/csi/v1_utils.hpp @@ -19,7 +19,8 @@ #include <google/protobuf/message.h> -#include <mesos/csi/types.hpp> +#include <mesos/mesos.hpp> + #include <mesos/csi/v1.hpp> #include <stout/foreach.hpp> @@ -29,6 +30,9 @@ namespace mesos { namespace csi { namespace v1 { +using CSIVolume = Volume::Source::CSIVolume; + + struct PluginCapabilities { PluginCapabilities() = default; @@ -198,17 +202,17 @@ struct NodeCapabilities // Helpers to devolve CSI v1 protobufs to their unversioned counterparts. -types::VolumeCapability devolve(const VolumeCapability& capability); +CSIVolume::VolumeCapability devolve(const VolumeCapability& capability); -google::protobuf::RepeatedPtrField<types::VolumeCapability> devolve( +google::protobuf::RepeatedPtrField<CSIVolume::VolumeCapability> devolve( const google::protobuf::RepeatedPtrField<VolumeCapability>& capabilities); // Helpers to evolve unversioned CSI protobufs to their v1 counterparts. -VolumeCapability evolve(const types::VolumeCapability& capability); +VolumeCapability evolve(const CSIVolume::VolumeCapability& capability); google::protobuf::RepeatedPtrField<VolumeCapability> evolve( - const google::protobuf::RepeatedPtrField<types::VolumeCapability>& + const google::protobuf::RepeatedPtrField<CSIVolume::VolumeCapability>& capabilities); } // namespace v1 { diff --git a/src/csi/v1_volume_manager.cpp b/src/csi/v1_volume_manager.cpp index 9e44947..a9b80d0 100644 --- a/src/csi/v1_volume_manager.cpp +++ b/src/csi/v1_volume_manager.cpp @@ -260,7 +260,7 @@ Future<vector<VolumeInfo>> VolumeManagerProcess::listVolumes() Future<Bytes> VolumeManagerProcess::getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { if (!controllerCapabilities->getCapacity) { @@ -281,7 +281,7 @@ Future<Bytes> VolumeManagerProcess::getCapacity( Future<VolumeInfo> VolumeManagerProcess::createVolume( const string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { if (!controllerCapabilities->createDeleteVolume) { @@ -331,7 +331,7 @@ Future<VolumeInfo> VolumeManagerProcess::createVolume( Future<Option<Error>> VolumeManagerProcess::validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { // If the volume has been checkpointed, the validation succeeds only if the @@ -1263,7 +1263,7 @@ Future<vector<VolumeInfo>> VolumeManager::listVolumes() Future<Bytes> VolumeManager::getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered @@ -1278,7 +1278,7 @@ Future<Bytes> VolumeManager::getCapacity( Future<VolumeInfo> VolumeManager::createVolume( const string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered @@ -1294,7 +1294,7 @@ Future<VolumeInfo> VolumeManager::createVolume( Future<Option<Error>> VolumeManager::validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const Map<string, string>& parameters) { return recovered diff --git a/src/csi/v1_volume_manager.hpp b/src/csi/v1_volume_manager.hpp index ba984a9..4db11b5 100644 --- a/src/csi/v1_volume_manager.hpp +++ b/src/csi/v1_volume_manager.hpp @@ -24,8 +24,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <process/grpc.hpp> #include <process/http.hpp> @@ -74,20 +72,20 @@ public: process::Future<std::vector<VolumeInfo>> listVolumes() override; process::Future<Bytes> getCapacity( - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; process::Future<VolumeInfo> createVolume( const std::string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; process::Future<Option<Error>> validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) override; diff --git a/src/csi/v1_volume_manager_process.hpp b/src/csi/v1_volume_manager_process.hpp index a03e291..df52c3d 100644 --- a/src/csi/v1_volume_manager_process.hpp +++ b/src/csi/v1_volume_manager_process.hpp @@ -24,8 +24,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <process/grpc.hpp> #include <process/http.hpp> @@ -71,18 +69,18 @@ public: process::Future<std::vector<VolumeInfo>> listVolumes(); process::Future<Bytes> getCapacity( - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<VolumeInfo> createVolume( const std::string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<Option<Error>> validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters); process::Future<bool> deleteVolume(const std::string& volumeId); diff --git a/src/csi/volume_manager.hpp b/src/csi/volume_manager.hpp index 0aa6337..199cf44 100644 --- a/src/csi/volume_manager.hpp +++ b/src/csi/volume_manager.hpp @@ -24,8 +24,6 @@ #include <mesos/mesos.hpp> -#include <mesos/csi/types.hpp> - #include <process/future.hpp> #include <process/grpc.hpp> #include <process/http.hpp> @@ -77,7 +75,7 @@ public: // given capability and parameters. Returns zero bytes if `GET_CAPACITY` // controller capability is not supported. virtual process::Future<Bytes> getCapacity( - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) = 0; // The following methods are used to manage volume lifecycles. The lifecycle @@ -104,7 +102,7 @@ public: virtual process::Future<VolumeInfo> createVolume( const std::string& name, const Bytes& capacity, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) = 0; // Validates a volume against the given capability and parameters. Once @@ -112,7 +110,7 @@ public: // untracked then returns None. Otherwise returns the validation error. virtual process::Future<Option<Error>> validateVolume( const VolumeInfo& volumeInfo, - const types::VolumeCapability& capability, + const Volume::Source::CSIVolume::VolumeCapability& capability, const google::protobuf::Map<std::string, std::string>& parameters) = 0; // Deprovisions a volume and returns true if `CREATE_DELETE_VOLUME` controller diff --git a/src/examples/test_csi_plugin.cpp b/src/examples/test_csi_plugin.cpp index 6202173..214a3ee 100644 --- a/src/examples/test_csi_plugin.cpp +++ b/src/examples/test_csi_plugin.cpp @@ -31,7 +31,6 @@ #include <mesos/type_utils.hpp> -#include <mesos/csi/types.hpp> #include <mesos/csi/v0.hpp> #include <mesos/csi/v1.hpp> @@ -99,10 +98,11 @@ using grpc::WriteOptions; using mesos::csi::VolumeInfo; -using mesos::csi::types::VolumeCapability; - using process::grpc::StatusError; +using VolumeCapability = mesos::Volume::Source::CSIVolume::VolumeCapability; + + constexpr char PLUGIN_NAME[] = "org.apache.mesos.csi.test"; constexpr char NODE_ID[] = "localhost"; constexpr Bytes DEFAULT_VOLUME_CAPACITY = Megabytes(64); diff --git a/src/resource_provider/state.proto b/src/resource_provider/state.proto index e19d609..4192c0d 100644 --- a/src/resource_provider/state.proto +++ b/src/resource_provider/state.proto @@ -18,8 +18,6 @@ syntax = "proto2"; import "mesos/mesos.proto"; -import "mesos/csi/types.proto"; - package mesos.resource_provider; option java_package = "org.apache.mesos.resource_provider"; @@ -38,7 +36,7 @@ message ResourceProviderState { // Describes a manifest of CSI properties associated with a profile. // See DiskProfileAdaptor::ProfileInfo. message ProfileInfo { - required csi.types.VolumeCapability capability = 1; + required Volume.Source.CSIVolume.VolumeCapability capability = 1; map<string, string> parameters = 2; } diff --git a/src/tests/csi_utils_tests.cpp b/src/tests/csi_utils_tests.cpp index 5ebd0e1..0457d8c 100644 --- a/src/tests/csi_utils_tests.cpp +++ b/src/tests/csi_utils_tests.cpp @@ -21,7 +21,6 @@ #include <gtest/gtest.h> -#include <mesos/csi/types.hpp> #include <mesos/csi/v0.hpp> #include <mesos/csi/v1.hpp> diff --git a/src/tests/disk_profile_adaptor_tests.cpp b/src/tests/disk_profile_adaptor_tests.cpp index 2809847..cafbb76 100644 --- a/src/tests/disk_profile_adaptor_tests.cpp +++ b/src/tests/disk_profile_adaptor_tests.cpp @@ -19,7 +19,6 @@ #include <tuple> #include <vector> -#include <mesos/csi/types.hpp> #include <mesos/csi/v0.hpp> #include <mesos/module/disk_profile_adaptor.hpp> @@ -71,6 +70,9 @@ namespace mesos { namespace internal { namespace tests { +using VolumeCapability = mesos::Volume::Source::CSIVolume::VolumeCapability; + + constexpr char URI_DISK_PROFILE_ADAPTOR_NAME[] = "org_apache_mesos_UriDiskProfileAdaptor"; @@ -486,7 +488,7 @@ TEST_F(UriDiskProfileAdaptorTest, FetchFromFile) AWAIT_ASSERT_READY(mapping); ASSERT_TRUE(mapping->capability.has_block()); ASSERT_EQ( - csi::types::VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER, + VolumeCapability::AccessMode::MULTI_NODE_SINGLE_WRITER, mapping->capability.access_mode().mode()); Clock::resume();