Skip to content

Commit cf0b28d

Browse files
committed
Allow modifying volume topology
1 parent a539b4f commit cf0b28d

File tree

4 files changed

+1764
-1362
lines changed

4 files changed

+1764
-1362
lines changed

csi.proto

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ service Controller {
111111
returns (ControllerModifyVolumeResponse) {
112112
option (alpha_method) = true;
113113
}
114+
115+
rpc ControllerModifyVolumeTopology (
116+
ControllerModifyVolumeTopologyRequest)
117+
returns (ControllerModifyVolumeTopologyResponse) {
118+
option (alpha_method) = true;
119+
}
114120
}
115121

116122
service GroupController {
@@ -1047,6 +1053,52 @@ message ControllerModifyVolumeResponse {
10471053
option (alpha_message) = true;
10481054
}
10491055

1056+
message ControllerModifyVolumeTopologyRequest {
1057+
option (alpha_message) = true;
1058+
1059+
// Container identity information for the existing volume.
1060+
// This field is REQUIRED
1061+
string volume_id = 1;
1062+
1063+
// Secrets required by plugin to complete modify volume topology
1064+
// request.
1065+
// This field is OPTIONAL. Refer to the `Secrets Requirements`
1066+
// section on how to use this field.
1067+
map<string, string> secrets = 2 [(csi_secret) = true];
1068+
1069+
// Plugin specific volume attributes to mutate, passed in as
1070+
// opaque key-value pairs.
1071+
// This field is REQUIRED. The Plugin is responsible for
1072+
// parsing and validating these parameters. COs will treat these
1073+
// as opaque. The CO SHOULD specify the intended values of all mutable
1074+
// parameters it intends to modify. SPs MUST NOT modify volumes based
1075+
// on the absence of keys, only keys that are specified should result
1076+
// in modifications to the volume.
1077+
map<string, string> mutable_parameters = 3;
1078+
}
1079+
1080+
message ControllerModifyVolumeTopologyResponse {
1081+
option (alpha_message) = true;
1082+
1083+
// Specifies where (regions, zones, racks, etc.) the modified
1084+
// volume is accessible from.
1085+
// A plugin that returns this field MUST also set the
1086+
// VOLUME_ACCESSIBILITY_CONSTRAINTS plugin capability.
1087+
// The SP MAY specify multiple topologies to indicate the volume is
1088+
// accessible from multiple locations.
1089+
// COs MAY use this information along with the topology information
1090+
// returned by NodeGetInfo to ensure that a given volume is accessible
1091+
// from a given node when scheduling workloads.
1092+
repeated Topology accessible_topology = 1;
1093+
1094+
// Indicates whether the modification is still in progress.
1095+
// SP MAY set in_progress to update the accessible_topology
1096+
// before the modification finishes to reduce possible race
1097+
// conditions.
1098+
// COs SHOULD retry the request if in_progress is set to true,
1099+
// until in_progress is set to false.
1100+
bool in_progress = 2;
1101+
}
10501102
message GetCapacityRequest {
10511103
// If specified, the Plugin SHALL report the capacity of the storage
10521104
// that can be used to provision volumes that satisfy ALL of the
@@ -1194,6 +1246,10 @@ message ControllerServiceCapability {
11941246
// Indicates the SP supports the GetSnapshot RPC.
11951247
// This enables COs to fetch an existing snapshot.
11961248
GET_SNAPSHOT = 15 [(alpha_enum_value) = true];
1249+
1250+
// Indicates the SP supports modifying volume topology.
1251+
// See ControllerModifyVolumeTopology for details.
1252+
MODIFY_VOLUME_TOPOLOGY = 16 [(alpha_enum_value) = true];
11971253
}
11981254

11991255
Type type = 1;

0 commit comments

Comments
 (0)