@@ -21,6 +21,9 @@ func BdevRaidCmd() cli.Command {
21
21
BdevRaidGetCmd (),
22
22
BdevRaidRemoveBaseBdevCmd (),
23
23
BdevRaidGrowBaseBdevCmd (),
24
+ BdevRaidGetBaseBdevDeltaMapCmd (),
25
+ BdevRaidStopBaseBdevDeltaMapCmd (),
26
+ BdevRaidClearBaseBdevFaultyStateCmd (),
24
27
},
25
28
}
26
29
}
@@ -50,6 +53,21 @@ func BdevRaidCreateCmd() cli.Command {
50
53
Usage : "Names of Nvme bdevs, the input is like \" --base-devs Nvme0n1 --base-devs Nvme1n1\" " ,
51
54
Required : true ,
52
55
},
56
+ cli.StringFlag {
57
+ Name : "UUID" ,
58
+ Usage : "UUID for this raid bdev" ,
59
+ Required : false ,
60
+ },
61
+ cli.BoolFlag {
62
+ Name : "superblock" ,
63
+ Usage : "Raid bdev info will be stored in superblock on each base bdev" ,
64
+ Required : false ,
65
+ },
66
+ cli.BoolFlag {
67
+ Name : "delta-bitmap" ,
68
+ Usage : "A delta bitmap for faulty base bdevs will be recorded" ,
69
+ Required : false ,
70
+ },
53
71
},
54
72
Action : func (c * cli.Context ) {
55
73
if err := bdevRaidCreate (c ); err != nil {
@@ -65,7 +83,8 @@ func bdevRaidCreate(c *cli.Context) error {
65
83
return err
66
84
}
67
85
68
- created , err := spdkCli .BdevRaidCreate (c .String ("name" ), spdktypes .BdevRaidLevel (c .String ("level" )), uint32 (c .Uint64 ("strip-size-kb" )), c .StringSlice ("base-bdevs" ))
86
+ created , err := spdkCli .BdevRaidCreate (c .String ("name" ), spdktypes .BdevRaidLevel (c .String ("level" )), uint32 (c .Uint64 ("strip-size-kb" )), c .StringSlice ("base-bdevs" ),
87
+ c .String ("UUID" ), c .Bool ("superblock" ), c .Bool ("delta-bitmap" ))
69
88
if err != nil {
70
89
return err
71
90
}
@@ -193,3 +212,81 @@ func bdevRaidGrowBaseBdev(c *cli.Context) error {
193
212
194
213
return util .PrintObject (growed )
195
214
}
215
+
216
+ func BdevRaidGetBaseBdevDeltaMapCmd () cli.Command {
217
+ return cli.Command {
218
+ Name : "get-base-bdev-delta-map" ,
219
+ Usage : "get the delta bitmap of a faulty base bdev: get-base-bdev-delta-map <BASE BDEV NAME>" ,
220
+ Action : func (c * cli.Context ) {
221
+ if err := bdevRaidGetBaseBdevDeltaMap (c ); err != nil {
222
+ logrus .WithError (err ).Fatalf ("Failed to run get base bdev delta map to raid command" )
223
+ }
224
+ },
225
+ }
226
+ }
227
+
228
+ func bdevRaidGetBaseBdevDeltaMap (c * cli.Context ) error {
229
+ spdkCli , err := client .NewClient (context .Background ())
230
+ if err != nil {
231
+ return err
232
+ }
233
+
234
+ deltaMap , err := spdkCli .BdevRaidGetBaseBdevDeltaMap (c .Args ().First ())
235
+ if err != nil {
236
+ return err
237
+ }
238
+
239
+ return util .PrintObject (deltaMap )
240
+ }
241
+
242
+ func BdevRaidStopBaseBdevDeltaMapCmd () cli.Command {
243
+ return cli.Command {
244
+ Name : "stop-base-bdev-delta-map" ,
245
+ Usage : "stop the updating of the delta bitmap of a faulty base bdev: stop-base-bdev-delta-map <BASE BDEV NAME>" ,
246
+ Action : func (c * cli.Context ) {
247
+ if err := bdevRaidStopBaseBdevDeltaMap (c ); err != nil {
248
+ logrus .WithError (err ).Fatalf ("Failed to run stop base bdev delta map to raid command" )
249
+ }
250
+ },
251
+ }
252
+ }
253
+
254
+ func bdevRaidStopBaseBdevDeltaMap (c * cli.Context ) error {
255
+ spdkCli , err := client .NewClient (context .Background ())
256
+ if err != nil {
257
+ return err
258
+ }
259
+
260
+ stopped , err := spdkCli .BdevRaidStopBaseBdevDeltaMap (c .Args ().First ())
261
+ if err != nil {
262
+ return err
263
+ }
264
+
265
+ return util .PrintObject (stopped )
266
+ }
267
+
268
+ func BdevRaidClearBaseBdevFaultyStateCmd () cli.Command {
269
+ return cli.Command {
270
+ Name : "clear-base-bdev-faulty-state" ,
271
+ Usage : "clear the faulty state of a base bdev: clear-base-bdev-faulty-state <BASE BDEV NAME>" ,
272
+ Action : func (c * cli.Context ) {
273
+ if err := bdevRaidClearBaseBdevFaultyState (c ); err != nil {
274
+ logrus .WithError (err ).Fatalf ("Failed to run clear base bdev faulty state to raid command" )
275
+ }
276
+ },
277
+ }
278
+ }
279
+
280
+ func bdevRaidClearBaseBdevFaultyState (c * cli.Context ) error {
281
+ spdkCli , err := client .NewClient (context .Background ())
282
+ if err != nil {
283
+ return err
284
+ }
285
+
286
+ cleared , err := spdkCli .BdevRaidClearBaseBdevFaultyState (c .Args ().First ())
287
+ if err != nil {
288
+ return err
289
+ }
290
+
291
+ return util .PrintObject (cleared )
292
+ }
0 commit comments