Skip to content

kvm: support Host HA on Ceph RBD primary storage - #14320

Draft
weizhouapache wants to merge 14 commits into
apache:mainfrom
weizhouapache:24-kvm-ha-on-ceph
Draft

weizhouapache wants to merge 14 commits into
apache:mainfrom
weizhouapache:24-kvm-ha-on-ceph

Conversation

@weizhouapache

Copy link
Copy Markdown
Member

Description

Extend the existing KVM Host-HA heartbeat/VM-activity-check framework (currently limited to NetworkFilesystem and SharedMountPoint pools) to also cover RBD primary storage, based on the approach from the old PR #5862, adapted to the current HA architecture and reusing the multi-monitor Ceph support already added in #6792.

  • Add StoragePoolType.RBD to LIBVIRT_STORAGE_POOL_TYPES_WITH_HA_SUPPORT, which is the single switch that makes pool registration, KVMHAMonitor, and the CheckOnHostCommand/CheckVMActivityOnStoragePoolCommand wrappers treat RBD pools as HA-capable.
  • LibvirtStoragePool: build rbd/rados connection args (--mon-host, pool, and cephx --id/--key when set) from the pool's existing sourceHost/ sourceDir/authUsername/authSecret fields for the heartbeat and VM-activity checks, mirroring the conventions KVMPhysicalDisk already uses to talk to RBD.
  • Add kvmheartbeat_rbd.sh and kvmvmactivity_rbd.sh: RBD has no shared mount point to write a heartbeat file to, so the heartbeat timestamp is stored as a small RADOS object per host instead, and VM activity is detected via RBD watchers (rbd status) rather than file mtimes.
  • Minor: fix a stale "NFS storage pool" log message in KVMHAMonitor now that this path also runs for RBD.
  • Add LibvirtStoragePoolTest#testIsPoolSupportHA covering the new RBD case (no HA/heartbeat tests existed previously for any pool type).

cwiki: https://cwiki.apache.org/confluence/spaces/CLOUDSTACK/pages/451979203/Host+HA+support+for+Ceph+RBD+primary+storage+KVM

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • Build/CI
  • Test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

Screenshots (if appropriate):

How Has This Been Tested?

How did you try to break this feature and the system with this change?

Extend the existing KVM Host-HA heartbeat/VM-activity-check framework
(currently limited to NetworkFilesystem and SharedMountPoint pools) to
also cover RBD primary storage, based on the approach from the old
PR apache#5862, adapted to the current HA architecture and
reusing the multi-monitor Ceph support already added in apache#6792.

- Add StoragePoolType.RBD to LIBVIRT_STORAGE_POOL_TYPES_WITH_HA_SUPPORT,
  which is the single switch that makes pool registration, KVMHAMonitor,
  and the CheckOnHostCommand/CheckVMActivityOnStoragePoolCommand wrappers
  treat RBD pools as HA-capable.
- LibvirtStoragePool: build rbd/rados connection args (--mon-host, pool,
  and cephx --id/--key when set) from the pool's existing sourceHost/
  sourceDir/authUsername/authSecret fields for the heartbeat and
  VM-activity checks, mirroring the conventions KVMPhysicalDisk already
  uses to talk to RBD.
- Add kvmheartbeat_rbd.sh and kvmvmactivity_rbd.sh: RBD has no shared
  mount point to write a heartbeat file to, so the heartbeat timestamp
  is stored as a small RADOS object per host instead, and VM activity
  is detected via RBD watchers (rbd status) rather than file mtimes.
- Minor: fix a stale "NFS storage pool" log message in KVMHAMonitor now
  that this path also runs for RBD.
- Add LibvirtStoragePoolTest#testIsPoolSupportHA covering the new RBD
  case (no HA/heartbeat tests existed previously for any pool type).
@codecov

codecov Bot commented Oct 6, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 58.33333% with 45 lines in your changes missing coverage. Please review.
✅ Project coverage is 20.41%. Comparing base (d3f0700) to head (02fb3e8).

Files with missing lines Patch % Lines
...oud/hypervisor/kvm/storage/LibvirtStoragePool.java 42.62% 35 Missing ⚠️
...om/cloud/hypervisor/kvm/resource/KVMHAMonitor.java 0.00% 5 Missing ⚠️
utils/src/main/java/com/cloud/utils/RbdUtils.java 89.28% 2 Missing and 1 partial ⚠️
.../hypervisor/kvm/storage/KVMStoragePoolManager.java 0.00% 2 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main   #14320      +/-   ##
============================================
+ Coverage     20.39%   20.41%   +0.01%     
- Complexity    21283    21318      +35     
============================================
  Files          6481     6482       +1     
  Lines        588040   588116      +76     
  Branches      72021    72034      +13     
============================================
+ Hits         119957   120074     +117     
+ Misses       455052   455010      -42     
- Partials      13031    13032       +1     
Flag Coverage Δ
uitests 3.70% <ø> (ø)
unittests 21.71% <58.33%> (+0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19426

@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan test

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@weizhouapache weizhouapache added this to the 24.0 milestone Oct 6, 2026
@blueorangutan

Copy link
Copy Markdown

[SF] Trillian test result (tid-17079)
Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8
Total time taken: 56468 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr14320-t17079-kvm-ol8.zip
Smoke tests completed. 154 look OK, 2 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
test_01_vpn_usage Error 1.18 test_usage.py
ContextSuite context=TestCreateVolume>:setup Error 0.00 test_volumes.py
test_01_root_volume_encryption Error 1.62 test_volumes.py
test_02_data_volume_encryption Error 1.43 test_volumes.py
test_03_root_and_data_volume_encryption Error 1.43 test_volumes.py
test_02_attach_volume Error 209.22 test_volumes.py

@weizhouapache weizhouapache linked an issue Oct 7, 2026 that may be closed by this pull request
@weizhouapache
weizhouapache requested review from harikrishna-patnala and a lite review from Copilot October 7, 2026 14:46

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 Changes recommended

Critical RBD monitor-port and stale-heartbeat handling issues remain, along with incomplete HA cleanup.

3 open findings
What changed in this PR

Extends KVM Host HA heartbeat and VM-activity checks to Ceph RBD primary storage.

Changes:

  • Adds RBD HA support and connection handling.
  • Adds RADOS heartbeat and RBD watcher activity scripts.
  • Updates logging and adds HA eligibility tests.
File Summary
scripts/​vm/​hypervisor/​kvm/​kvmvmactivity_rbd.sh Adds RBD watcher-based VM activity detection.
scripts/​vm/​hypervisor/​kvm/​kvmheartbeat_rbd.sh Adds RADOS-backed heartbeat handling; stale delays over 255 seconds require bounded status handling.
plugins/​hypervisors/​kvm/​src/​test/​java/​com/​cloud/​hypervisor/​kvm/​storage/​LibvirtStoragePoolTest.java Tests RBD HA support eligibility.
plugins/​hypervisors/​kvm/​src/​main/​java/​com/​cloud/​hypervisor/​kvm/​storage/​LibvirtStoragePool.java Selects RBD scripts and builds Ceph arguments; monitor ports must be propagated, and missing-script errors should be generic.
plugins/​hypervisors/​kvm/​src/​main/​java/​com/​cloud/​hypervisor/​kvm/​resource/​KVMHAMonitor.java Generalizes the storage-pool log message.
engine/​components-api/​src/​main/​java/​com/​cloud/​ha/​HighAvailabilityManager.java Enables RBD HA support; corresponding pool deletion paths must also clean up HA state.

🧠 Review effort: Lite


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.sh Outdated
- pass the pool's monitor port to the RBD heartbeat/activity scripts, for
  every monitor, instead of relying on the default port
- kvmheartbeat_rbd.sh: keep the heartbeat age out of the function return
  status, which wraps above 255 and made a long-stale heartbeat look ALIVE
- remove pools from the HA monitor on deletion for all storage pool types
  with HA support, without trying to umount an empty mount path
- make the missing-script error message generic
- add unit tests for the RBD monitor list (IPv4, IPv6, mixed, with/without port)
@weizhouapache
weizhouapache requested a lite review from Copilot October 8, 2026 09:19
@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.sh Outdated
@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19467

…of the pool

Follow-up to the review of the Host HA on Ceph RBD support:

- kvmheartbeat_rbd.sh and kvmvmactivity_rbd.sh: exit with an error when the
  host IP, which names the RADOS objects, is missing (the self-fencing -c
  of the heartbeat script does not need it), or when a Ceph user is given
  without its key
- LibvirtStoragePool: trim the Ceph monitors and skip empty entries, with or
  without a port; pass the Ceph user and key only if both are set and fail
  with a clear error if only one of them is
- KVMHAMonitor: run umount without a shell when removing a pool
- kvmvmactivity_rbd.sh: fix the -t help text and drop the unused field from
  the stored activity state
- add unit tests for the monitor list (multiple IPv4 and IPv6 monitors, with
  and without a port, with spaces) and for the Ceph user and key handling
@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@weizhouapache
weizhouapache requested a lite review from Copilot October 8, 2026 11:41

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Copilot review overview

6 open findings
11 resolved since last review

🧠 Review effort: Lite


Give feedback about Copilot approvals in this survey to enter a drawing for a $150 gift card.

Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.sh Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.sh Outdated
…st HA checks, and harden the parsing

Follow-up to the review of the Host HA on Ceph RBD support:

- LibvirtStoragePool: do not add a port to Ceph monitors which have one
  already, and only wrap bare IPv6 addresses in square brackets; mask the
  Ceph key in the logged command
- kvmheartbeat_rbd.sh, kvmvmactivity_rbd.sh: give the Ceph key to rados and
  rbd in a temporary keyfile instead of --key
- kvmheartbeat_rbd.sh: require -t to be a number when checking a heartbeat
- kvmvmactivity_rbd.sh: read the list of volumes without word splitting or
  globbing, skipping empty entries, and check if the activity object exists
  by the exit status of rados stat
- add unit tests for monitors with a port and for the masked key
@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@wido

wido commented Oct 13, 2026

Copy link
Copy Markdown
Contributor

I like the watchers method the best as its’s as native to RBD as possible.

yeah, I like it too. I just realized a potential performance issue. Imagine an environment with thousands of volumes, in the worst case, if a KVM host goes down, running rbd status against every volume could take a long time to complete.

Wouldn't a single RBD image per host be sufficient and have it watch it for ever? If it stops watching, others can assume it's dead. You could also have it write the timestamp in metadata (omap) instead of writing RADOS objects.

These RADOS objects in the Ceph pool will go stale when you remove a host. Yes, small objects, but it becomes garbage. RBD images are easier to spot by other tools.

@wido wido left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like we are close! I made a few more comments

Comment thread scripts/vm/hypervisor/kvm/kvmvmactivity_rbd.py Outdated
Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.py Outdated
@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19529

…e pool

LibvirtCheckVMActivityOnStoragePoolCommandWrapper gave the script of the agent,
kvmvmactivity.sh, to every pool, and LibvirtStoragePool replaced it with the
script of RBD by itself. Choose the script in the wrapper: kvmvmactivity_rbd.py
for a RBD pool, and the script of the agent for the other pools. If the script
of RBD can not be found, the check fails with a message, instead of running
without a script. LibvirtStoragePool uses the script which it is given.
…HA scripts on Ceph RBD

The Host HA scripts for Ceph RBD read and write the heartbeat, the activity
state and the watchers of the volumes over one connection, with the Python
bindings of librados and librbd, instead of running the rados and rbd
commands. The code is shared in kvmha_rbd.py.

- Each operation has a timeout of 30 seconds (rados_osd_op_timeout,
  rados_mon_op_timeout, client_mount_timeout and the connect), so that an
  unreachable cluster does not block a check.
- The cephx key is given to the bindings in their configuration. It is not
  an argument, and it is not in the environment of any other command.
- Nothing is written to the standard error output, as the agent reads only
  the first line of the output of the scripts, and a message of librados
  would hide the DEAD verdict.
- If the bindings are missing, the heartbeat is not written (exit 1), and
  the heartbeat check and the VM activity check are inconclusive (exit 2,
  no DEAD), so that a host is not considered dead because of it.
- The cloudstack-agent packages require python3-rados and python3-rbd.
@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@weizhouapache

Copy link
Copy Markdown
Member Author

Looks like we are close! I made a few more comments

thanks @wido !
updated PR as per your suggestions

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19533

@wido wido left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I reviewed this PR myself and then used Claude Fable to check it further. Overall it looks good and is probably ready to go.

What was checked: the Java unit tests pass locally (27 in LibvirtStoragePoolTest and the activity wrapper test), and both Python scripts were exercised against stub rados/rbd modules for the write, fresh, stale, missing, unreachable, cephx and volume-list paths. The cephx key through the environment, the silenced stderr and the timeouts are all good. Not tested on a real cluster.

A few remarks inline. The first one on kvmha_rbd.py is the only one I would fix before merging.

Comment thread scripts/vm/hypervisor/kvm/kvmha_rbd.py
Comment thread scripts/vm/hypervisor/kvm/kvmha_rbd.py
Comment thread scripts/vm/hypervisor/kvm/kvmheartbeat_rbd.py Outdated
@blueorangutan

Copy link
Copy Markdown

[SF] Trillian test result (tid-98)
Environment: kvm-ubuntu26 (x2), zone: Advanced Networking with Mgmt server u26, storage: Ceph (x2)
Total time taken: 70881 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr14320-n98-kvm-ubuntu26.zip
Smoke tests completed. 153 look OK, 4 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
ContextSuite context=TestClusterDRS>:setup Error 0.00 test_cluster_drs.py
test_01_migrate_VM_and_root_volume Error 88.40 test_vm_life_cycle.py
test_02_migrate_VM_with_two_data_disks Error 27.74 test_vm_life_cycle.py
test_10_attachAndDetach_iso Error 13.76 test_vm_life_cycle.py
test_01_create_vm_snapshots Error 156.80 test_vm_snapshots.py
test_02_revert_vm_snapshots Failure 90.24 test_vm_snapshots.py
test_03_delete_vm_snapshots Failure 0.02 test_vm_snapshots.py
test_01_root_volume_encryption Failure 124.99 test_volumes.py
test_02_data_volume_encryption Failure 240.30 test_volumes.py
test_03_root_and_data_volume_encryption Failure 52.72 test_volumes.py

Everything that talks to Ceph needs the pool's monitors as a list the client
can parse, and the rules are the same wherever that list is built: give each
monitor the pool's port unless it names one already, and put a bare IPv6
address in square brackets so its own colons stay distinguishable from the
separator before the port.

The mon_host option of a disk's rbd: string wants the same list again, with
':' and ';' escaped, because those two separate the options of that string and
its monitors.

None of it depends on a storage pool, so collect it in RbdUtils as static
methods with their unit tests, rather than leaving each caller to grow a copy
that is right in a different set of cases.
LibvirtStoragePool carried its own copy of the monitor-list logic. Call the
shared one instead; the cases its tests covered are covered by RbdUtilsTest.
…BD HA scripts

Both checks treated every Ceph failure alike, so two very different answers
came out the same. A host that has never written a heartbeat, and a cluster
this host cannot reach, are not the same thing: only the first says anything
about the host being checked.

Raise ObjectNotFoundError when the RADOS object is absent and keep CephError
for a cluster that cannot be read. The heartbeat check then reports the host
DEAD only for the missing or empty object, and exits unknown when Ceph itself
is out of reach, as the VM activity check already did.

Let the activity check survive a volume that is gone. Asking an image that no
longer exists for its watchers now yields nothing instead of failing the whole
check, so a volume the management server still lists does not decide the fate
of the others. If none of the images exist the host's state is genuinely
unknown, which is a failure rather than an answer of "no activity".
@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19557

@github-actions

Copy link
Copy Markdown

This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch.

composeOptionForMonHosts escapes every ':' of a monitor, because the colons
separate the options of the rbd: string. That includes the colons of an IPv6
address, also when the pool has no port to add. Test that case, and make
addPortToRbdMonitor, which is only used by RbdUtils itself, protected.
@blueorangutan

Copy link
Copy Markdown

[SF] Trillian test result (tid-102)
Environment: kvm-ubuntu26 (x2), zone: Advanced Networking with Mgmt server u26, storage: Ceph (x2)
Total time taken: 78439 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr14320-n102-kvm-ubuntu26.zip
Smoke tests completed. 152 look OK, 5 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
ContextSuite context=TestDeployVmWithAffinityGroup>:setup Error 0.00 test_affinity_groups_projects.py
ContextSuite context=TestClusterDRS>:setup Error 0.00 test_cluster_drs.py
test_01_migrate_VM_and_root_volume Error 118.04 test_vm_life_cycle.py
test_02_migrate_VM_with_two_data_disks Error 27.02 test_vm_life_cycle.py
test_01_create_vm_snapshots Error 156.93 test_vm_snapshots.py
test_02_revert_vm_snapshots Failure 90.24 test_vm_snapshots.py
test_03_delete_vm_snapshots Failure 0.02 test_vm_snapshots.py
test_01_root_volume_encryption Failure 118.03 test_volumes.py
test_02_data_volume_encryption Failure 240.56 test_volumes.py
test_03_root_and_data_volume_encryption Failure 51.51 test_volumes.py

# Conflicts:
#	plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePool.java
#	plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/storage/LibvirtStoragePoolTest.java
@weizhouapache

Copy link
Copy Markdown
Member Author

@blueorangutan package

@weizhouapache

Copy link
Copy Markdown
Member Author

@wido
this PR has been updated as well, thanks for review

@wido

wido commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Thanks @weizhouapache, I went through the update manually and then used Claude Fable to check it again. The four points from my review are all addressed. RbdUtilsTest (17), LibvirtStoragePoolTest (15) and the activity wrapper test (5) pass here, and the scripts behave as expected against stubbed rados/rbd modules: a deleted volume is skipped, a watcher on another volume gives ALIVE, no watchers gives DEAD, and an unreachable cluster gives exit 2 for both the heartbeat check and the activity check.

One request before this goes in. The RADOS objects are named after the private IPv4 address of the host (KVMHA-hb-<ip>, KVMHA-ac-<ip>). That copies the NFS convention, but it is IPv4 thinking: NetUtils.getNetworkParams only ever returns a 4-byte address, and a host that gets a new private IP loses its heartbeat identity. Please use the host GUID instead. It is already available on both sides: the HostTO the checker receives carries getGuid(), and the agent has its own GUID in agent.properties. The scripts treat -h as an opaque string, so only KVMHAMonitor and the three RBD spots in LibvirtStoragePool change. The NFS path should stay as it is, since renaming hb-<ip> files would break a rolling upgrade, but the RBD naming is new and this is the moment to get it right. A GUID also makes cleaning up the objects of a removed host possible later, since the management server knows the GUID of a host it removed.

Note that RbdUtils.java and RbdUtilsTest.java are in both this PR and #14402, so whichever merges second needs a rebase.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Status] KVM Host-HA using CEPH RBD

5 participants