Title: NullPointerException in NASBackupProvider.syncBackupStorageStats when no KVM host is in "Up" state · Issue #12679 · apache/cloudstack · GitHub
Open Graph Title: NullPointerException in NASBackupProvider.syncBackupStorageStats when no KVM host is in "Up" state · Issue #12679 · apache/cloudstack
X Title: NullPointerException in NASBackupProvider.syncBackupStorageStats when no KVM host is in "Up" state · Issue #12679 · apache/cloudstack
Description: problem NASBackupProvider.syncBackupStorageStats() crashes with a NullPointerException when ResourceManager.findOneRandomRunningHostByHypervisor() returns null. This happens when no KVM host in the zone has status=Up at the exact moment ...
Open Graph Description: problem NASBackupProvider.syncBackupStorageStats() crashes with a NullPointerException when ResourceManager.findOneRandomRunningHostByHypervisor() returns null. This happens when no KVM host in the...
X Description: problem NASBackupProvider.syncBackupStorageStats() crashes with a NullPointerException when ResourceManager.findOneRandomRunningHostByHypervisor() returns null. This happens when no KVM host in the...
Opengraph URL: https://github.com/apache/cloudstack/issues/12679
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"NullPointerException in NASBackupProvider.syncBackupStorageStats when no KVM host is in \"Up\" state","articleBody":"### problem\n\n`NASBackupProvider.syncBackupStorageStats()` crashes with a `NullPointerException` when `ResourceManager.findOneRandomRunningHostByHypervisor()` returns `null`. This happens when no KVM host in the zone has `status=Up` at the exact moment the `BackupSyncTask` runs (e.g., during management server startup, brief agent disconnections, or host state\n transitions).\n\n The NPE kills the entire `BackupSyncTask` background job every sync interval (default 300s), flooding the management server log with stack traces and preventing backup storage stats from being updated.\n\n ## Stack Trace\n\n ERROR [o.a.c.b.B.BackupSyncTask] Error trying to run backup-sync background task due to:\n [Cannot invoke \"com.cloud.host.Host.getId()\" because \"host\" is null].\n java.lang.NullPointerException: Cannot invoke \"com.cloud.host.Host.getId()\" because \"host\" is null\n at org.apache.cloudstack.backup.NASBackupProvider.syncBackupStorageStats(NASBackupProvider.java:544)\n at org.apache.cloudstack.backup.BackupManagerImpl$BackupSyncTask.runInContext(BackupManagerImpl.java:1947)\n\n ## Affected Code\n\n File: plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java`\n\n java\n @Override\n public void syncBackupStorageStats(Long zoneId) {\n final List\u003cBackupRepository\u003e repositories = backupRepositoryDao.listByZoneAndProvider(zoneId, getName());\n final Host host = resourceManager.findOneRandomRunningHostByHypervisor(Hypervisor.HypervisorType.KVM, zoneId);\n // host can be null here, but no null check before using it:\n for (final BackupRepository repository : repositories) {\n ...\n answer = (BackupStorageStatsAnswer) agentManager.send(host.getId(), command); // NPE\n ...\n }\n }\n\n findOneRandomRunningHostByHypervisor in ResourceManagerImpl returns null when no matching host is found:\n\n if (CollectionUtils.isEmpty(hosts)) {\n return null;\n }\n\n The same pattern also exists in deleteBackup() (line ~450) where the host can be null when the VM is removed and no running KVM host is available.\n\n Suggested Fix\n\n Add a null check after findOneRandomRunningHostByHypervisor, log a warning, and return early:\n\n @Override\n public void syncBackupStorageStats(Long zoneId) {\n final List\u003cBackupRepository\u003e repositories = backupRepositoryDao.listByZoneAndProvider(zoneId, getName());\n if (repositories.isEmpty()) {\n return;\n }\n final Host host = resourceManager.findOneRandomRunningHostByHypervisor(Hypervisor.HypervisorType.KVM, zoneId);\n if (host == null) {\n logger.warn(\"Unable to find a running KVM host in zone {} to sync backup storage stats\", zoneId);\n return;\n }\n for (final BackupRepository repository : repositories) {\n ...\n }\n }\n\n And similarly for deleteBackup():\n\n Host host = vm != null ? getVMHypervisorHost(vm) :\n resourceManager.findOneRandomRunningHostByHypervisor(HypervisorType.KVM, Long.valueOf(backup.getZoneId()));\n if (host == null) {\n throw new CloudRuntimeException(\"Unable to find a running KVM host to process backup deletion\");\n }\n\n Environment\n\n - CloudStack version: 4.22.0.0\n - Hypervisor: KVM\n - Backup provider: NAS (NFS)\n - OS: Ubuntu 24.04, Java 21\n\n How to Reproduce\n\n 1. Configure NAS backup provider with an NFS backup repository\n 2. Assign backup offerings to VMs\n 3. Restart cloudstack-management (or wait for a transient host disconnect)\n 4. Observe management-server.log — the NPE fires every backup.framework.sync.interval seconds\n\n Impact\n\n - BackupSyncTask fails completely on every cycle, backup storage capacity stats are never updated\n - Log spam (one full stack trace every 5 minutes)\n - No data loss, but backup monitoring/reporting is degraded\n\n\n\n### versions\n\nThe versions of ACS, hypervisors, storage, network etc..\n\n### The steps to reproduce the bug\n\n1.\n2.\n3.\n...\n\n\n### What to do about it?\n\n_No response_","author":{"url":"https://github.com/jmsperu","@type":"Person","name":"jmsperu"},"datePublished":"2026-02-21T19:46:43.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":3},"url":"https://github.com/12679/cloudstack/issues/12679"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:aebc4a4b-fe27-96e1-18de-fbd7996f3f1b |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D26C:3DC5A5:BB973A:107F53A:6A4E89E9 |
| html-safe-nonce | 15d0ab2f2bff9087402530da6820013df76b03504a06948bb2e89c6d729cf496 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMjZDOjNEQzVBNTpCQjk3M0E6MTA3RjUzQTo2QTRFODlFOSIsInZpc2l0b3JfaWQiOiI0Mjc4OTcwMTA3OTc0MDI3NzU0IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 0843a2ee5c8fb2e2d626a2163e5f861ea6e55caaf5554bcd7c3d638e22d1afa7 |
| hovercard-subject-tag | issue:3972635797 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/apache/cloudstack/12679/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1460f7128e52d0b415ced06f3e276b8e97549f4ffabaa3e91ec6cb8ca2b2921a/apache/cloudstack/issues/12679 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1460f7128e52d0b415ced06f3e276b8e97549f4ffabaa3e91ec6cb8ca2b2921a/apache/cloudstack/issues/12679 |
| og:image:alt | problem NASBackupProvider.syncBackupStorageStats() crashes with a NullPointerException when ResourceManager.findOneRandomRunningHostByHypervisor() returns null. This happens when no KVM host in the... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | jmsperu |
| hostname | github.com |
| expected-hostname | github.com |
| None | 41b6ab3ba6d20a71766ac245b5a4a94c6fc672a9cd4da7d44c1b33ab8bf6a21c |
| turbo-cache-control | no-preview |
| go-import | github.com/apache/cloudstack git https://github.com/apache/cloudstack.git |
| octolytics-dimension-user_id | 47359 |
| octolytics-dimension-user_login | apache |
| octolytics-dimension-repository_id | 9759448 |
| octolytics-dimension-repository_nwo | apache/cloudstack |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 9759448 |
| octolytics-dimension-repository_network_root_nwo | apache/cloudstack |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | e6a744804e8e70f97b4d5a18a94dcc63db22f97a |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width