This is an automated email from the ASF dual-hosted git repository.

joao pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.18 by this push:
     new 720407ba737 snapshot: don't schedule next snapshot job for a removed 
volume (#8735)
720407ba737 is described below

commit 720407ba73796d1bbbd56b3f65a5567143036c3e
Author: Rohit Yadav <[email protected]>
AuthorDate: Tue Mar 19 17:31:58 2024 +0530

    snapshot: don't schedule next snapshot job for a removed volume (#8735)
    
    * 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 <[email protected]>
    
    * remove schedule on missing volume
    
    ---------
    
    Signed-off-by: Rohit Yadav <[email protected]>
---
 .../java/com/cloud/storage/snapshot/SnapshotSchedulerImpl.java     | 7 +++++++
 1 file changed, 7 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 a9c402c86be..d4fe08397f9 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,13 @@ public class SnapshotSchedulerImpl extends ManagerBase 
implements SnapshotSchedu
         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");
+            removeSchedule(policy.getVolumeId(), policy.getId());
+            return null;
+        }
+
         final Date nextSnapshotTimestamp = getNextScheduledTime(policyId, 
_currentTimestamp);
         SnapshotScheduleVO spstSchedVO = 
_snapshotScheduleDao.findOneByVolumePolicy(policy.getVolumeId(), 
policy.getId());
         if (spstSchedVO == null) {

Reply via email to