aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2022-02-03 11:20:17 +0100
committerMartin Polden <mpolden@mpolden.no>2022-02-03 11:23:03 +0100
commit1b749c4117c9b2b470e49469f781cfe1ca976f81 (patch)
treeed24485e8ca84cf889775452697a42a6d1123833
parent756ab78df5287519fa220982685d6335f19a54e1 (diff)
Handle node resource ranges
-rw-r--r--client/go/vespa/xml/config.go21
-rw-r--r--client/go/vespa/xml/config_test.go1
2 files changed, 21 insertions, 1 deletions
diff --git a/client/go/vespa/xml/config.go b/client/go/vespa/xml/config.go
index 3243764fd3e..f1c598bec05 100644
--- a/client/go/vespa/xml/config.go
+++ b/client/go/vespa/xml/config.go
@@ -148,7 +148,26 @@ func Regions(names ...string) []Region {
// ParseResources parses nodes resources from string s.
func ParseResources(s string) (Resources, error) {
- parts := strings.Split(s, ",")
+ var parts []string
+ inRange := false
+ var sb strings.Builder
+ for _, c := range s {
+ if inRange {
+ if c == ']' {
+ inRange = false
+ }
+ } else {
+ if c == '[' {
+ inRange = true
+ } else if c == ',' {
+ parts = append(parts, sb.String())
+ sb.Reset()
+ continue
+ }
+ }
+ sb.WriteRune(c)
+ }
+ parts = append(parts, sb.String())
if len(parts) != 3 {
return Resources{}, fmt.Errorf("invalid resources: %q", s)
}
diff --git a/client/go/vespa/xml/config_test.go b/client/go/vespa/xml/config_test.go
index 299bfd372f7..0c94285a6e1 100644
--- a/client/go/vespa/xml/config_test.go
+++ b/client/go/vespa/xml/config_test.go
@@ -248,6 +248,7 @@ func TestParseResources(t *testing.T) {
assertResources(t, "memory=4Gb,vcpu=2,disk=100Gb", Resources{}, true)
assertResources(t, "vcpu=2,memory=4Gb,disk=100Gb", Resources{Vcpu: "2", Memory: "4Gb", Disk: "100Gb"}, false)
assertResources(t, " vcpu = 4, memory =8Gb, disk=500Gb ", Resources{Vcpu: "4", Memory: "8Gb", Disk: "500Gb"}, false)
+ assertResources(t, "vcpu=[2.5, 8],memory=[32Gb,150Gb],disk=[100Gb, 1Tb]", Resources{Vcpu: "[2.5, 8]", Memory: "[32Gb,150Gb]", Disk: "[100Gb, 1Tb]"}, false)
}
func TestParseNodeCount(t *testing.T) {