@@ -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,93 @@ 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" ,
220
+ ArgsUsage : "<BASE BDEV NAME>" ,
221
+ Action : func (c * cli.Context ) {
222
+ if c .NArg () != 1 {
223
+ logrus .Fatal ("BASE BDEV NAME argument required" )
224
+ }
225
+ if err := bdevRaidGetBaseBdevDeltaMap (c ); err != nil {
226
+ logrus .WithError (err ).Fatalf ("Failed to run get base bdev delta map to raid command" )
227
+ }
228
+ },
229
+ }
230
+ }
231
+
232
+ func bdevRaidGetBaseBdevDeltaMap (c * cli.Context ) error {
233
+ spdkCli , err := client .NewClient (context .Background ())
234
+ if err != nil {
235
+ return err
236
+ }
237
+
238
+ deltaMap , err := spdkCli .BdevRaidGetBaseBdevDeltaMap (c .Args ().First ())
239
+ if err != nil {
240
+ return err
241
+ }
242
+
243
+ return util .PrintObject (deltaMap )
244
+ }
245
+
246
+ func BdevRaidStopBaseBdevDeltaMapCmd () cli.Command {
247
+ return cli.Command {
248
+ Name : "stop-base-bdev-delta-map" ,
249
+ Usage : "stop the updating of the delta bitmap of a faulty base bdev" ,
250
+ ArgsUsage : "<BASE BDEV NAME>" ,
251
+ Action : func (c * cli.Context ) {
252
+ if c .NArg () != 1 {
253
+ logrus .Fatal ("BASE BDEV NAME argument required" )
254
+ }
255
+ if err := bdevRaidStopBaseBdevDeltaMap (c ); err != nil {
256
+ logrus .WithError (err ).Fatalf ("Failed to run stop base bdev delta map to raid command" )
257
+ }
258
+ },
259
+ }
260
+ }
261
+
262
+ func bdevRaidStopBaseBdevDeltaMap (c * cli.Context ) error {
263
+ spdkCli , err := client .NewClient (context .Background ())
264
+ if err != nil {
265
+ return err
266
+ }
267
+
268
+ stopped , err := spdkCli .BdevRaidStopBaseBdevDeltaMap (c .Args ().First ())
269
+ if err != nil {
270
+ return err
271
+ }
272
+
273
+ return util .PrintObject (stopped )
274
+ }
275
+
276
+ func BdevRaidClearBaseBdevFaultyStateCmd () cli.Command {
277
+ return cli.Command {
278
+ Name : "clear-base-bdev-faulty-state" ,
279
+ Usage : "clear the faulty state of a base bdev" ,
280
+ ArgsUsage : "<BASE BDEV NAME>" ,
281
+ Action : func (c * cli.Context ) {
282
+ if c .NArg () != 1 {
283
+ logrus .Fatal ("BASE BDEV NAME argument required" )
284
+ }
285
+ if err := bdevRaidClearBaseBdevFaultyState (c ); err != nil {
286
+ logrus .WithError (err ).Fatalf ("Failed to run clear base bdev faulty state to raid command" )
287
+ }
288
+ },
289
+ }
290
+ }
291
+
292
+ func bdevRaidClearBaseBdevFaultyState (c * cli.Context ) error {
293
+ spdkCli , err := client .NewClient (context .Background ())
294
+ if err != nil {
295
+ return err
296
+ }
297
+
298
+ cleared , err := spdkCli .BdevRaidClearBaseBdevFaultyState (c .Args ().First ())
299
+ if err != nil {
300
+ return err
301
+ }
302
+
303
+ return util .PrintObject (cleared )
304
+ }
0 commit comments