Repository: mesos Updated Branches: refs/heads/master 3fb36f158 -> f852ffacc
Made the test CSI plugin compatible to CSI v0.2. This patch contains necessary changes for the test CSI plugin to support CSI v0.2. The `STAGE_UNSTAGE_VOLUME` node service capability is not implemented in this patch yet. Review: https://reviews.apache.org/r/66411/ Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/f852ffac Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/f852ffac Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/f852ffac Branch: refs/heads/master Commit: f852ffaccece40ddd2ba1ac1b29a117687bf6917 Parents: aeffcd7 Author: Chun-Hung Hsiao <chhs...@apache.org> Authored: Thu Apr 12 12:34:02 2018 -0700 Committer: Chun-Hung Hsiao <chhs...@mesosphere.io> Committed: Thu Apr 12 14:01:52 2018 -0700 ---------------------------------------------------------------------- src/examples/test_csi_plugin.cpp | 416 +++++++++++++--------------------- 1 file changed, 152 insertions(+), 264 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/f852ffac/src/examples/test_csi_plugin.cpp ---------------------------------------------------------------------- diff --git a/src/examples/test_csi_plugin.cpp b/src/examples/test_csi_plugin.cpp index aed2262..357e022 100644 --- a/src/examples/test_csi_plugin.cpp +++ b/src/examples/test_csi_plugin.cpp @@ -98,20 +98,18 @@ public: class TestCSIPlugin - : public csi::Identity::Service, - public csi::Controller::Service, - public csi::Node::Service + : public csi::v0::Identity::Service, + public csi::v0::Controller::Service, + public csi::v0::Node::Service { public: TestCSIPlugin( const string& _workDir, const string& _endpoint, - const csi::Version& _version, const Bytes& _availableCapacity, const hashmap<string, Bytes>& _volumes) : workDir(_workDir), endpoint(_endpoint), - version(_version), availableCapacity(_availableCapacity) { // TODO(jieyu): Consider not using CHECKs here. @@ -119,15 +117,15 @@ public: CHECK_SOME(paths); foreach (const string& path, paths.get()) { - Try<Volume> volume = parseVolumePath(path); - CHECK_SOME(volume); + Try<VolumeInfo> volumeInfo = parseVolumePath(path); + CHECK_SOME(volumeInfo); - CHECK(!volumes.contains(volume->id)); - volumes.put(volume->id, volume.get()); + CHECK(!volumes.contains(volumeInfo->id)); + volumes.put(volumeInfo->id, volumeInfo.get()); - if (!_volumes.contains(volume->id)) { - CHECK_GE(availableCapacity, volume->size); - availableCapacity -= volume->size; + if (!_volumes.contains(volumeInfo->id)) { + CHECK_GE(availableCapacity, volumeInfo->size); + availableCapacity -= volumeInfo->size; } } @@ -136,23 +134,23 @@ public: continue; } - Volume volume; - volume.id = name; - volume.size = capacity; + VolumeInfo volumeInfo; + volumeInfo.id = name; + volumeInfo.size = capacity; - const string path = getVolumePath(volume); + const string path = getVolumePath(volumeInfo); Try<Nothing> mkdir = os::mkdir(path); CHECK_SOME(mkdir); - volumes.put(volume.id, volume); + volumes.put(volumeInfo.id, volumeInfo); } ServerBuilder builder; builder.AddListeningPort(endpoint, InsecureServerCredentials()); - builder.RegisterService(static_cast<csi::Identity::Service*>(this)); - builder.RegisterService(static_cast<csi::Controller::Service*>(this)); - builder.RegisterService(static_cast<csi::Node::Service*>(this)); + builder.RegisterService(static_cast<csi::v0::Identity::Service*>(this)); + builder.RegisterService(static_cast<csi::v0::Controller::Service*>(this)); + builder.RegisterService(static_cast<csi::v0::Node::Service*>(this)); server = builder.BuildAndStart(); } @@ -163,136 +161,135 @@ public: } } - virtual Status GetSupportedVersions( + virtual Status GetPluginInfo( ServerContext* context, - const csi::GetSupportedVersionsRequest* request, - csi::GetSupportedVersionsResponse* response) override; + const csi::v0::GetPluginInfoRequest* request, + csi::v0::GetPluginInfoResponse* response) override; - virtual Status GetPluginInfo( + virtual Status GetPluginCapabilities( ServerContext* context, - const csi::GetPluginInfoRequest* request, - csi::GetPluginInfoResponse* response) override; + const csi::v0::GetPluginCapabilitiesRequest* request, + csi::v0::GetPluginCapabilitiesResponse* response) override; + + virtual Status Probe( + ServerContext* context, + const csi::v0::ProbeRequest* request, + csi::v0::ProbeResponse* response) override; virtual Status CreateVolume( ServerContext* context, - const csi::CreateVolumeRequest* request, - csi::CreateVolumeResponse* response) override; + const csi::v0::CreateVolumeRequest* request, + csi::v0::CreateVolumeResponse* response) override; virtual Status DeleteVolume( ServerContext* context, - const csi::DeleteVolumeRequest* request, - csi::DeleteVolumeResponse* response) override; + const csi::v0::DeleteVolumeRequest* request, + csi::v0::DeleteVolumeResponse* response) override; virtual Status ControllerPublishVolume( ServerContext* context, - const csi::ControllerPublishVolumeRequest* request, - csi::ControllerPublishVolumeResponse* response) override; + const csi::v0::ControllerPublishVolumeRequest* request, + csi::v0::ControllerPublishVolumeResponse* response) override; virtual Status ControllerUnpublishVolume( ServerContext* context, - const csi::ControllerUnpublishVolumeRequest* request, - csi::ControllerUnpublishVolumeResponse* response) override; + const csi::v0::ControllerUnpublishVolumeRequest* request, + csi::v0::ControllerUnpublishVolumeResponse* response) override; virtual Status ValidateVolumeCapabilities( ServerContext* context, - const csi::ValidateVolumeCapabilitiesRequest* request, - csi::ValidateVolumeCapabilitiesResponse* response) override; + const csi::v0::ValidateVolumeCapabilitiesRequest* request, + csi::v0::ValidateVolumeCapabilitiesResponse* response) override; virtual Status ListVolumes( ServerContext* context, - const csi::ListVolumesRequest* request, - csi::ListVolumesResponse* response) override; + const csi::v0::ListVolumesRequest* request, + csi::v0::ListVolumesResponse* response) override; virtual Status GetCapacity( ServerContext* context, - const csi::GetCapacityRequest* request, - csi::GetCapacityResponse* response) override; - - virtual Status ControllerProbe( - ServerContext* context, - const csi::ControllerProbeRequest* request, - csi::ControllerProbeResponse* response) override; + const csi::v0::GetCapacityRequest* request, + csi::v0::GetCapacityResponse* response) override; virtual Status ControllerGetCapabilities( ServerContext* context, - const csi::ControllerGetCapabilitiesRequest* request, - csi::ControllerGetCapabilitiesResponse* response) override; + const csi::v0::ControllerGetCapabilitiesRequest* request, + csi::v0::ControllerGetCapabilitiesResponse* response) override; virtual Status NodePublishVolume( ServerContext* context, - const csi::NodePublishVolumeRequest* request, - csi::NodePublishVolumeResponse* response) override; + const csi::v0::NodePublishVolumeRequest* request, + csi::v0::NodePublishVolumeResponse* response) override; virtual Status NodeUnpublishVolume( ServerContext* context, - const csi::NodeUnpublishVolumeRequest* request, - csi::NodeUnpublishVolumeResponse* response) override; - - virtual Status GetNodeID( - ServerContext* context, - const csi::GetNodeIDRequest* request, - csi::GetNodeIDResponse* response) override; + const csi::v0::NodeUnpublishVolumeRequest* request, + csi::v0::NodeUnpublishVolumeResponse* response) override; - virtual Status NodeProbe( + virtual Status NodeGetId( ServerContext* context, - const csi::NodeProbeRequest* request, - csi::NodeProbeResponse* response) override; + const csi::v0::NodeGetIdRequest* request, + csi::v0::NodeGetIdResponse* response) override; virtual Status NodeGetCapabilities( ServerContext* context, - const csi::NodeGetCapabilitiesRequest* request, - csi::NodeGetCapabilitiesResponse* response) override; + const csi::v0::NodeGetCapabilitiesRequest* request, + csi::v0::NodeGetCapabilitiesResponse* response) override; private: - struct Volume + struct VolumeInfo { string id; Bytes size; }; - Option<Error> validateVersion(const csi::Version& _version); - - string getVolumePath(const Volume& volume); - Try<Volume> parseVolumePath(const string& path); + string getVolumePath(const VolumeInfo& volumeInfo); + Try<VolumeInfo> parseVolumePath(const string& path); const string workDir; const string endpoint; - const csi::Version version; Bytes availableCapacity; - hashmap<string, Volume> volumes; + hashmap<string, VolumeInfo> volumes; unique_ptr<Server> server; }; -Status TestCSIPlugin::GetSupportedVersions( +Status TestCSIPlugin::GetPluginInfo( ServerContext* context, - const csi::GetSupportedVersionsRequest* request, - csi::GetSupportedVersionsResponse* response) + const csi::v0::GetPluginInfoRequest* request, + csi::v0::GetPluginInfoResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - response->add_supported_versions()->CopyFrom(version); + response->set_name(PLUGIN_NAME); + response->set_vendor_version(MESOS_VERSION); return Status::OK; } -Status TestCSIPlugin::GetPluginInfo( +Status TestCSIPlugin::GetPluginCapabilities( ServerContext* context, - const csi::GetPluginInfoRequest* request, - csi::GetPluginInfoResponse* response) + const csi::v0::GetPluginCapabilitiesRequest* request, + csi::v0::GetPluginCapabilitiesResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } + response->add_capabilities()->mutable_service()->set_type( + csi::v0::PluginCapability::Service::CONTROLLER_SERVICE); - response->set_name(PLUGIN_NAME); - response->set_vendor_version(MESOS_VERSION); + return Status::OK; +} + + +Status TestCSIPlugin::Probe( + ServerContext* context, + const csi::v0::ProbeRequest* request, + csi::v0::ProbeResponse* response) +{ + LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; return Status::OK; } @@ -300,18 +297,13 @@ Status TestCSIPlugin::GetPluginInfo( Status TestCSIPlugin::CreateVolume( ServerContext* context, - const csi::CreateVolumeRequest* request, - csi::CreateVolumeResponse* response) + const csi::v0::CreateVolumeRequest* request, + csi::v0::CreateVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (request->name().empty()) { return Status(grpc::INVALID_ARGUMENT, "Volume name cannot be empty"); } @@ -327,12 +319,12 @@ Status TestCSIPlugin::CreateVolume( return Status(grpc::OUT_OF_RANGE, "Insufficient capacity"); } - Volume volume; - volume.id = request->name(); - volume.size = min(DEFAULT_VOLUME_CAPACITY, availableCapacity); + VolumeInfo volumeInfo; + volumeInfo.id = request->name(); + volumeInfo.size = min(DEFAULT_VOLUME_CAPACITY, availableCapacity); if (request->has_capacity_range()) { - const csi::CapacityRange& range = request->capacity_range(); + const csi::v0::CapacityRange& range = request->capacity_range(); // The highest we can pick. Bytes limit = availableCapacity; @@ -341,34 +333,34 @@ Status TestCSIPlugin::CreateVolume( } if (range.required_bytes() != 0 && - range.required_bytes() > limit.bytes()) { + static_cast<size_t>(range.required_bytes()) > limit.bytes()) { return Status(grpc::OUT_OF_RANGE, "Cannot satisfy 'required_bytes'"); } - volume.size = min( + volumeInfo.size = min( limit, max(DEFAULT_VOLUME_CAPACITY, Bytes(range.required_bytes()))); } - const string path = getVolumePath(volume); + const string path = getVolumePath(volumeInfo); Try<Nothing> mkdir = os::mkdir(path); if (mkdir.isError()) { return Status( grpc::INTERNAL, - "Failed to create volume '" + volume.id + "': " + mkdir.error()); + "Failed to create volume '" + volumeInfo.id + "': " + mkdir.error()); } - availableCapacity -= volume.size; - volumes.put(volume.id, volume); + availableCapacity -= volumeInfo.size; + volumes.put(volumeInfo.id, volumeInfo); } - const Volume& volume = volumes.at(request->name()); + const VolumeInfo& volumeInfo = volumes.at(request->name()); - response->mutable_volume_info()->set_id(volume.id); - response->mutable_volume_info()->set_capacity_bytes(volume.size.bytes()); - (*response->mutable_volume_info()->mutable_attributes())["path"] = - getVolumePath(volume); + response->mutable_volume()->set_id(volumeInfo.id); + response->mutable_volume()->set_capacity_bytes(volumeInfo.size.bytes()); + (*response->mutable_volume()->mutable_attributes())["path"] = + getVolumePath(volumeInfo); if (alreadyExists) { return Status( @@ -382,26 +374,19 @@ Status TestCSIPlugin::CreateVolume( Status TestCSIPlugin::DeleteVolume( ServerContext* context, - const csi::DeleteVolumeRequest* request, - csi::DeleteVolumeResponse* response) + const csi::v0::DeleteVolumeRequest* request, + csi::v0::DeleteVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { - return Status( - grpc::NOT_FOUND, - "Volume '" + request->volume_id() + "' is not found"); + return Status::OK; } - const Volume& volume = volumes.at(request->volume_id()); - const string path = getVolumePath(volume); + const VolumeInfo& volumeInfo = volumes.at(request->volume_id()); + const string path = getVolumePath(volumeInfo); Try<Nothing> rmdir = os::rmdir(path); if (rmdir.isError()) { @@ -411,8 +396,8 @@ Status TestCSIPlugin::DeleteVolume( rmdir.error()); } - availableCapacity -= volume.size; - volumes.erase(volume.id); + availableCapacity -= volumeInfo.size; + volumes.erase(volumeInfo.id); return Status::OK; } @@ -420,26 +405,21 @@ Status TestCSIPlugin::DeleteVolume( Status TestCSIPlugin::ControllerPublishVolume( ServerContext* context, - const csi::ControllerPublishVolumeRequest* request, - csi::ControllerPublishVolumeResponse* response) + const csi::v0::ControllerPublishVolumeRequest* request, + csi::v0::ControllerPublishVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { return Status( grpc::NOT_FOUND, "Volume '" + request->volume_id() + "' is not found"); } - const Volume& volume = volumes.at(request->volume_id()); - const string path = getVolumePath(volume); + const VolumeInfo& volumeInfo = volumes.at(request->volume_id()); + const string path = getVolumePath(volumeInfo); auto it = request->volume_attributes().find("path"); if (it == request->volume_attributes().end() || it->second != path) { @@ -459,18 +439,13 @@ Status TestCSIPlugin::ControllerPublishVolume( Status TestCSIPlugin::ControllerUnpublishVolume( ServerContext* context, - const csi::ControllerUnpublishVolumeRequest* request, - csi::ControllerUnpublishVolumeResponse* response) + const csi::v0::ControllerUnpublishVolumeRequest* request, + csi::v0::ControllerUnpublishVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { return Status( grpc::NOT_FOUND, @@ -490,33 +465,28 @@ Status TestCSIPlugin::ControllerUnpublishVolume( Status TestCSIPlugin::ValidateVolumeCapabilities( ServerContext* context, - const csi::ValidateVolumeCapabilitiesRequest* request, - csi::ValidateVolumeCapabilitiesResponse* response) + const csi::v0::ValidateVolumeCapabilitiesRequest* request, + csi::v0::ValidateVolumeCapabilitiesResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { return Status( grpc::NOT_FOUND, "Volume '" + request->volume_id() + "' is not found"); } - const Volume& volume = volumes.at(request->volume_id()); - const string path = getVolumePath(volume); + const VolumeInfo& volumeInfo = volumes.at(request->volume_id()); + const string path = getVolumePath(volumeInfo); auto it = request->volume_attributes().find("path"); if (it == request->volume_attributes().end() || it->second != path) { return Status(grpc::INVALID_ARGUMENT, "Invalid volume attributes"); } - foreach (const csi::VolumeCapability& capability, + foreach (const csi::v0::VolumeCapability& capability, request->volume_capabilities()) { if (capability.has_mount() && (!capability.mount().fs_type().empty() || @@ -528,7 +498,7 @@ Status TestCSIPlugin::ValidateVolumeCapabilities( } if (capability.access_mode().mode() != - csi::VolumeCapability::AccessMode::SINGLE_NODE_WRITER) { + csi::v0::VolumeCapability::AccessMode::SINGLE_NODE_WRITER) { response->set_supported(false); response->set_message("Access mode is not supported"); @@ -544,16 +514,11 @@ Status TestCSIPlugin::ValidateVolumeCapabilities( Status TestCSIPlugin::ListVolumes( ServerContext* context, - const csi::ListVolumesRequest* request, - csi::ListVolumesResponse* response) + const csi::v0::ListVolumesRequest* request, + csi::v0::ListVolumesResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - // TODO(chhsiao): Support the `max_entries` field. if (request->max_entries() > 0) { return Status(grpc::ABORTED, "Field 'max_entries' is not supported"); @@ -564,11 +529,11 @@ Status TestCSIPlugin::ListVolumes( return Status(grpc::ABORTED, "Field 'starting_token' is not supported"); } - foreachvalue (const Volume& volume, volumes) { - csi::VolumeInfo* info = response->add_entries()->mutable_volume_info(); - info->set_id(volume.id); - info->set_capacity_bytes(volume.size.bytes()); - (*info->mutable_attributes())["path"] = getVolumePath(volume); + foreachvalue (const VolumeInfo& volumeInfo, volumes) { + csi::v0::Volume* volume = response->add_entries()->mutable_volume(); + volume->set_id(volumeInfo.id); + volume->set_capacity_bytes(volumeInfo.size.bytes()); + (*volume->mutable_attributes())["path"] = getVolumePath(volumeInfo); } return Status::OK; @@ -577,17 +542,12 @@ Status TestCSIPlugin::ListVolumes( Status TestCSIPlugin::GetCapacity( ServerContext* context, - const csi::GetCapacityRequest* request, - csi::GetCapacityResponse* response) + const csi::v0::GetCapacityRequest* request, + csi::v0::GetCapacityResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - - foreach (const csi::VolumeCapability& capability, + foreach (const csi::v0::VolumeCapability& capability, request->volume_capabilities()) { // We report zero capacity for any capability other than the // default-constructed `MountVolume` capability since this plugin @@ -601,7 +561,7 @@ Status TestCSIPlugin::GetCapacity( } if (capability.access_mode().mode() != - csi::VolumeCapability::AccessMode::SINGLE_NODE_WRITER) { + csi::v0::VolumeCapability::AccessMode::SINGLE_NODE_WRITER) { response->set_available_capacity(0); return Status::OK; @@ -614,42 +574,21 @@ Status TestCSIPlugin::GetCapacity( } -Status TestCSIPlugin::ControllerProbe( - ServerContext* context, - const csi::ControllerProbeRequest* request, - csi::ControllerProbeResponse* response) -{ - LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - - return Status::OK; -} - - Status TestCSIPlugin::ControllerGetCapabilities( ServerContext* context, - const csi::ControllerGetCapabilitiesRequest* request, - csi::ControllerGetCapabilitiesResponse* response) + const csi::v0::ControllerGetCapabilitiesRequest* request, + csi::v0::ControllerGetCapabilitiesResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - response->add_capabilities()->mutable_rpc()->set_type( - csi::ControllerServiceCapability::RPC::CREATE_DELETE_VOLUME); + csi::v0::ControllerServiceCapability::RPC::CREATE_DELETE_VOLUME); response->add_capabilities()->mutable_rpc()->set_type( - csi::ControllerServiceCapability::RPC::PUBLISH_UNPUBLISH_VOLUME); + csi::v0::ControllerServiceCapability::RPC::PUBLISH_UNPUBLISH_VOLUME); response->add_capabilities()->mutable_rpc()->set_type( - csi::ControllerServiceCapability::RPC::GET_CAPACITY); + csi::v0::ControllerServiceCapability::RPC::GET_CAPACITY); response->add_capabilities()->mutable_rpc()->set_type( - csi::ControllerServiceCapability::RPC::LIST_VOLUMES); + csi::v0::ControllerServiceCapability::RPC::LIST_VOLUMES); return Status::OK; } @@ -657,26 +596,21 @@ Status TestCSIPlugin::ControllerGetCapabilities( Status TestCSIPlugin::NodePublishVolume( ServerContext* context, - const csi::NodePublishVolumeRequest* request, - csi::NodePublishVolumeResponse* response) + const csi::v0::NodePublishVolumeRequest* request, + csi::v0::NodePublishVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; // TODO(chhsiao): Validate required fields. - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { return Status( grpc::NOT_FOUND, "Volume '" + request->volume_id() + "' is not found"); } - const Volume& volume = volumes.at(request->volume_id()); - const string path = getVolumePath(volume); + const VolumeInfo& volumeInfo = volumes.at(request->volume_id()); + const string path = getVolumePath(volumeInfo); auto it = request->volume_attributes().find("path"); if (it == request->volume_attributes().end() || it->second != path) { @@ -736,16 +670,11 @@ Status TestCSIPlugin::NodePublishVolume( Status TestCSIPlugin::NodeUnpublishVolume( ServerContext* context, - const csi::NodeUnpublishVolumeRequest* request, - csi::NodeUnpublishVolumeResponse* response) + const csi::v0::NodeUnpublishVolumeRequest* request, + csi::v0::NodeUnpublishVolumeResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - if (!volumes.contains(request->volume_id())) { return Status( grpc::NOT_FOUND, @@ -771,8 +700,8 @@ Status TestCSIPlugin::NodeUnpublishVolume( return Status::OK; } - const Volume& volume = volumes.at(request->volume_id()); - const string path = getVolumePath(volume); + const VolumeInfo& volumeInfo = volumes.at(request->volume_id()); + const string path = getVolumePath(volumeInfo); Try<Nothing> unmount = fs::unmount(request->target_path()); if (unmount.isError()) { @@ -786,75 +715,40 @@ Status TestCSIPlugin::NodeUnpublishVolume( } -Status TestCSIPlugin::GetNodeID( +Status TestCSIPlugin::NodeGetId( ServerContext* context, - const csi::GetNodeIDRequest* request, - csi::GetNodeIDResponse* response) + const csi::v0::NodeGetIdRequest* request, + csi::v0::NodeGetIdResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - response->set_node_id(NODE_ID); return Status::OK; } -Status TestCSIPlugin::NodeProbe( - ServerContext* context, - const csi::NodeProbeRequest* request, - csi::NodeProbeResponse* response) -{ - LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - - return Status::OK; -} - - Status TestCSIPlugin::NodeGetCapabilities( ServerContext* context, - const csi::NodeGetCapabilitiesRequest* request, - csi::NodeGetCapabilitiesResponse* response) + const csi::v0::NodeGetCapabilitiesRequest* request, + csi::v0::NodeGetCapabilitiesResponse* response) { LOG(INFO) << request->GetDescriptor()->name() << " '" << *request << "'"; - Option<Error> error = validateVersion(request->version()); - if (error.isSome()) { - return Status(grpc::INVALID_ARGUMENT, error->message); - } - return Status::OK; } -Option<Error> TestCSIPlugin::validateVersion(const csi::Version& _version) -{ - if (version != _version) { - return Error("Version " + stringify(_version) + " is not supported"); - } - - return None(); -} - - -string TestCSIPlugin::getVolumePath(const Volume& volume) +string TestCSIPlugin::getVolumePath(const VolumeInfo& volumeInfo) { return path::join( workDir, - strings::join("-", stringify(volume.size), volume.id)); + strings::join("-", stringify(volumeInfo.size), volumeInfo.id)); } -Try<TestCSIPlugin::Volume> TestCSIPlugin::parseVolumePath(const string& path) +Try<TestCSIPlugin::VolumeInfo> TestCSIPlugin::parseVolumePath( + const string& path) { size_t pos = path.find_first_of("-"); if (pos == string::npos) { @@ -869,11 +763,11 @@ Try<TestCSIPlugin::Volume> TestCSIPlugin::parseVolumePath(const string& path) return Error("Failed to parse bytes: " + bytes.error()); } - Volume volume; - volume.id = id; - volume.size = bytes.get(); + VolumeInfo volumeInfo; + volumeInfo.id = id; + volumeInfo.size = bytes.get(); - return volume; + return volumeInfo; } @@ -906,11 +800,6 @@ int main(int argc, char** argv) return EXIT_FAILURE; } - csi::Version version; - version.set_major(0); - version.set_minor(1); - version.set_patch(0); - hashmap<string, Bytes> volumes; if (flags.volumes.isSome()) { @@ -947,7 +836,6 @@ int main(int argc, char** argv) unique_ptr<TestCSIPlugin> plugin(new TestCSIPlugin( flags.work_dir, flags.endpoint, - version, flags.available_capacity, volumes));