diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index f9c6701..2b93aff 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -19,7 +19,17 @@ RUN wget https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz && tar -xvf go${G mv go /usr/local && rm go${GO_VERSION}.linux-amd64.tar.gz ENV PATH=$PATH:/usr/local/go/bin:/home/vscode/go/bin -RUN git clone https://github.com/flux-framework/flux-sched /opt/flux-sched +# Testing grow/shrink from custom branch +RUN git clone -b debug-resource-error-messages https://github.com/researchapps/flux-sched /opt/flux-sched +# RUN git clone https://github.com/flux-framework/flux-sched /opt/flux-sched + +# We also need to rebuild into the system install +# TODO remove this when it is added to production container +ENV FLUX_SCHED_VERSION=0.39.0 +RUN cd /opt/flux-sched && \ + cmake -B build && \ + make -C build && \ + make -C build install # Add the group and user that match our ids RUN groupadd -g ${USER_GID} ${USERNAME} && \ diff --git a/Makefile b/Makefile index 4cd5472..7fe5586 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,7 @@ HERE ?= $(shell pwd) LOCALBIN ?= $(shell pwd)/bin JGF ?= $(HERE)/cmd/test/data/tiny.json +GROWJGF ?= $(HERE)/cmd/test/data/grow/new-nodes.json JOBSPECS ?= $(HERE)/cmd/test/data/jobspecs # This assumes a build in the .devcontainer Dockerfile environment @@ -27,8 +28,8 @@ test-modules: go test -v ./pkg/types .PHONY: test-binary -test-binary: - LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(LOCALBIN)/test --jgf=$(JGF) --jobspec=$(JOBSPECS)/test001.yaml +test-binary: build + LD_LIBRARY_PATH=$(LD_LIBRARY_PATH) $(LOCALBIN)/test --jgf=$(JGF) --grow=$(GROWJGF) --jobspec=$(JOBSPECS) # test001_desc="match allocate 1 slot: 1 socket: 1 core (pol=default)" # test_expect_success "${test001_desc}" ' diff --git a/cmd/test/data/grow/new-nodes.json b/cmd/test/data/grow/new-nodes.json new file mode 100644 index 0000000..cd0cfdc --- /dev/null +++ b/cmd/test/data/grow/new-nodes.json @@ -0,0 +1,97 @@ +{ + "graph": { + "nodes": [ + { + "id": "0", + "metadata": { + "type": "cluster", + "basename": "tiny", + "name": "tiny0", + "id": 0, + "uniq_id": 0, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0" + } + } + }, + { + "id": "1", + "metadata": { + "type": "rack", + "basename": "rack", + "name": "rack0", + "id": 0, + "uniq_id": 1, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0" + } + } + }, + { + "id": "100", + "metadata": { + "type": "node", + "basename": "node", + "name": "node2", + "id": 100, + "uniq_id": 100, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node2" + } + } + }, + { + "id": "101", + "metadata": { + "type": "node", + "basename": "node", + "name": "node3", + "id": 101, + "uniq_id": 101, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node3" + } + } + } + ], + "edges": [ + { + "source": "0", + "target": "1", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "1", + "target": "100", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "1", + "target": "101", + "metadata": { + "subsystem": "containment" + } + } + ] + } +} \ No newline at end of file diff --git a/cmd/test/data/jobspecs/grow.yaml b/cmd/test/data/jobspecs/grow.yaml new file mode 100644 index 0000000..7ee54b6 --- /dev/null +++ b/cmd/test/data/jobspecs/grow.yaml @@ -0,0 +1,21 @@ +version: 9999 +resources: + - type: cluster + count: 1 + with: + - type: rack + count: 1 + with: + - type: node + count: 4 + +# a comment +attributes: + system: + duration: 3600 +tasks: + - command: [ "app" ] + slot: default + count: + per_slot: 1 + diff --git a/cmd/test/data/tiny.json b/cmd/test/data/tiny.json index d138235..9666bf5 100644 --- a/cmd/test/data/tiny.json +++ b/cmd/test/data/tiny.json @@ -1,3490 +1,2401 @@ { "graph": { - "nodes": [ - { - "id": "0", - "metadata": { - "type": "cluster", - "basename": "tiny", - "name": "tiny0", - "id": 0, - "uniq_id": 0, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0" - } - } - }, - { - "id": "1", - "metadata": { - "type": "rack", - "basename": "rack", - "name": "rack0", - "id": 0, - "uniq_id": 1, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0" - } - } - }, - { - "id": "2", - "metadata": { - "type": "node", - "basename": "node", - "name": "node0", - "id": 0, - "uniq_id": 2, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0" - } - } - }, - { - "id": "3", - "metadata": { - "type": "node", - "basename": "node", - "name": "node1", - "id": 1, - "uniq_id": 3, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1" - } - } - }, - { - "id": "4", - "metadata": { - "type": "socket", - "basename": "socket", - "name": "socket0", - "id": 0, - "uniq_id": 4, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0" - } - } - }, - { - "id": "5", - "metadata": { - "type": "socket", - "basename": "socket", - "name": "socket1", - "id": 1, - "uniq_id": 5, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1" - } - } - }, - { - "id": "6", - "metadata": { - "type": "socket", - "basename": "socket", - "name": "socket0", - "id": 0, - "uniq_id": 6, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0" - } - } - }, - { - "id": "7", - "metadata": { - "type": "socket", - "basename": "socket", - "name": "socket1", - "id": 1, - "uniq_id": 7, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1" - } - } - }, - { - "id": "8", - "metadata": { - "type": "core", - "basename": "core", - "name": "core0", - "id": 0, - "uniq_id": 8, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core0" - } - } - }, - { - "id": "9", - "metadata": { - "type": "core", - "basename": "core", - "name": "core1", - "id": 1, - "uniq_id": 9, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core1" - } - } - }, - { - "id": "10", - "metadata": { - "type": "core", - "basename": "core", - "name": "core2", - "id": 2, - "uniq_id": 10, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core2" - } - } - }, - { - "id": "11", - "metadata": { - "type": "core", - "basename": "core", - "name": "core3", - "id": 3, - "uniq_id": 11, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core3" - } - } - }, - { - "id": "12", - "metadata": { - "type": "core", - "basename": "core", - "name": "core4", - "id": 4, - "uniq_id": 12, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core4" - } - } - }, - { - "id": "13", - "metadata": { - "type": "core", - "basename": "core", - "name": "core5", - "id": 5, - "uniq_id": 13, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core5" - } - } - }, - { - "id": "14", - "metadata": { - "type": "core", - "basename": "core", - "name": "core6", - "id": 6, - "uniq_id": 14, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core6" - } - } - }, - { - "id": "15", - "metadata": { - "type": "core", - "basename": "core", - "name": "core7", - "id": 7, - "uniq_id": 15, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core7" - } - } - }, - { - "id": "16", - "metadata": { - "type": "core", - "basename": "core", - "name": "core8", - "id": 8, - "uniq_id": 16, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core8" - } - } - }, - { - "id": "17", - "metadata": { - "type": "core", - "basename": "core", - "name": "core9", - "id": 9, - "uniq_id": 17, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core9" - } - } - }, - { - "id": "18", - "metadata": { - "type": "core", - "basename": "core", - "name": "core10", - "id": 10, - "uniq_id": 18, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core10" - } - } - }, - { - "id": "19", - "metadata": { - "type": "core", - "basename": "core", - "name": "core11", - "id": 11, - "uniq_id": 19, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core11" - } - } - }, - { - "id": "20", - "metadata": { - "type": "core", - "basename": "core", - "name": "core12", - "id": 12, - "uniq_id": 20, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core12" - } - } - }, - { - "id": "21", - "metadata": { - "type": "core", - "basename": "core", - "name": "core13", - "id": 13, - "uniq_id": 21, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core13" - } - } - }, - { - "id": "22", - "metadata": { - "type": "core", - "basename": "core", - "name": "core14", - "id": 14, - "uniq_id": 22, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core14" - } - } - }, - { - "id": "23", - "metadata": { - "type": "core", - "basename": "core", - "name": "core15", - "id": 15, - "uniq_id": 23, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core15" - } - } - }, - { - "id": "24", - "metadata": { - "type": "core", - "basename": "core", - "name": "core16", - "id": 16, - "uniq_id": 24, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core16" - } - } - }, - { - "id": "25", - "metadata": { - "type": "core", - "basename": "core", - "name": "core17", - "id": 17, - "uniq_id": 25, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/core17" - } - } - }, - { - "id": "26", - "metadata": { - "type": "core", - "basename": "core", - "name": "core18", - "id": 18, - "uniq_id": 26, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core18" - } - } - }, - { - "id": "27", - "metadata": { - "type": "core", - "basename": "core", - "name": "core19", - "id": 19, - "uniq_id": 27, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core19" - } - } - }, - { - "id": "28", - "metadata": { - "type": "core", - "basename": "core", - "name": "core20", - "id": 20, - "uniq_id": 28, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core20" - } - } - }, - { - "id": "29", - "metadata": { - "type": "core", - "basename": "core", - "name": "core21", - "id": 21, - "uniq_id": 29, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core21" - } - } - }, - { - "id": "30", - "metadata": { - "type": "core", - "basename": "core", - "name": "core22", - "id": 22, - "uniq_id": 30, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core22" - } - } - }, - { - "id": "31", - "metadata": { - "type": "core", - "basename": "core", - "name": "core23", - "id": 23, - "uniq_id": 31, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core23" - } - } - }, - { - "id": "32", - "metadata": { - "type": "core", - "basename": "core", - "name": "core24", - "id": 24, - "uniq_id": 32, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core24" - } - } - }, - { - "id": "33", - "metadata": { - "type": "core", - "basename": "core", - "name": "core25", - "id": 25, - "uniq_id": 33, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core25" - } - } - }, - { - "id": "34", - "metadata": { - "type": "core", - "basename": "core", - "name": "core26", - "id": 26, - "uniq_id": 34, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core26" - } - } - }, - { - "id": "35", - "metadata": { - "type": "core", - "basename": "core", - "name": "core27", - "id": 27, - "uniq_id": 35, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core27" - } - } - }, - { - "id": "36", - "metadata": { - "type": "core", - "basename": "core", - "name": "core28", - "id": 28, - "uniq_id": 36, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core28" - } - } - }, - { - "id": "37", - "metadata": { - "type": "core", - "basename": "core", - "name": "core29", - "id": 29, - "uniq_id": 37, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core29" - } - } - }, - { - "id": "38", - "metadata": { - "type": "core", - "basename": "core", - "name": "core30", - "id": 30, - "uniq_id": 38, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core30" - } - } - }, - { - "id": "39", - "metadata": { - "type": "core", - "basename": "core", - "name": "core31", - "id": 31, - "uniq_id": 39, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core31" - } - } - }, - { - "id": "40", - "metadata": { - "type": "core", - "basename": "core", - "name": "core32", - "id": 32, - "uniq_id": 40, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core32" - } - } - }, - { - "id": "41", - "metadata": { - "type": "core", - "basename": "core", - "name": "core33", - "id": 33, - "uniq_id": 41, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core33" - } - } - }, - { - "id": "42", - "metadata": { - "type": "core", - "basename": "core", - "name": "core34", - "id": 34, - "uniq_id": 42, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core34" - } - } - }, - { - "id": "43", - "metadata": { - "type": "core", - "basename": "core", - "name": "core35", - "id": 35, - "uniq_id": 43, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/core35" - } - } - }, - { - "id": "44", - "metadata": { - "type": "core", - "basename": "core", - "name": "core0", - "id": 0, - "uniq_id": 44, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core0" - } - } - }, - { - "id": "45", - "metadata": { - "type": "core", - "basename": "core", - "name": "core1", - "id": 1, - "uniq_id": 45, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core1" - } - } - }, - { - "id": "46", - "metadata": { - "type": "core", - "basename": "core", - "name": "core2", - "id": 2, - "uniq_id": 46, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core2" - } - } - }, - { - "id": "47", - "metadata": { - "type": "core", - "basename": "core", - "name": "core3", - "id": 3, - "uniq_id": 47, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core3" - } - } - }, - { - "id": "48", - "metadata": { - "type": "core", - "basename": "core", - "name": "core4", - "id": 4, - "uniq_id": 48, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core4" - } - } - }, - { - "id": "49", - "metadata": { - "type": "core", - "basename": "core", - "name": "core5", - "id": 5, - "uniq_id": 49, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core5" - } - } - }, - { - "id": "50", - "metadata": { - "type": "core", - "basename": "core", - "name": "core6", - "id": 6, - "uniq_id": 50, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core6" - } - } - }, - { - "id": "51", - "metadata": { - "type": "core", - "basename": "core", - "name": "core7", - "id": 7, - "uniq_id": 51, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core7" - } - } - }, - { - "id": "52", - "metadata": { - "type": "core", - "basename": "core", - "name": "core8", - "id": 8, - "uniq_id": 52, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core8" - } - } - }, - { - "id": "53", - "metadata": { - "type": "core", - "basename": "core", - "name": "core9", - "id": 9, - "uniq_id": 53, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core9" - } - } - }, - { - "id": "54", - "metadata": { - "type": "core", - "basename": "core", - "name": "core10", - "id": 10, - "uniq_id": 54, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core10" - } - } - }, - { - "id": "55", - "metadata": { - "type": "core", - "basename": "core", - "name": "core11", - "id": 11, - "uniq_id": 55, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core11" - } - } - }, - { - "id": "56", - "metadata": { - "type": "core", - "basename": "core", - "name": "core12", - "id": 12, - "uniq_id": 56, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core12" - } - } - }, - { - "id": "57", - "metadata": { - "type": "core", - "basename": "core", - "name": "core13", - "id": 13, - "uniq_id": 57, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core13" - } - } - }, - { - "id": "58", - "metadata": { - "type": "core", - "basename": "core", - "name": "core14", - "id": 14, - "uniq_id": 58, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core14" - } - } - }, - { - "id": "59", - "metadata": { - "type": "core", - "basename": "core", - "name": "core15", - "id": 15, - "uniq_id": 59, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core15" - } - } - }, - { - "id": "60", - "metadata": { - "type": "core", - "basename": "core", - "name": "core16", - "id": 16, - "uniq_id": 60, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core16" - } - } - }, - { - "id": "61", - "metadata": { - "type": "core", - "basename": "core", - "name": "core17", - "id": 17, - "uniq_id": 61, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/core17" - } - } - }, - { - "id": "62", - "metadata": { - "type": "core", - "basename": "core", - "name": "core18", - "id": 18, - "uniq_id": 62, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core18" - } - } - }, - { - "id": "63", - "metadata": { - "type": "core", - "basename": "core", - "name": "core19", - "id": 19, - "uniq_id": 63, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core19" - } - } - }, - { - "id": "64", - "metadata": { - "type": "core", - "basename": "core", - "name": "core20", - "id": 20, - "uniq_id": 64, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core20" - } - } - }, - { - "id": "65", - "metadata": { - "type": "core", - "basename": "core", - "name": "core21", - "id": 21, - "uniq_id": 65, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core21" - } - } - }, - { - "id": "66", - "metadata": { - "type": "core", - "basename": "core", - "name": "core22", - "id": 22, - "uniq_id": 66, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core22" - } - } - }, - { - "id": "67", - "metadata": { - "type": "core", - "basename": "core", - "name": "core23", - "id": 23, - "uniq_id": 67, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core23" - } - } - }, - { - "id": "68", - "metadata": { - "type": "core", - "basename": "core", - "name": "core24", - "id": 24, - "uniq_id": 68, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core24" - } - } - }, - { - "id": "69", - "metadata": { - "type": "core", - "basename": "core", - "name": "core25", - "id": 25, - "uniq_id": 69, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core25" - } - } - }, - { - "id": "70", - "metadata": { - "type": "core", - "basename": "core", - "name": "core26", - "id": 26, - "uniq_id": 70, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core26" - } - } - }, - { - "id": "71", - "metadata": { - "type": "core", - "basename": "core", - "name": "core27", - "id": 27, - "uniq_id": 71, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core27" - } - } - }, - { - "id": "72", - "metadata": { - "type": "core", - "basename": "core", - "name": "core28", - "id": 28, - "uniq_id": 72, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core28" - } - } - }, - { - "id": "73", - "metadata": { - "type": "core", - "basename": "core", - "name": "core29", - "id": 29, - "uniq_id": 73, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core29" - } - } - }, - { - "id": "74", - "metadata": { - "type": "core", - "basename": "core", - "name": "core30", - "id": 30, - "uniq_id": 74, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core30" - } - } - }, - { - "id": "75", - "metadata": { - "type": "core", - "basename": "core", - "name": "core31", - "id": 31, - "uniq_id": 75, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core31" - } - } - }, - { - "id": "76", - "metadata": { - "type": "core", - "basename": "core", - "name": "core32", - "id": 32, - "uniq_id": 76, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core32" - } - } - }, - { - "id": "77", - "metadata": { - "type": "core", - "basename": "core", - "name": "core33", - "id": 33, - "uniq_id": 77, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core33" - } - } - }, - { - "id": "78", - "metadata": { - "type": "core", - "basename": "core", - "name": "core34", - "id": 34, - "uniq_id": 78, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core34" - } - } - }, - { - "id": "79", - "metadata": { - "type": "core", - "basename": "core", - "name": "core35", - "id": 35, - "uniq_id": 79, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/core35" - } - } - }, - { - "id": "80", - "metadata": { - "type": "gpu", - "basename": "gpu", - "name": "gpu0", - "id": 0, - "uniq_id": 80, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/gpu0" - } - } - }, - { - "id": "81", - "metadata": { - "type": "gpu", - "basename": "gpu", - "name": "gpu1", - "id": 1, - "uniq_id": 81, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/gpu1" - } - } - }, - { - "id": "82", - "metadata": { - "type": "gpu", - "basename": "gpu", - "name": "gpu0", - "id": 0, - "uniq_id": 82, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/gpu0" - } - } - }, - { - "id": "83", - "metadata": { - "type": "gpu", - "basename": "gpu", - "name": "gpu1", - "id": 1, - "uniq_id": 83, - "rank": -1, - "exclusive": false, - "unit": "", - "size": 1, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/gpu1" - } - } - }, - { - "id": "84", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory0", - "id": 0, - "uniq_id": 84, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/memory0" - } - } - }, - { - "id": "85", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory1", - "id": 1, - "uniq_id": 85, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/memory1" - } - } - }, - { - "id": "86", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory2", - "id": 2, - "uniq_id": 86, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/memory2" - } - } - }, - { - "id": "87", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory3", - "id": 3, - "uniq_id": 87, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket0/memory3" - } - } - }, - { - "id": "88", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory4", - "id": 4, - "uniq_id": 88, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/memory4" - } - } - }, - { - "id": "89", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory5", - "id": 5, - "uniq_id": 89, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/memory5" - } - } - }, - { - "id": "90", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory6", - "id": 6, - "uniq_id": 90, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/memory6" - } - } - }, - { - "id": "91", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory7", - "id": 7, - "uniq_id": 91, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node0/socket1/memory7" - } - } - }, - { - "id": "92", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory0", - "id": 0, - "uniq_id": 92, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/memory0" - } - } - }, - { - "id": "93", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory1", - "id": 1, - "uniq_id": 93, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/memory1" - } - } - }, - { - "id": "94", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory2", - "id": 2, - "uniq_id": 94, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/memory2" - } - } - }, - { - "id": "95", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory3", - "id": 3, - "uniq_id": 95, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket0/memory3" - } - } - }, - { - "id": "96", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory4", - "id": 4, - "uniq_id": 96, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/memory4" - } - } - }, - { - "id": "97", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory5", - "id": 5, - "uniq_id": 97, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/memory5" - } - } - }, - { - "id": "98", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory6", - "id": 6, - "uniq_id": 98, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/memory6" - } - } - }, - { - "id": "99", - "metadata": { - "type": "memory", - "basename": "memory", - "name": "memory7", - "id": 7, - "uniq_id": 99, - "rank": -1, - "exclusive": false, - "unit": "GB", - "size": 2, - "paths": { - "containment": "/tiny0/rack0/node1/socket1/memory7" - } - } - } - ], - "edges": [ - { - "source": "0", - "target": "1", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "1", - "target": "0", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "1", - "target": "2", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "1", - "target": "3", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "2", - "target": "1", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "2", - "target": "4", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "2", - "target": "5", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "3", - "target": "1", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "3", - "target": "6", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "3", - "target": "7", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "2", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "4", - "target": "8", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "9", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "10", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "11", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "12", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "13", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "14", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "15", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "16", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "17", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "18", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "19", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "20", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "21", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "22", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "23", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "24", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "25", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "80", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "84", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "85", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "86", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "4", - "target": "87", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "2", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "5", - "target": "26", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "27", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "28", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "29", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "30", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "31", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "32", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "33", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "34", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "35", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "36", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "37", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "38", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "39", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "40", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "41", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "42", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "43", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "81", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "88", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "89", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "90", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "5", - "target": "91", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "3", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "6", - "target": "44", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "45", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "46", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "47", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "48", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "49", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "50", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "51", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "52", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "53", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "54", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "55", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "56", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "57", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "58", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "59", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "60", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "61", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "82", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "92", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "93", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "94", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "6", - "target": "95", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "3", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "7", - "target": "62", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "63", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "64", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "65", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "66", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "67", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "68", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "69", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "70", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "71", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "72", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "73", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "74", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "75", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "76", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "77", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "78", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "79", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "83", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "96", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "97", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "98", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "7", - "target": "99", - "metadata": { - "name": { - "containment": "contains" - } - } - }, - { - "source": "8", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "9", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "10", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "11", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "12", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "13", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "14", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "15", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "16", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "17", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "18", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "19", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "20", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "21", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "22", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "23", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "24", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "25", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "26", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "27", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "28", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "29", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "30", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "31", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "32", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "33", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "34", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "35", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "36", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "37", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "38", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "39", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "40", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "41", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "42", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "43", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "44", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "45", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "46", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "47", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "48", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "49", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "50", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "51", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "52", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "53", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "54", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "55", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "56", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "57", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "58", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "59", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "60", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "61", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "62", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "63", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "64", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "65", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "66", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "67", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "68", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "69", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "70", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "71", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "72", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "73", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "74", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "75", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "76", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "77", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "78", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "79", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "80", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "81", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "82", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "83", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "84", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "85", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "86", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "87", - "target": "4", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "88", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "89", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "90", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "91", - "target": "5", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "92", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "93", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "94", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "95", - "target": "6", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "96", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "97", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "98", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - }, - { - "source": "99", - "target": "7", - "metadata": { - "name": { - "containment": "in" - } - } - } - ] + "nodes": [ + { + "id": "0", + "metadata": { + "type": "cluster", + "basename": "tiny", + "name": "tiny0", + "id": 0, + "uniq_id": 0, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0" + } + } + }, + { + "id": "1", + "metadata": { + "type": "rack", + "basename": "rack", + "name": "rack0", + "id": 0, + "uniq_id": 1, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0" + } + } + }, + { + "id": "2", + "metadata": { + "type": "node", + "basename": "node", + "name": "node0", + "id": 0, + "uniq_id": 2, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0" + } + } + }, + { + "id": "3", + "metadata": { + "type": "node", + "basename": "node", + "name": "node1", + "id": 1, + "uniq_id": 3, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1" + } + } + }, + { + "id": "4", + "metadata": { + "type": "socket", + "basename": "socket", + "name": "socket0", + "id": 0, + "uniq_id": 4, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0" + } + } + }, + { + "id": "5", + "metadata": { + "type": "socket", + "basename": "socket", + "name": "socket1", + "id": 1, + "uniq_id": 5, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1" + } + } + }, + { + "id": "6", + "metadata": { + "type": "socket", + "basename": "socket", + "name": "socket0", + "id": 0, + "uniq_id": 6, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0" + } + } + }, + { + "id": "7", + "metadata": { + "type": "socket", + "basename": "socket", + "name": "socket1", + "id": 1, + "uniq_id": 7, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1" + } + } + }, + { + "id": "8", + "metadata": { + "type": "core", + "basename": "core", + "name": "core0", + "id": 0, + "uniq_id": 8, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core0" + } + } + }, + { + "id": "9", + "metadata": { + "type": "core", + "basename": "core", + "name": "core1", + "id": 1, + "uniq_id": 9, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core1" + } + } + }, + { + "id": "10", + "metadata": { + "type": "core", + "basename": "core", + "name": "core2", + "id": 2, + "uniq_id": 10, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core2" + } + } + }, + { + "id": "11", + "metadata": { + "type": "core", + "basename": "core", + "name": "core3", + "id": 3, + "uniq_id": 11, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core3" + } + } + }, + { + "id": "12", + "metadata": { + "type": "core", + "basename": "core", + "name": "core4", + "id": 4, + "uniq_id": 12, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core4" + } + } + }, + { + "id": "13", + "metadata": { + "type": "core", + "basename": "core", + "name": "core5", + "id": 5, + "uniq_id": 13, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core5" + } + } + }, + { + "id": "14", + "metadata": { + "type": "core", + "basename": "core", + "name": "core6", + "id": 6, + "uniq_id": 14, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core6" + } + } + }, + { + "id": "15", + "metadata": { + "type": "core", + "basename": "core", + "name": "core7", + "id": 7, + "uniq_id": 15, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core7" + } + } + }, + { + "id": "16", + "metadata": { + "type": "core", + "basename": "core", + "name": "core8", + "id": 8, + "uniq_id": 16, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core8" + } + } + }, + { + "id": "17", + "metadata": { + "type": "core", + "basename": "core", + "name": "core9", + "id": 9, + "uniq_id": 17, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core9" + } + } + }, + { + "id": "18", + "metadata": { + "type": "core", + "basename": "core", + "name": "core10", + "id": 10, + "uniq_id": 18, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core10" + } + } + }, + { + "id": "19", + "metadata": { + "type": "core", + "basename": "core", + "name": "core11", + "id": 11, + "uniq_id": 19, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core11" + } + } + }, + { + "id": "20", + "metadata": { + "type": "core", + "basename": "core", + "name": "core12", + "id": 12, + "uniq_id": 20, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core12" + } + } + }, + { + "id": "21", + "metadata": { + "type": "core", + "basename": "core", + "name": "core13", + "id": 13, + "uniq_id": 21, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core13" + } + } + }, + { + "id": "22", + "metadata": { + "type": "core", + "basename": "core", + "name": "core14", + "id": 14, + "uniq_id": 22, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core14" + } + } + }, + { + "id": "23", + "metadata": { + "type": "core", + "basename": "core", + "name": "core15", + "id": 15, + "uniq_id": 23, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core15" + } + } + }, + { + "id": "24", + "metadata": { + "type": "core", + "basename": "core", + "name": "core16", + "id": 16, + "uniq_id": 24, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core16" + } + } + }, + { + "id": "25", + "metadata": { + "type": "core", + "basename": "core", + "name": "core17", + "id": 17, + "uniq_id": 25, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/core17" + } + } + }, + { + "id": "26", + "metadata": { + "type": "core", + "basename": "core", + "name": "core18", + "id": 18, + "uniq_id": 26, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core18" + } + } + }, + { + "id": "27", + "metadata": { + "type": "core", + "basename": "core", + "name": "core19", + "id": 19, + "uniq_id": 27, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core19" + } + } + }, + { + "id": "28", + "metadata": { + "type": "core", + "basename": "core", + "name": "core20", + "id": 20, + "uniq_id": 28, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core20" + } + } + }, + { + "id": "29", + "metadata": { + "type": "core", + "basename": "core", + "name": "core21", + "id": 21, + "uniq_id": 29, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core21" + } + } + }, + { + "id": "30", + "metadata": { + "type": "core", + "basename": "core", + "name": "core22", + "id": 22, + "uniq_id": 30, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core22" + } + } + }, + { + "id": "31", + "metadata": { + "type": "core", + "basename": "core", + "name": "core23", + "id": 23, + "uniq_id": 31, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core23" + } + } + }, + { + "id": "32", + "metadata": { + "type": "core", + "basename": "core", + "name": "core24", + "id": 24, + "uniq_id": 32, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core24" + } + } + }, + { + "id": "33", + "metadata": { + "type": "core", + "basename": "core", + "name": "core25", + "id": 25, + "uniq_id": 33, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core25" + } + } + }, + { + "id": "34", + "metadata": { + "type": "core", + "basename": "core", + "name": "core26", + "id": 26, + "uniq_id": 34, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core26" + } + } + }, + { + "id": "35", + "metadata": { + "type": "core", + "basename": "core", + "name": "core27", + "id": 27, + "uniq_id": 35, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core27" + } + } + }, + { + "id": "36", + "metadata": { + "type": "core", + "basename": "core", + "name": "core28", + "id": 28, + "uniq_id": 36, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core28" + } + } + }, + { + "id": "37", + "metadata": { + "type": "core", + "basename": "core", + "name": "core29", + "id": 29, + "uniq_id": 37, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core29" + } + } + }, + { + "id": "38", + "metadata": { + "type": "core", + "basename": "core", + "name": "core30", + "id": 30, + "uniq_id": 38, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core30" + } + } + }, + { + "id": "39", + "metadata": { + "type": "core", + "basename": "core", + "name": "core31", + "id": 31, + "uniq_id": 39, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core31" + } + } + }, + { + "id": "40", + "metadata": { + "type": "core", + "basename": "core", + "name": "core32", + "id": 32, + "uniq_id": 40, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core32" + } + } + }, + { + "id": "41", + "metadata": { + "type": "core", + "basename": "core", + "name": "core33", + "id": 33, + "uniq_id": 41, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core33" + } + } + }, + { + "id": "42", + "metadata": { + "type": "core", + "basename": "core", + "name": "core34", + "id": 34, + "uniq_id": 42, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core34" + } + } + }, + { + "id": "43", + "metadata": { + "type": "core", + "basename": "core", + "name": "core35", + "id": 35, + "uniq_id": 43, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/core35" + } + } + }, + { + "id": "44", + "metadata": { + "type": "core", + "basename": "core", + "name": "core0", + "id": 0, + "uniq_id": 44, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core0" + } + } + }, + { + "id": "45", + "metadata": { + "type": "core", + "basename": "core", + "name": "core1", + "id": 1, + "uniq_id": 45, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core1" + } + } + }, + { + "id": "46", + "metadata": { + "type": "core", + "basename": "core", + "name": "core2", + "id": 2, + "uniq_id": 46, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core2" + } + } + }, + { + "id": "47", + "metadata": { + "type": "core", + "basename": "core", + "name": "core3", + "id": 3, + "uniq_id": 47, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core3" + } + } + }, + { + "id": "48", + "metadata": { + "type": "core", + "basename": "core", + "name": "core4", + "id": 4, + "uniq_id": 48, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core4" + } + } + }, + { + "id": "49", + "metadata": { + "type": "core", + "basename": "core", + "name": "core5", + "id": 5, + "uniq_id": 49, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core5" + } + } + }, + { + "id": "50", + "metadata": { + "type": "core", + "basename": "core", + "name": "core6", + "id": 6, + "uniq_id": 50, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core6" + } + } + }, + { + "id": "51", + "metadata": { + "type": "core", + "basename": "core", + "name": "core7", + "id": 7, + "uniq_id": 51, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core7" + } + } + }, + { + "id": "52", + "metadata": { + "type": "core", + "basename": "core", + "name": "core8", + "id": 8, + "uniq_id": 52, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core8" + } + } + }, + { + "id": "53", + "metadata": { + "type": "core", + "basename": "core", + "name": "core9", + "id": 9, + "uniq_id": 53, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core9" + } + } + }, + { + "id": "54", + "metadata": { + "type": "core", + "basename": "core", + "name": "core10", + "id": 10, + "uniq_id": 54, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core10" + } + } + }, + { + "id": "55", + "metadata": { + "type": "core", + "basename": "core", + "name": "core11", + "id": 11, + "uniq_id": 55, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core11" + } + } + }, + { + "id": "56", + "metadata": { + "type": "core", + "basename": "core", + "name": "core12", + "id": 12, + "uniq_id": 56, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core12" + } + } + }, + { + "id": "57", + "metadata": { + "type": "core", + "basename": "core", + "name": "core13", + "id": 13, + "uniq_id": 57, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core13" + } + } + }, + { + "id": "58", + "metadata": { + "type": "core", + "basename": "core", + "name": "core14", + "id": 14, + "uniq_id": 58, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core14" + } + } + }, + { + "id": "59", + "metadata": { + "type": "core", + "basename": "core", + "name": "core15", + "id": 15, + "uniq_id": 59, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core15" + } + } + }, + { + "id": "60", + "metadata": { + "type": "core", + "basename": "core", + "name": "core16", + "id": 16, + "uniq_id": 60, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core16" + } + } + }, + { + "id": "61", + "metadata": { + "type": "core", + "basename": "core", + "name": "core17", + "id": 17, + "uniq_id": 61, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/core17" + } + } + }, + { + "id": "62", + "metadata": { + "type": "core", + "basename": "core", + "name": "core18", + "id": 18, + "uniq_id": 62, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core18" + } + } + }, + { + "id": "63", + "metadata": { + "type": "core", + "basename": "core", + "name": "core19", + "id": 19, + "uniq_id": 63, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core19" + } + } + }, + { + "id": "64", + "metadata": { + "type": "core", + "basename": "core", + "name": "core20", + "id": 20, + "uniq_id": 64, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core20" + } + } + }, + { + "id": "65", + "metadata": { + "type": "core", + "basename": "core", + "name": "core21", + "id": 21, + "uniq_id": 65, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core21" + } + } + }, + { + "id": "66", + "metadata": { + "type": "core", + "basename": "core", + "name": "core22", + "id": 22, + "uniq_id": 66, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core22" + } + } + }, + { + "id": "67", + "metadata": { + "type": "core", + "basename": "core", + "name": "core23", + "id": 23, + "uniq_id": 67, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core23" + } + } + }, + { + "id": "68", + "metadata": { + "type": "core", + "basename": "core", + "name": "core24", + "id": 24, + "uniq_id": 68, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core24" + } + } + }, + { + "id": "69", + "metadata": { + "type": "core", + "basename": "core", + "name": "core25", + "id": 25, + "uniq_id": 69, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core25" + } + } + }, + { + "id": "70", + "metadata": { + "type": "core", + "basename": "core", + "name": "core26", + "id": 26, + "uniq_id": 70, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core26" + } + } + }, + { + "id": "71", + "metadata": { + "type": "core", + "basename": "core", + "name": "core27", + "id": 27, + "uniq_id": 71, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core27" + } + } + }, + { + "id": "72", + "metadata": { + "type": "core", + "basename": "core", + "name": "core28", + "id": 28, + "uniq_id": 72, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core28" + } + } + }, + { + "id": "73", + "metadata": { + "type": "core", + "basename": "core", + "name": "core29", + "id": 29, + "uniq_id": 73, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core29" + } + } + }, + { + "id": "74", + "metadata": { + "type": "core", + "basename": "core", + "name": "core30", + "id": 30, + "uniq_id": 74, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core30" + } + } + }, + { + "id": "75", + "metadata": { + "type": "core", + "basename": "core", + "name": "core31", + "id": 31, + "uniq_id": 75, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core31" + } + } + }, + { + "id": "76", + "metadata": { + "type": "core", + "basename": "core", + "name": "core32", + "id": 32, + "uniq_id": 76, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core32" + } + } + }, + { + "id": "77", + "metadata": { + "type": "core", + "basename": "core", + "name": "core33", + "id": 33, + "uniq_id": 77, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core33" + } + } + }, + { + "id": "78", + "metadata": { + "type": "core", + "basename": "core", + "name": "core34", + "id": 34, + "uniq_id": 78, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core34" + } + } + }, + { + "id": "79", + "metadata": { + "type": "core", + "basename": "core", + "name": "core35", + "id": 35, + "uniq_id": 79, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/core35" + } + } + }, + { + "id": "80", + "metadata": { + "type": "gpu", + "basename": "gpu", + "name": "gpu0", + "id": 0, + "uniq_id": 80, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/gpu0" + } + } + }, + { + "id": "81", + "metadata": { + "type": "gpu", + "basename": "gpu", + "name": "gpu1", + "id": 1, + "uniq_id": 81, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/gpu1" + } + } + }, + { + "id": "82", + "metadata": { + "type": "gpu", + "basename": "gpu", + "name": "gpu0", + "id": 0, + "uniq_id": 82, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/gpu0" + } + } + }, + { + "id": "83", + "metadata": { + "type": "gpu", + "basename": "gpu", + "name": "gpu1", + "id": 1, + "uniq_id": 83, + "rank": -1, + "exclusive": false, + "unit": "", + "size": 1, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/gpu1" + } + } + }, + { + "id": "84", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory0", + "id": 0, + "uniq_id": 84, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/memory0" + } + } + }, + { + "id": "85", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory1", + "id": 1, + "uniq_id": 85, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/memory1" + } + } + }, + { + "id": "86", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory2", + "id": 2, + "uniq_id": 86, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/memory2" + } + } + }, + { + "id": "87", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory3", + "id": 3, + "uniq_id": 87, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket0/memory3" + } + } + }, + { + "id": "88", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory4", + "id": 4, + "uniq_id": 88, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/memory4" + } + } + }, + { + "id": "89", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory5", + "id": 5, + "uniq_id": 89, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/memory5" + } + } + }, + { + "id": "90", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory6", + "id": 6, + "uniq_id": 90, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/memory6" + } + } + }, + { + "id": "91", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory7", + "id": 7, + "uniq_id": 91, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node0/socket1/memory7" + } + } + }, + { + "id": "92", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory0", + "id": 0, + "uniq_id": 92, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/memory0" + } + } + }, + { + "id": "93", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory1", + "id": 1, + "uniq_id": 93, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/memory1" + } + } + }, + { + "id": "94", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory2", + "id": 2, + "uniq_id": 94, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/memory2" + } + } + }, + { + "id": "95", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory3", + "id": 3, + "uniq_id": 95, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket0/memory3" + } + } + }, + { + "id": "96", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory4", + "id": 4, + "uniq_id": 96, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/memory4" + } + } + }, + { + "id": "97", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory5", + "id": 5, + "uniq_id": 97, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/memory5" + } + } + }, + { + "id": "98", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory6", + "id": 6, + "uniq_id": 98, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/memory6" + } + } + }, + { + "id": "99", + "metadata": { + "type": "memory", + "basename": "memory", + "name": "memory7", + "id": 7, + "uniq_id": 99, + "rank": -1, + "exclusive": false, + "unit": "GB", + "size": 2, + "paths": { + "containment": "/tiny0/rack0/node1/socket1/memory7" + } + } + } + ], + "edges": [ + { + "source": "0", + "target": "1", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "1", + "target": "2", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "1", + "target": "3", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "2", + "target": "4", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "2", + "target": "5", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "3", + "target": "6", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "3", + "target": "7", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "8", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "9", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "10", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "11", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "12", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "13", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "14", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "15", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "16", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "17", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "18", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "19", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "20", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "21", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "22", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "23", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "24", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "25", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "80", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "84", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "85", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "86", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "4", + "target": "87", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "26", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "27", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "28", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "29", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "30", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "31", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "32", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "33", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "34", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "35", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "36", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "37", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "38", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "39", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "40", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "41", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "42", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "43", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "81", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "88", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "89", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "90", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "5", + "target": "91", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "44", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "45", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "46", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "47", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "48", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "49", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "50", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "51", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "52", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "53", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "54", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "55", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "56", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "57", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "58", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "59", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "60", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "61", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "82", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "92", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "93", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "94", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "6", + "target": "95", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "62", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "63", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "64", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "65", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "66", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "67", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "68", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "69", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "70", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "71", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "72", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "73", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "74", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "75", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "76", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "77", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "78", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "79", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "83", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "96", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "97", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "98", + "metadata": { + "subsystem": "containment" + } + }, + { + "source": "7", + "target": "99", + "metadata": { + "subsystem": "containment" + } + } + ] } -} +} \ No newline at end of file diff --git a/cmd/test/test.go b/cmd/test/test.go index ca734a4..da7fb71 100644 --- a/cmd/test/test.go +++ b/cmd/test/test.go @@ -13,112 +13,166 @@ package main import ( "flag" "fmt" + "log" "os" + "path/filepath" "github.com/flux-framework/fluxion-go/pkg/fluxcli" "github.com/flux-framework/fluxion-go/pkg/types" ) +// readFile, panic and fail on error +func readFile(filename string) string { + content, err := os.ReadFile(filename) + if err != nil { + log.Fatal("Error reading JGF file") + } + return string(content) +} + +// checkErrors looks to see if the error is not an empty +// string. If not, we print it +func checkErrors(cli *fluxcli.ReapiClient) { + msg := cli.GetErrMsg() + if msg != "" { + fmt.Printf("Errors so far: %s\n", msg) + } +} + func main() { jgfPtr := flag.String("jgf", "", "path to jgf") - jobspecPtr := flag.String("jobspec", "", "path to jobspec") - reserve := false + jgfGrowPtr := flag.String("grow", "", "path to grow jgf") + jobspecPtr := flag.String("jobspec", "", "path to jobspecs") flag.Parse() - jgf, err := os.ReadFile(*jgfPtr) - if err != nil { - fmt.Println("Error reading JGF file") - return - } + // JobSpecs for testing: + // 1. Vanilla "hello world" from node down to core + jobspec := readFile(filepath.Join(*jobspecPtr, "test001.yaml")) + + // 4 nodes, will work after grow but not before it + growJobspec := readFile(filepath.Join(*jobspecPtr, "grow.yaml")) + + jgf := readFile(*jgfPtr) + growJgf := readFile(*jgfGrowPtr) + + // Client creation cli := fluxcli.NewReapiClient() - err = cli.InitContext(string(jgf), "{}") + err := cli.InitContext(jgf, "{}") if err != nil { - fmt.Printf("Error initializing jobspec context for ReapiClient: %v\n", err) - return + log.Fatalf("Error initializing jobspec context for ReapiClient: %v\n", err) } - fmt.Printf("Errors so far: %s\n", cli.GetErrMsg()) + checkErrors(cli) - jobspec, err := os.ReadFile(*jobspecPtr) - if err != nil { - fmt.Printf("Error reading jobspec file: %v\n", err) - return - } - fmt.Printf("Jobspec:\n %s\n", jobspec) + fmt.Printf(" Jobspec:\n %s\n", jobspec) + fmt.Printf("Grow Jobspec:\n %s\n", growJobspec) - reserved, allocated, at, overhead, jobid, err := cli.MatchAllocate(reserve, string(jobspec)) + // Match Allocate without and with reservation + reserve := false + reserved, allocated, at, overhead, jobid, err := cli.MatchAllocate(reserve, jobspec) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchAllocate: %v\n", err) } printOutput(reserved, allocated, at, jobid, err) reserve = true - reserved, allocated, at, overhead, jobid, err = cli.MatchAllocate(reserve, string(jobspec)) - fmt.Println("Errors so far: \n", cli.GetErrMsg()) - + reserved, allocated, at, overhead, jobid, err = cli.MatchAllocate(reserve, jobspec) + checkErrors(cli) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchAllocate: %v\n", err) } printOutput(reserved, allocated, at, jobid, err) - reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocate, string(jobspec)) - fmt.Println("Errors so far: \n", cli.GetErrMsg()) - + // Match derivatives + reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocate, jobspec) + checkErrors(cli) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchAllocate: %v\n", err) } printOutput(reserved, allocated, at, jobid, err) - reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocateOrElseReserve, string(jobspec)) - fmt.Println("Errors so far: \n", cli.GetErrMsg()) - + // ...or else Reserve + reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocateOrElseReserve, jobspec) + checkErrors(cli) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchAllocate: %v\n", err) } printOutput(reserved, allocated, at, jobid, err) - reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocateWithSatisfiability, string(jobspec)) - fmt.Println("Errors so far: \n", cli.GetErrMsg()) - + // ...with Satisfy + reserved, allocated, at, overhead, jobid, err = cli.Match(types.MatchAllocateWithSatisfiability, jobspec) + checkErrors(cli) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchAllocate: %v\n", err) } printOutput(reserved, allocated, at, jobid, err) - sat, overhead, err := cli.MatchSatisfy(string(jobspec)) - fmt.Println("Errors so far: \n", cli.GetErrMsg()) - + // Match Satisfy + sat, overhead, err := cli.MatchSatisfy(jobspec) + checkErrors(cli) if err != nil { - fmt.Printf("Error in ReapiClient MatchAllocate: %v\n", err) - return + log.Fatalf("Error in ReapiClient MatchSatisfy: %v\n", err) } printSatOutput(sat, err) + // Cancel err = cli.Cancel(1, false) if err != nil { - fmt.Printf("Error in ReapiClient Cancel: %v\n", err) - return + log.Fatalf("Error in ReapiClient Cancel: %v\n", err) } fmt.Printf("Cancel output: %v\n", err) + // Info reserved, at, overhead, mode, err := cli.Info(1) if err != nil { - fmt.Printf("Error in ReapiClient Info: %v\n", err) - return + log.Fatalf("Error in ReapiClient Info: %v\n", err) } fmt.Printf("Info output jobid 1: %t, %d, %f, %s, %v\n", reserved, at, overhead, mode, err) reserved, at, overhead, mode, err = cli.Info(2) if err != nil { - fmt.Println("Error in ReapiClient Info: %v\n", err) - return + log.Fatalf("Error in ReapiClient Info: %v\n", err) } fmt.Printf("Info output jobid 2: %t, %d, %f, %v\n", reserved, at, overhead, err) + // Test grow - we first will ask "tiny" for resources it doesn't have (4 nodes) + // then we will grow, and the request should succeed. + fmt.Println("Asking to MatchSatisfy 4 nodes (not possible)") + sat, overhead, err = cli.MatchSatisfy(growJobspec) + checkErrors(cli) + if err != nil { + log.Fatalf("Error in ReapiClient MatchSatisfy: %v\n", err) + } + printSatOutput(sat, err) + + // This should not be satisfied! + if sat { + log.Fatalf("Error in ReapiClient MatchSatisfy - asking for 4 nodes with only 2 should fail: %v\n", err) + } + + // Add nodes: note the data file comes originally from: + // https://github.com/milroy/flux-sched/tree/grow-api/t/data/resource/jgfs/elastic + fmt.Println("🍔 Asking to Grow from 2 to 4 Nodes") + err = cli.Grow(growJgf) + if err != nil { + log.Fatalf("Error in ReapiClient Grow: %s %s\n", err, cli.GetErrMsg()) + } + fmt.Printf("Grow request return value: %v\n", err) + + // Ask again - it should succeed this time. + fmt.Println("Asking to MatchSatisfy 4 nodes (now IS possible)") + sat, overhead, err = cli.MatchSatisfy(growJobspec) + checkErrors(cli) + + if err != nil { + log.Fatalf("Error in ReapiClient MatchSatisfy: %v\n", err) + } + printSatOutput(sat, err) + + // This should not be satisfied! + if !sat { + log.Fatalf("Error in ReapiClient MatchSatisfy - asking for 4 nodes should now succeed: %v\n", err) + } + } func printOutput(reserved bool, allocated string, at int64, jobid uint64, err error) { diff --git a/pkg/fluxcli/reapi_cli.go b/pkg/fluxcli/reapi_cli.go index 187734e..2360cea 100644 --- a/pkg/fluxcli/reapi_cli.go +++ b/pkg/fluxcli/reapi_cli.go @@ -220,6 +220,23 @@ func (cli *ReapiClient) UpdateAllocate(jobid int, r string) (at int64, overhead return at, overhead, r_out, err } +// Update the resource state with R. +// +// \param h Opaque handle. How it is used is an implementation +// detail. However, when it is used within a Flux's +// service module, it is expected to be a pointer +// to a flux_t object. +// \param R_subgraph R String +// \return 0 on success; -1 on error. +// int reapi_cli_grow (reapi_cli_ctx_t *ctx, const char *R_subgraph); +func (cli *ReapiClient) Grow(rSubgraph string) (err error) { + var resources = C.CString(rSubgraph) + defer C.free(unsafe.Pointer(resources)) + + fluxerr := (int)(C.reapi_cli_grow((*C.struct_reapi_cli_ctx)(cli.ctx), resources)) + return retvalToError(fluxerr, "issue resource api client grow") +} + // Cancel cancels the allocation or reservation corresponding to jobid. // // \param jobid jobid of the uint64_t type.