aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJon Marius Venstad <jonmv@users.noreply.github.com>2022-02-03 12:51:51 +0100
committerGitHub <noreply@github.com>2022-02-03 12:51:51 +0100
commit004f57dac0571a359b070f0e7cdcdd15b2fbdedc (patch)
tree4647e544c92d7dabc0e5299edd8ab21fa9f7ac37
parentf21a45f3217015a6da8a0281441ba33688fc832e (diff)
parent1b749c4117c9b2b470e49469f781cfe1ca976f81 (diff)
Merge pull request #21049 from vespa-engine/mpolden/resource-range
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) {