From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id CDCC81FF0AD for ; Sun, 20 Sep 2026 18:39:19 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 9787F214C3; Sun, 20 Sep 2026 18:39:16 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XQsW1ofjEK9LpsKFduAIpRB24kY0vCKjTp7jttciz+Oq/AQ+qA9L1xFLoDqqyKcZzjcU+eACnaLFf7HpFGjIhqNtEQx8b8dwhmP+N9/mg9PIvSJk/+fO4x/qkMbbJ1hf06np1KuQ+3m2i/rSGTOxGWQYpFSjP5ulzguxyZ1KNh0PLDL33FEvt5ClQVM2+EF7bqA6ftc7+YTKGsJB1WvQf0cK015orj1dGqHQREXCQaeIuZUexW5E5cGJ6mpqNP0X/FtKuTmrsodAMXVmBaQSNY66MDDa2TStQboI3zZx74r1lAuF7NwPK8hChebi3DYpOkLQpN+4OFZzbAk5CBD+hQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=gAaBQct+aoBzEE2hZw7Y0eN3/Jq3yIjpthIiB9ZC2Bg=; b=oKTKEDaX1j2RipfLFTTh+jaiQH97rDWRQhHAMtSrLO5kY1a9nAH2b4fXTu1yin/zYkr6h/sx1R7zvjvQFqG24yp2MHYJ2sm3OC7ky9kBp/RIP8gGJW0Bd4D8NIcGIoriKx/bX3AqoCRueWih74d//TktQXxZFoZqJytdiZUINGQrklyK8sSgz5sf10s3S9Fx3/0EwOyGflKS2C4Ii/wY6dj1tX6lKww1vbhgZchY88u3yJHFSwyGqK0xwu2tpfCZnUyCT6sEOauKWBO8cpmzId5frCTsYvvDKHNJUz/NRCyzEyyITOJ6UkSdKw9zJetD4wYO5Y8ZjSDktixv8b+Djg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ryomherold.dk; dmarc=pass action=none header.from=ryomherold.dk; dkim=pass header.d=ryomherold.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=RyomHerold.dk; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gAaBQct+aoBzEE2hZw7Y0eN3/Jq3yIjpthIiB9ZC2Bg=; b=LkUBi6tf7b78S466I8aCIv6XRtBIIpFRXgXFPpVYf0pK1244pc1ep0O7rIvrqy2QrbXW4YxHugnwNZk35leSDAcTywDqkHjnjm8y3mNGrjYs2axm6CcWN1CqdLq9huPn6VTecMogE2C8QJzzBF+zX3lL8+3bh6kpeN+g0XGrL4Pj2kRZP11CNJbXO6cyyyO57CvxAuIAVbC/D8xH/5C7CpezgtV8ilK9jIXQrxNkUu30Pd4rrQXoclN3meQS2inMGxDeu/F21dvgtpGTI0xv+hj3EsFXrdvuao4ctGeUf3arLnpNPaRrpYYfygbnWdWPO5PAQQWIM7OqbdRbVvqmyw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=RyomHerold.dk; From: Michael Ryom To: pve-devel@lists.proxmox.com Subject: [PATCH ha-manager 3/7] manager: auto rebalance: require a minimum absolute imbalance improvement Date: Sun, 20 Sep 2026 18:22:10 +0200 Message-ID: <20260920162220.574802-4-Michael@RyomHerold.dk> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260920162220.574802-1-Michael@RyomHerold.dk> References: <20260920162220.574802-1-Michael@RyomHerold.dk> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: TL2P290CA0008.ISRP290.PROD.OUTLOOK.COM (2603:1096:950:2::11) To AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:20b:619::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR10MB7231:EE_|AM0PR10MB883391:EE_ X-MS-Office365-Filtering-Correlation-Id: 50a28b59-e72d-46de-97ce-08df17336f0d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|376014|1800799024|366016|10067099003|6133799003|22082099003|18002099003|56012099006; X-Microsoft-Antispam-Message-Info: cb9Kp5cmwV/6VUHcOuNrf9AakVFtgjXjRdrhtN9OZaQ++G7m+GCHbbzR2a90qY6W1lXF4bM4hARNxuiAmaFLSTFz+nv5+HCmZ639L76C+349C+K7FxWaRjL9w6kirE2dPuqOAnka2NBsqaAD+PVh5ynzenUi360mRXTK+dz0EHUyts751lHwZSw7idrmIzFzCFhTYehdETP/nC8CsqqMa2yMlJshqkVllDC6UbVs4tJh5r6Sx/4Zuany9N75ASp12dKrOWLXVROSy5ZlZqXUtKDmvCBf1Jt7rezNkYsItD2U+ZeqxqZ6xN7xGhZ+hNlPzWgu3sanOmLD5ffKNbOvA0N+sXwz2DFQ/+kuc5wr59Wxw5csa5gPD7T46ovGabX4783S4nrQ9qonHCwi+06llfJ0lOm4MRF4tQbvCQ46wYHAN8EEhmAn+eCBtK7CzGtzHD84PrgKKSWflJTjMJiGAnjF7kK/hwPnyfCiL0va3FjpI4jHW8TwXn9Mpm+UFPNBl64JWx5+uSQZIKzF580dHeIau8AjFFIoi+SiSHaojTvuZ0Z18BycLJRNsvsYE21IazSzX2NhB/bhRKPJQqSpDu8G0E4gdVt0PFQV4g2qUMvcpjVS8BNg/h1aoFl9KsdTfOXh3KIuPucvbkvXbSMk4RjMtFhqmUuPdEDnY7h26GA= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(376014)(1800799024)(366016)(10067099003)(6133799003)(22082099003)(18002099003)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5T0cuAAFqMcYrdUu6HWgjcXGm+LV5cWKuX3O+NkU0IQmDYA+Pz1QjqEmoFCx?= =?us-ascii?Q?2+NfvqyRaY3nq+NLvtE6m7CB/3dB45B6ryWAjXjKiqBFine7BvNWW8rAX6q0?= =?us-ascii?Q?Z9ONXTc4QC/VlPpMLHXC/+0uuukgOeHNLTJrHQRwaux1Orj3+uNQ0AHLpo44?= =?us-ascii?Q?GWswnp0smWaTqRk016vS2xsvecLiRaYR9Vhai/C9xHpW9dPZ/K6n8bbHyTdn?= =?us-ascii?Q?TpHZ920MmutRGUdxA7BRsTJ8LzyDCSk/g6uqAVsUDIQ6N1GBUwPCgS6rb5N9?= =?us-ascii?Q?ZPUQUNA7uuBCYJdtpBdiRLDm0Lt1yB0TNwnRZSeBn1+k0AImPVrAZG3UV7S9?= =?us-ascii?Q?pLhSPHaBzTnXRDrECD/vDDGQUCXXY+cyfB5WIwTyje5kCj9qdsn2TWNLQNDE?= =?us-ascii?Q?AkSXozBYVkkuBm2MaFMLUYGLZ5dSj2azveCiT/WMqC2SarNPHpyZ5X/6hXeC?= =?us-ascii?Q?hhKxMZQZ6DpYvcdKL1d45u1En28X9kZWsu6Ab62fgJBiPVF/HuAs9B3sJR6h?= =?us-ascii?Q?jU89Vsi/+PLZCFza0sGh9WTP4sVQ+kHC6elyjtpAT02sPEVqPewlC0wv4zm/?= =?us-ascii?Q?x9D9qYZkRhb1uwzBrWqMwZa0lO3xJveZeCNbSYifu2GZl3dc96Mc190JXPxc?= =?us-ascii?Q?H4mp2X4ZtuwVWdeMsexKmZu1qKyYDMcdEF7Qqhqp2gWpapIKzqSw7owIWbJX?= =?us-ascii?Q?QiE2zDfYBZ+wYK5Lyn8Cv5kzJ8vrMgIy68IEAmX5Ya97SoDWld1oay3XKe/9?= =?us-ascii?Q?O+ZS+YpD9cu7HJe1OUFOXFKGxK1+YV+eZdViTTLOXtYwrDCB109dCPM2WW7h?= =?us-ascii?Q?OOrb0STc9QNL+gY6AoNZhUIDyuBJY9zgQla1LBtKFASJKPBt8UJHGlRjCtQN?= =?us-ascii?Q?Cb56rOAV5f0MIFcUpC7VXQgGusYsI3chtzOibXReRfKnUy0Yp8Nnt32ijx0W?= =?us-ascii?Q?efgrtqrNmSYYhCHhX4YEHE8+kMMeV0CF+yb+frEPhstPoWgdZH2rAF0+IzQn?= =?us-ascii?Q?ArB0T0vf4fuxfOr65PCdR0jnG4kuwkvyUHTv++lMdlZSFFP3owWeYblDtj9z?= =?us-ascii?Q?KrQEdPCrjG1qt9rcMJDtqWGStiPs12ANZPBKcByRdcDjCmehhfh3KxAHECkJ?= =?us-ascii?Q?fJbPXaFpSvbCCTzkRDsAW6dGZW/91WNrwifgE3IbxB8VUDP9S4LHVy6chisC?= =?us-ascii?Q?7w8SR/gLG5/+VA8QGX8CYebKQPiPOdMzVAclXNBSch0c/9D43e0KrojfMbiX?= =?us-ascii?Q?2+4P6rK7vm1COy0Mlnsipx8F6+8ntOEOtVdR4unOZ2QA5W6dwH2yZj5MR1RO?= =?us-ascii?Q?jv1Hr5mRuziESawIbzNYm0DrHBRvxZH5dvjmST7DMMUTUWT8IaZTjMyealhs?= =?us-ascii?Q?0BCuXdpnIfP4zqOvLXxpY74yODE8/1SBLRo/Ia9I7xMflF2SO9FVh4jXLCgq?= =?us-ascii?Q?S8PtQckyM94xKkGvcYn5DD2OcU5jKWiWrA+68YBZidXV90QGdM6SseBguEio?= =?us-ascii?Q?nC0K3LQGwlb0oewhVM6Xjxl+bVGOulSmkdbdEA8xIpt/95E+jKTn0XBZtwII?= =?us-ascii?Q?zjw9jJZ83orS45AKRq1GPC2t+v2NpMWyGnPyCFj2pQFbBMYIos/4mUYWBx3L?= =?us-ascii?Q?Any7N0pIDNStC6Y2MWxyP9w2tat/XaQOmKXAnZ7y5masllobGESv84YcnEP8?= =?us-ascii?Q?FGzLTinztRxiMpt8j9xZeT0QxPlzsQEZVA8QYEk5soG/YKOkBf4AifRVj/iG?= =?us-ascii?Q?ahFd84u9Cw=3D=3D?= X-OriginatorOrg: RyomHerold.dk X-MS-Exchange-CrossTenant-Network-Message-Id: 50a28b59-e72d-46de-97ce-08df17336f0d X-MS-Exchange-CrossTenant-AuthSource: AS8PR10MB7231.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2026 16:22:58.5455 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 26a2499e-4646-4888-a695-c64736a56807 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nGniX9BYqOKG7RvyaOR6X99h7j+qZXOLLvhUbH6iXcWfQ/6XIfndyVQrizWeryllAmKM7+RLa8mmepzJvmPyzQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR10MB883391 X-SPAM-LEVEL: Spam detection results: 0 DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record Message-ID-Hash: DICLKRNXDBPXPIFS4QEO3M7ULGOHCQIE X-Message-ID-Hash: DICLKRNXDBPXPIFS4QEO3M7ULGOHCQIE X-MailFrom: Michael@RyomHerold.dk X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Michael Ryom X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: The automatic load balancer only requires a relative improvement of the node imbalance (default 10%). When a single resource dominates the cluster load, the relative margin provides almost no hysteresis: with two nodes, a resource load v and a node base load difference d, the relative improvement of moving the resource is 2d / (v + d), so it exceeds a margin m as soon as d > v * m / (2 - m). For a mid-size VM that is a base load difference of about half a percentage point, well within the normal fluctuation of e.g. the ZFS ARC or Ceph daemons, and each fluctuation then qualifies a motion (and, after it was carried out, its reverse). Additionally require the imbalance improvement to exceed a minimum absolute value of 5 percentage points. This creates a dead band for motions that shuffle load without meaningfully improving the cluster balance. No expected motion of an existing regression test is affected; the smallest occurring improvement there is 9.6 percentage points. Like the backoff and cooldown constants, this could be exposed as a ha-auto-rebalance-* option later. Signed-off-by: Michael Ryom --- src/PVE/HA/Manager.pm | 8 +++++ .../test-crs-dynamic-auto-rebalance7/README | 12 ++++++++ .../test-crs-dynamic-auto-rebalance7/cmdlist | 3 ++ .../datacenter.cfg | 6 ++++ .../dynamic_service_stats | 5 ++++ .../hardware_status | 4 +++ .../log.expect | 30 +++++++++++++++++++ .../manager_status | 1 + .../service_config | 5 ++++ .../static_service_stats | 5 ++++ 10 files changed, 79 insertions(+) create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/README create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/cmdlist create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/datacenter.cfg create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/dynamic_service_stats create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/hardware_status create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/log.expect create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/manager_status create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/service_config create mode 100644 src/test/test-crs-dynamic-auto-rebalance7/static_service_stats diff --git a/src/PVE/HA/Manager.pm b/src/PVE/HA/Manager.pm index 30b9ae2..2c4c273 100644 --- a/src/PVE/HA/Manager.pm +++ b/src/PVE/HA/Manager.pm @@ -151,6 +151,13 @@ my $auto_rebalance_failure_backoff_max = 3600; # minimum time before a resource is considered for rebalancing again after it # was successfully moved by the load balancer my $auto_rebalance_resource_cooldown = 600; +# minimum absolute improvement of the node imbalance for a rebalance motion; +# the relative margin alone provides almost no hysteresis when a single +# resource dominates the cluster load: with two nodes, a resource load v and +# a node base load difference d, the relative improvement of a motion is +# 2d / (v + d), so for large v tiny fluctuations of d around zero are enough +# to make the motion (and afterwards its reverse) qualify +my $auto_rebalance_min_imbalance_improvement = 0.05; my $is_on_rebalance_cooldown = sub { my ($self, $sid, $now) = @_; @@ -387,6 +394,7 @@ sub load_balance { my $relative_change = ($imbalance - $target_imbalance) / $imbalance; return if $relative_change < $margin; + return if ($imbalance - $target_imbalance) < $auto_rebalance_min_imbalance_improvement; my ($sid, $source, $target) = $migration->@{qw(sid source-node target-node)}; diff --git a/src/test/test-crs-dynamic-auto-rebalance7/README b/src/test/test-crs-dynamic-auto-rebalance7/README new file mode 100644 index 0000000..488a018 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/README @@ -0,0 +1,12 @@ +Test that the auto rebalance system does not act on a rebalance motion whose +absolute improvement of the node imbalance is below the minimum, even though +the relative improvement exceeds the configured margin. + +The cluster has two nodes with a HA resource excluded from auto rebalancing +on each (vm:100 on node1 and vm:200 on node2) acting as node base loads, and +one movable HA resource vm:101 on node1. The imbalance is 35.6% and stays +above the default trigger threshold of 30%, and migrating vm:101 to node2 +would improve the imbalance to 31.1%, i.e. by 12.5% relative, which exceeds +the default margin of 10%. However, the absolute improvement of 4.4 +percentage points is below the required minimum of 5 percentage points, so +the motion must not be issued. diff --git a/src/test/test-crs-dynamic-auto-rebalance7/cmdlist b/src/test/test-crs-dynamic-auto-rebalance7/cmdlist new file mode 100644 index 0000000..76f0313 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/cmdlist @@ -0,0 +1,3 @@ +[ + [ "power node1 on", "power node2 on" ] +] diff --git a/src/test/test-crs-dynamic-auto-rebalance7/datacenter.cfg b/src/test/test-crs-dynamic-auto-rebalance7/datacenter.cfg new file mode 100644 index 0000000..01c8114 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/datacenter.cfg @@ -0,0 +1,6 @@ +{ + "crs": { + "ha": "dynamic", + "ha-auto-rebalance": 1 + } +} diff --git a/src/test/test-crs-dynamic-auto-rebalance7/dynamic_service_stats b/src/test/test-crs-dynamic-auto-rebalance7/dynamic_service_stats new file mode 100644 index 0000000..231af30 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/dynamic_service_stats @@ -0,0 +1,5 @@ +{ + "vm:100": { "cpu": 7.44, "mem": 0 }, + "vm:101": { "cpu": 7.2, "mem": 0 }, + "vm:200": { "cpu": 6.96, "mem": 0 } +} diff --git a/src/test/test-crs-dynamic-auto-rebalance7/hardware_status b/src/test/test-crs-dynamic-auto-rebalance7/hardware_status new file mode 100644 index 0000000..864adb3 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/hardware_status @@ -0,0 +1,4 @@ +{ + "node1": { "power": "off", "network": "off", "maxcpu": 24, "maxmem": 34359738368 }, + "node2": { "power": "off", "network": "off", "maxcpu": 24, "maxmem": 34359738368 } +} diff --git a/src/test/test-crs-dynamic-auto-rebalance7/log.expect b/src/test/test-crs-dynamic-auto-rebalance7/log.expect new file mode 100644 index 0000000..6c84e42 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/log.expect @@ -0,0 +1,30 @@ +info 0 hardware: starting simulation +info 20 cmdlist: execute power node1 on +info 20 node1/crm: status change startup => wait_for_quorum +info 20 node1/lrm: status change startup => wait_for_agent_lock +info 20 cmdlist: execute power node2 on +info 20 node2/crm: status change startup => wait_for_quorum +info 20 node2/lrm: status change startup => wait_for_agent_lock +info 20 node1/crm: got lock 'ha_manager_lock' +info 20 node1/crm: status change wait_for_quorum => master +info 20 node1/crm: using scheduler mode 'dynamic' +info 20 node1/crm: node 'node1': state changed from 'unknown' => 'online' +info 20 node1/crm: node 'node2': state changed from 'unknown' => 'online' +info 20 node1/crm: adding new service 'vm:100' on node 'node1' +info 20 node1/crm: adding new service 'vm:101' on node 'node1' +info 20 node1/crm: adding new service 'vm:200' on node 'node2' +info 20 node1/crm: service 'vm:100': state changed from 'request_start' to 'started' (node = node1) +info 20 node1/crm: service 'vm:101': state changed from 'request_start' to 'started' (node = node1) +info 20 node1/crm: service 'vm:200': state changed from 'request_start' to 'started' (node = node2) +info 21 node1/lrm: got lock 'ha_agent_node1_lock' +info 21 node1/lrm: status change wait_for_agent_lock => active +info 21 node1/lrm: starting service vm:100 +info 21 node1/lrm: service status vm:100 started +info 21 node1/lrm: starting service vm:101 +info 21 node1/lrm: service status vm:101 started +info 22 node2/crm: status change wait_for_quorum => slave +info 23 node2/lrm: got lock 'ha_agent_node2_lock' +info 23 node2/lrm: status change wait_for_agent_lock => active +info 23 node2/lrm: starting service vm:200 +info 23 node2/lrm: service status vm:200 started +info 620 hardware: exit simulation - done diff --git a/src/test/test-crs-dynamic-auto-rebalance7/manager_status b/src/test/test-crs-dynamic-auto-rebalance7/manager_status new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/manager_status @@ -0,0 +1 @@ +{} diff --git a/src/test/test-crs-dynamic-auto-rebalance7/service_config b/src/test/test-crs-dynamic-auto-rebalance7/service_config new file mode 100644 index 0000000..83bf42e --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/service_config @@ -0,0 +1,5 @@ +{ + "vm:100": { "node": "node1", "state": "started", "auto-rebalance": 0 }, + "vm:101": { "node": "node1", "state": "started" }, + "vm:200": { "node": "node2", "state": "started", "auto-rebalance": 0 } +} diff --git a/src/test/test-crs-dynamic-auto-rebalance7/static_service_stats b/src/test/test-crs-dynamic-auto-rebalance7/static_service_stats new file mode 100644 index 0000000..300fb7a --- /dev/null +++ b/src/test/test-crs-dynamic-auto-rebalance7/static_service_stats @@ -0,0 +1,5 @@ +{ + "vm:100": { "maxcpu": 8.0, "maxmem": 8589934592 }, + "vm:101": { "maxcpu": 8.0, "maxmem": 8589934592 }, + "vm:200": { "maxcpu": 8.0, "maxmem": 8589934592 } +} -- 2.47.3