From e56495e772e0cbc00a396692196d545d6b483842 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Fri, 1 Mar 2024 19:57:24 +0530 Subject: [PATCH 1/2] snapshot: don't schedule next snapshot job for a removed volume When management server starts, it starts the snapshot scheduler. In case there is a volume snapshot policy which exists for a volume which does not exist, it can cause SQL constraint issue and cause the management server to break from starting its various components and cause HTTP 503 error. Signed-off-by: Rohit Yadav --- .../com/cloud/storage/snapshot/SnapshotSchedulerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index a9c402c86be6..f41e2235a9e0 100644 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -378,6 +378,12 @@ public Date scheduleNextSnapshotJob(final SnapshotPolicyVO policy) { if (policyId == Snapshot.MANUAL_POLICY_ID) { return null; } + + if (_volsDao.findById(policy.getVolumeId()) == null) { + s_logger.warn("Found snapshot policy ID: " + policyId + " for volume ID: " + policy.getVolumeId() + " that does not exist or has been removed"); + return null; + } + final Date nextSnapshotTimestamp = getNextScheduledTime(policyId, _currentTimestamp); SnapshotScheduleVO spstSchedVO = _snapshotScheduleDao.findOneByVolumePolicy(policy.getVolumeId(), policy.getId()); if (spstSchedVO == null) { From 5ceddcd8d33ae4b2f4c818ad16a3730216acd783 Mon Sep 17 00:00:00 2001 From: Rohit Yadav Date: Wed, 13 Mar 2024 22:47:15 +0530 Subject: [PATCH 2/2] remove schedule on missing volume --- .../java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java index f41e2235a9e0..d4fe08397f9e 100644 --- a/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java +++ b/server/src/main/java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java @@ -381,6 +381,7 @@ public Date scheduleNextSnapshotJob(final SnapshotPolicyVO policy) { if (_volsDao.findById(policy.getVolumeId()) == null) { s_logger.warn("Found snapshot policy ID: " + policyId + " for volume ID: " + policy.getVolumeId() + " that does not exist or has been removed"); + removeSchedule(policy.getVolumeId(), policy.getId()); return null; }