From 3587e91150c38720228e09afbf7098483734ce92 Mon Sep 17 00:00:00 2001 From: "Michael N. Lipp" Date: Sun, 11 Jun 2023 13:14:48 +0200 Subject: [PATCH] Set balloon on startup. --- .../vmoperator/runner/qemu/QemuMonitor.java | 14 +++++++++++++- .../org/jdrupes/vmoperator/runner/qemu/Runner.java | 7 +++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/QemuMonitor.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/QemuMonitor.java index 991001a..a870769 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/QemuMonitor.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/QemuMonitor.java @@ -68,7 +68,9 @@ public class QemuMonitor extends Component { @SuppressWarnings("PMD.UseConcurrentHashMap") private final Map monitorMessages = new HashMap<>(Map.of( "connect", "{ \"execute\": \"qmp_capabilities\" }", - "powerdown", "{ \"execute\": \"system_powerdown\" }")); + "powerdown", "{ \"execute\": \"system_powerdown\" }", + "setBalloon", "{ \"execute\": \"balloon\", \"arguments\": " + + "{ \"value\": %d } }")); private Path socketPath; private int powerdownTimeout; @@ -185,6 +187,16 @@ public class QemuMonitor extends Component { }); } + /** + * Sets the current ram. + * + * @param amount the new current ram + */ + public void setCurrentRam(Number amount) { + writeToMonitor( + String.format(monitorMessages.get("setBalloon"), amount)); + } + /** * Handle data from qemu monitor connection. * diff --git a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java index 806786c..a192b22 100644 --- a/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java +++ b/org.jdrupes.vmoperator.runner.qemu/src/org/jdrupes/vmoperator/runner/qemu/Runner.java @@ -108,7 +108,7 @@ import org.jgrapes.util.events.WatchFile; * qemu --> monitor : FileChanged[monitor socket created] * * monitor: entry/fire OpenSocketConnection - * monitor --> success: ClientConnected[for monitor] + * monitor --> success: ClientConnected[for monitor]/set balloon value * monitor -> error: ConnectError[for monitor] * } * @@ -129,7 +129,7 @@ import org.jgrapes.util.events.WatchFile; * * qemuPowerdown: entry/suspend Stop, send powerdown to qemu, start timer * - * qemuPowerdown --> terminateProcesses: Closed[for monitor]/resume Stop + * qemuPowerdown --> terminateProcesses: Closed[for monitor]/resume Stop,\ncancel Timer * qemuPowerdown --> terminateProcesses: Timeout/resume Stop * terminateProcesses --> terminated * } @@ -445,6 +445,9 @@ public class Runner extends Component { */ @Handler public void onQemuMonitorOpened(QemuMonitorOpened event) { + Optional.ofNullable(config.vm.currentRam) + .map(Configuration::parseMemory) + .ifPresent(qemuMonitor::setCurrentRam); state.set(State.RUNNING); }