Skip to content

Commit 3d8f848

Browse files
authored
DAOS-18201 control: Allow bracketed strings in CreateRankSet (#17124)
Signed-off-by: Tom Nabarro <thomas.nabarro@hpe.com>
1 parent e837088 commit 3d8f848

3 files changed

Lines changed: 60 additions & 11 deletions

File tree

src/control/lib/ranklist/ranklist.go

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ func init() {
2525
}
2626
}
2727

28-
func fixBrackets(stringRanks string, remove bool) string {
29-
if remove {
30-
return strings.Trim(stringRanks, "[]")
31-
}
32-
28+
func addBrackets(stringRanks string) string {
3329
if !strings.HasPrefix(stringRanks, "[") {
3430
stringRanks = "[" + stringRanks
3531
}
@@ -40,6 +36,10 @@ func fixBrackets(stringRanks string, remove bool) string {
4036
return stringRanks
4137
}
4238

39+
func removeBrackets(stringRanks string) string {
40+
return strings.Trim(stringRanks, "[]")
41+
}
42+
4343
// RankList provides convenience methods for working with Rank slices.
4444
type RankList []Rank
4545

@@ -65,7 +65,7 @@ func (rs *RankSet) String() string {
6565
if rs == nil || rs.ns == nil {
6666
return ""
6767
}
68-
return fixBrackets(rs.ns.String(), true)
68+
return removeBrackets(rs.ns.String())
6969
}
7070

7171
// RangedString returns a ranged string representation of the RankSet.
@@ -201,14 +201,11 @@ func MustCreateRankSet(stringRanks string) *RankSet {
201201
func CreateRankSet(stringRanks string) (*RankSet, error) {
202202
rs := NewRankSet()
203203

204-
if len(stringRanks) < 1 {
204+
if len(removeBrackets(stringRanks)) < 1 {
205205
return rs, nil
206206
}
207207

208-
stringRanks = fixBrackets(stringRanks, false)
209-
210-
// add enclosing brackets to input so CreateSet works without hostnames
211-
ns, err := hostlist.CreateNumericSet(stringRanks)
208+
ns, err := hostlist.CreateNumericSet(addBrackets(stringRanks))
212209
if err != nil {
213210
return nil, err
214211
}

src/control/lib/ranklist/ranklist_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,22 @@ func TestRanklist_RankSet(t *testing.T) {
3131
expCount: 0,
3232
expRanks: []Rank{},
3333
},
34+
"empty bracketed start list": {
35+
ranks: "[]",
36+
expOut: "",
37+
expCount: 0,
38+
expRanks: []Rank{},
39+
},
3440
"invalid with hostnames": {
3541
ranks: "node2-1,node1-2.suffix1,node1-[45,47].suffix2,node3,node1-3",
3642
expErr: errors.New("unexpected alphabetic character(s)"),
3743
},
44+
"simple bracketed ranged rank list": {
45+
ranks: "[0-10]",
46+
expOut: "0-10",
47+
expCount: 11,
48+
expRanks: []Rank{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10},
49+
},
3850
"simple ranged rank list": {
3951
ranks: "0-10",
4052
expOut: "0-10",

src/control/server/mgmt_system_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -595,6 +595,46 @@ func TestServer_MgmtSvc_getPoolRanks(t *testing.T) {
595595
},
596596
expDrpcCount: 2,
597597
},
598+
"two pools; bracketed zero disabled ranks": {
599+
pools: []string{test.MockUUID(1), test.MockUUID(2)},
600+
inRanks: ranklist.MustCreateRankSet("1,8"),
601+
getEnabled: false,
602+
drpcResps: []*mockDrpcResponse{
603+
&mockDrpcResponse{
604+
Message: &mgmtpb.PoolQueryResp{
605+
EnabledRanks: "0-4",
606+
DisabledRanks: "[]",
607+
},
608+
},
609+
&mockDrpcResponse{
610+
Message: &mgmtpb.PoolQueryResp{
611+
EnabledRanks: "1-7",
612+
DisabledRanks: "[]",
613+
},
614+
},
615+
},
616+
expDrpcCount: 2,
617+
},
618+
"two pools; bracketed zero enabled ranks": {
619+
pools: []string{test.MockUUID(1), test.MockUUID(2)},
620+
inRanks: ranklist.MustCreateRankSet("1,8"),
621+
getEnabled: true,
622+
drpcResps: []*mockDrpcResponse{
623+
&mockDrpcResponse{
624+
Message: &mgmtpb.PoolQueryResp{
625+
EnabledRanks: "[]",
626+
DisabledRanks: "0-4",
627+
},
628+
},
629+
&mockDrpcResponse{
630+
Message: &mgmtpb.PoolQueryResp{
631+
EnabledRanks: "[]",
632+
DisabledRanks: "1-7",
633+
},
634+
},
635+
},
636+
expDrpcCount: 2,
637+
},
598638
"match zero ranks; two pools": {
599639
pools: []string{test.MockUUID(1), test.MockUUID(2)},
600640
inRanks: ranklist.MustCreateRankSet("8-10"),

0 commit comments

Comments
 (0)