@@ -80,85 +80,97 @@ A CO SHOULD be equipped to handle both centralized and headless plugins, as well
8080Several of these possibilities are illustrated in the following figures.
8181
8282```
83- CO "Master" Host
84- +-------------------------------------------+
85- | |
86- | +------------+ +------------+ |
87- | | CO | gRPC | Controller | |
88- | | +-----------> Plugin | |
89- | +------------+ +------------+ |
90- | |
91- +-------------------------------------------+
92-
93- CO "Node" Host(s)
94- +-------------------------------------------+
95- | |
96- | +------------+ +------------+ |
97- | | CO | gRPC | Node | |
98- | | +-----------> Plugin | |
99- | +------------+ +------------+ |
100- | |
101- +-------------------------------------------+
83+ CO "Master" Host
84+ +------------------------------------------------+
85+ | |
86+ | +------------+ +-----------------+ |
87+ | | CO | gRPC | Controller | |
88+ | | +--+--------> Plugin | |
89+ | +------------+ | +-----------------+ |
90+ | | |
91+ | | +-----------------+ |
92+ | | | GroupController | |
93+ | +--------> Plugin | |
94+ | +-----------------+ |
95+ | |
96+ +------------------------------------------------+
97+
98+ CO "Node" Host(s)
99+ +------------------------------------------------+
100+ | |
101+ | +------------+ +-----------------+ |
102+ | | CO | gRPC | Node | |
103+ | | +-----------> Plugin | |
104+ | +------------+ +-----------------+ |
105+ | |
106+ +------------------------------------------------+
102107
103108Figure 1: The Plugin runs on all nodes in the cluster: a centralized
104- Controller Plugin is available on the CO master host and the Node
105- Plugin is available on all of the CO Nodes.
109+ Controller Plugin and GroupController Plugin (Optional) are available
110+ on the CO master host and the Node Plugin is available on all of the
111+ CO Nodes.
106112```
107113
108114```
109- CO "Node" Host(s)
110- +-------------------------------------------+
111- | |
112- | +------------+ +------------+ |
113- | | CO | gRPC | Controller | |
114- | | +--+--------> Plugin | |
115- | +------------+ | +------------+ |
116- | | |
117- | | |
118- | | +------------+ |
119- | | | Node | |
120- | +--------> Plugin | |
121- | +------------+ |
122- | |
123- +-------------------------------------------+
115+ CO "Node" Host(s)
116+ +------------------------------------------------+
117+ | |
118+ | +-----------------+ |
119+ | | Node | |
120+ | +--------> Plugin | |
121+ | | +-----------------+ |
122+ | | |
123+ | +------------+ | +-----------------+ |
124+ | | CO | |gRPC | Controller | |
125+ | | +-----------> Plugin | |
126+ | +------------+ | +-----------------+ |
127+ | | |
128+ | | +-----------------+ |
129+ | | | GroupController | |
130+ | +--------> Plugin | |
131+ | +-----------------+ |
132+ | |
133+ +------------------------------------------------+
124134
125135Figure 2: Headless Plugin deployment, only the CO Node hosts run
126- Plugins. Separate, split-component Plugins supply the Controller
127- Service and the Node Service respectively.
136+ Plugins. Separate, split-component Plugins supply the Node Service,
137+ the Controller Service and the GroupController Service (Optional)
138+ respectively.
128139```
129140
130141```
131- CO "Node" Host(s)
132- +-------------------------------------------+
133- | |
134- | +------------+ +------------+ |
135- | | CO | gRPC | Controller | |
136- | | +-----------> Node | |
137- | +------------+ | Plugin | |
138- | +------------+ |
139- | |
140- +-------------------------------------------+
142+ CO "Node" Host(s)
143+ +------------------------------------------------+
144+ | |
145+ | +-----------------+ |
146+ | +------------+ | Node | |
147+ | | CO | gRPC | Controller | |
148+ | | +-----------> GroupController | |
149+ | +------------+ | Plugin | |
150+ | +-----------------+ |
151+ | |
152+ +------------------------------------------------+
141153
142154Figure 3: Headless Plugin deployment, only the CO Node hosts run
143- Plugins. A unified Plugin component supplies both the Controller
144- Service and Node Service.
155+ Plugins. A unified Plugin component supplies both the Node Service,
156+ the Controller Service and the GroupController Service (Optional) .
145157```
146158
147159```
148- CO "Node" Host(s)
149- +-------------------------------------------+
150- | |
151- | +------------+ +------------+ |
152- | | CO | gRPC | Node | |
153- | | +-----------> Plugin | |
154- | +------------+ +------------+ |
155- | |
156- +-------------------------------------------+
160+ CO "Node" Host(s)
161+ +------------------------------------------------ +
162+ | |
163+ | +------------+ +----------------- + |
164+ | | CO | gRPC | Node | |
165+ | | +-----------> Plugin | |
166+ | +------------+ +----------------- + |
167+ | |
168+ +------------------------------------------------ +
157169
158170Figure 4: Headless Plugin deployment, only the CO Node hosts run
159171Plugins. A Node-only Plugin component supplies only the Node Service.
160- Its GetPluginCapabilities RPC does not report the CONTROLLER_SERVICE
161- capability.
172+ Its GetPluginCapabilities RPC does not report both the CONTROLLER_SERVICE
173+ capability and the GROUP_CONTROLLER_SERVICE capability .
162174```
163175
164176### Volume Lifecycle
@@ -268,7 +280,13 @@ Each SP MUST provide:
268280
269281* ** Node Plugin** : A gRPC endpoint serving CSI RPCs that MUST be run on the Node whereupon an SP-provisioned volume will be published.
270282* ** Controller Plugin** : A gRPC endpoint serving CSI RPCs that MAY be run anywhere.
271- * In some circumstances a single gRPC endpoint MAY serve all CSI RPCs (see Figure 3 in [ Architecture] ( #architecture ) ).
283+
284+ Each SP MAY provide:
285+
286+ - ** GroupController Plugin** : A gRPC endpoint serving CSI RPCs that MAY be run anywhere.
287+
288+
289+ In some circumstances a single gRPC endpoint MAY serve all CSI RPCs (see Figure 3 in [ Architecture] ( #architecture ) ).
272290
273291``` protobuf
274292syntax = "proto3";
@@ -322,10 +340,11 @@ extend google.protobuf.ServiceOptions {
322340}
323341```
324342
325- There are three sets of RPCs:
343+ There are four sets of RPCs:
326344
327- * ** Identity Service** : Both the Node Plugin and the Controller Plugin MUST implement this sets of RPCs.
345+ * ** Identity Service** : Both the Node Plugin, the Controller Plugin and the GroupController Plugin MUST implement this sets of RPCs.
328346* ** Controller Service** : The Controller Plugin MUST implement this sets of RPCs.
347+ * ** GroupController Service** : The GroupController Plugin MUST implement this sets of RPCs.
329348* ** Node Service** : The Node Plugin MUST implement this sets of RPCs.
330349
331350``` protobuf
@@ -3066,6 +3085,10 @@ The CO MUST implement the specified error recovery behavior when it encounters t
30663085| Snapshot list mismatch | 3 INVALID_ARGUMENT | Besides the general cases, this code SHOULD also be used to indicate when plugin supporting CREATE_DELETE_GET_VOLUME_GROUP_SNAPSHOT detects a mismatch in the ` snapshot_ids ` . | If a mismatch is detected in the ` snapshot_ids ` , caller SHOULD use different ` snapshot_ids ` . |
30673086| Volume group snapshot does not exist | 5 NOT_FOUND | Indicates that a volume group snapshot corresponding to the specified ` group_snapshot_id ` does not exist. | Caller MUST verify that the ` group_snapshot_id ` is correct and that the volume group snapshot is accessible and has not been deleted before retrying with exponential back off. |
30683087
3088+ #### RPC Interactions
3089+
3090+ TBD
3091+
30693092## Protocol
30703093
30713094### Connectivity
0 commit comments