From 4bab1d7cf9299c55c71b4b4f62081d6b7769bbc9 Mon Sep 17 00:00:00 2001 From: MarioRobres Date: Wed, 23 Sep 2026 08:50:32 +0200 Subject: [PATCH 1/2] F OpenNebula/one#8064: add release notes to 7.4 --- .../backup_system/veeam.md | 14 +++++++---- .../interactive_backup.md | 23 +++++++++++++++---- .../release_notes/whats_new.md | 1 + 3 files changed, 28 insertions(+), 10 deletions(-) diff --git a/content/product/cluster_configuration/backup_system/veeam.md b/content/product/cluster_configuration/backup_system/veeam.md index e534e357b..2a8210c5c 100644 --- a/content/product/cluster_configuration/backup_system/veeam.md +++ b/content/product/cluster_configuration/backup_system/veeam.md @@ -287,13 +287,17 @@ Successful restores and restores cancelled from Veeam complete the cleanup lifec However, if a restore fails, Veeam reports the error and the incomplete OpenNebula Image remains in `LOCKED` state. In that case, remove the incomplete Image manually from OpenNebula: -{{< alert title="Important" type="info" >}} -Get the restore transfer port from the Image `PATH` attribute, which has the form `onebex://:`, and terminate the writer process associated with that port: +{{< alert title="Note" type="info" >}} +Get the restore transfer port from the Image `PATH` attribute, which has the form `onebex://:`. Send the `FINISH` frame (`0x01`) to the writer listening on that port. This stops the writer gracefully and allows OpenNebula to complete the transfer cleanup. Use a Front-end address that is reachable from the system where you run the command. If you run it directly on the Front-end, you can use `127.0.0.1`. The restore transfer port must be allowed by any intervening firewall: ```shell -PORT= -pgrep -f "onebex_writer.rb .* ${PORT} " | xargs -r kill -TERM -oneimage delete --force +python3 -c 'import socket, sys; s = socket.create_connection((sys.argv[1], int(sys.argv[2]))); s.sendall(b"\x01"); s.close()' +``` + +After the writer finishes, delete the incomplete Image: + +```shell +oneimage delete ``` {{< /alert >}} diff --git a/content/product/integration_references/infrastructure_drivers_development/interactive_backup.md b/content/product/integration_references/infrastructure_drivers_development/interactive_backup.md index af8789e65..0d961f569 100644 --- a/content/product/integration_references/infrastructure_drivers_development/interactive_backup.md +++ b/content/product/integration_references/infrastructure_drivers_development/interactive_backup.md @@ -138,15 +138,28 @@ onebex://: `IMAGE_DS_ID` is the destination Image Datastore ID where the restored disk image will be created. `PORT_ID` is the restore transfer port allocated for the interactive restore session. +The writer accepts one frame per TCP connection. Each frame starts with a one-byte type: + +| Type | Name | Payload | +|------|------|---------| +| `0x00` | `DATA` | Three unsigned 64-bit big-endian integers containing the start byte, payload size, and total image size, followed by the image data. | +| `0x01` | `FINISH` | No payload. Stops the writer and lets OpenNebula finalize the restore transfer. | + +After sending all the image data, the integration must open one final connection to the restore transfer port and send the `FINISH` frame. The integration must also send this frame when a restore is cancelled or fails. Do not send more data after the `FINISH` frame. + If a restore fails, the restored Image remains in `LOCKED` state and should be removed manually: -{{< alert title="Important" type="info" >}} -Get the restore transfer port from the Image `PATH` attribute, which has the form `onebex://:`, and terminate the writer process associated with that port: +{{< alert title="Note" type="info" >}} +Get the restore transfer port from the Image `PATH` attribute and send the `FINISH` frame to the writer. This stops the writer gracefully and allows OpenNebula to complete the transfer cleanup. Use a Front-end address that is reachable from the system where you run the command. If you run it directly on the Front-end, you can use `127.0.0.1`. The restore transfer port must be allowed by any intervening firewall: + +```shell +python3 -c 'import socket, sys; s = socket.create_connection((sys.argv[1], int(sys.argv[2]))); s.sendall(b"\x01"); s.close()' +``` + +After the writer finishes, delete the incomplete Image: ```shell -PORT= -pgrep -f "onebex_writer.rb .* ${PORT} " | xargs -r kill -TERM -oneimage delete --force +oneimage delete ``` {{< /alert >}} diff --git a/content/software/release_information/release_notes/whats_new.md b/content/software/release_information/release_notes/whats_new.md index ccf408aa9..122077656 100644 --- a/content/software/release_information/release_notes/whats_new.md +++ b/content/software/release_information/release_notes/whats_new.md @@ -121,6 +121,7 @@ Additionally, the following functionalities are present that were not in OpenNeb * [Enabled the customization of the favicon in FireEdge]({{% relref "product/operation_references/opennebula_services_configuration/fireedge.md#branding-fireedge" %}}). * Added the capacity to [batch delete scheduled actions from all service VMs]({{% relref "product/virtual_machines_operation/multi-vm_workflows/appflow_use_cli/#deleting-scheduled-actions-from-service-vms" %}}), negating the need to delete actions from each individual VM. +* Added a dedicated [FINISH frame to gracefully finalize interactive restore transfers]({{% relref "product/integration_references/infrastructure_drivers_development/interactive_backup.md#restoring-interactive-backups" %}}), eliminating the need to manually terminate the OneBEX writer process ## Other Issues Solved From 3e8a0a4cf482d52a6973d88172ed026867d71c0f Mon Sep 17 00:00:00 2001 From: MarioRobres Date: Wed, 23 Sep 2026 08:52:06 +0200 Subject: [PATCH 2/2] M #-: fix release notes place --- .../release_information/release_notes/resolved_issues_742.md | 2 ++ content/software/release_information/release_notes/whats_new.md | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/content/software/release_information/release_notes/resolved_issues_742.md b/content/software/release_information/release_notes/resolved_issues_742.md index 946c1a84a..61470e2df 100644 --- a/content/software/release_information/release_notes/resolved_issues_742.md +++ b/content/software/release_information/release_notes/resolved_issues_742.md @@ -15,6 +15,8 @@ Include a high level description and a link to the documentation explaining the * Add per-VM live migration options through [`MIGRATE_AUTO_CONVERGE` and `MIGRATE_COMPRESSED`]({{% relref "/product/operation_references/configuration_references/template#template-features" %}}) VM template attributes. Administrators can now tune auto-convergence and memory compression only for selected KVM VMs, improving migration reliability and bandwidth usage without changing global driver defaults. --> +* Added a dedicated [FINISH frame to gracefully finalize interactive restore transfers]({{% relref "product/integration_references/infrastructure_drivers_development/interactive_backup.md#restoring-interactive-backups" %}}), eliminating the need to manually terminate the OneBEX writer process. + ## Resolved Issues The following issues have been solved in 7.4.2: diff --git a/content/software/release_information/release_notes/whats_new.md b/content/software/release_information/release_notes/whats_new.md index 122077656..ccf408aa9 100644 --- a/content/software/release_information/release_notes/whats_new.md +++ b/content/software/release_information/release_notes/whats_new.md @@ -121,7 +121,6 @@ Additionally, the following functionalities are present that were not in OpenNeb * [Enabled the customization of the favicon in FireEdge]({{% relref "product/operation_references/opennebula_services_configuration/fireedge.md#branding-fireedge" %}}). * Added the capacity to [batch delete scheduled actions from all service VMs]({{% relref "product/virtual_machines_operation/multi-vm_workflows/appflow_use_cli/#deleting-scheduled-actions-from-service-vms" %}}), negating the need to delete actions from each individual VM. -* Added a dedicated [FINISH frame to gracefully finalize interactive restore transfers]({{% relref "product/integration_references/infrastructure_drivers_development/interactive_backup.md#restoring-interactive-backups" %}}), eliminating the need to manually terminate the OneBEX writer process ## Other Issues Solved