From cd8af6a3e2a180ea4d2cfea8a273dbb0929e0a87 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Wed, 12 Mar 2014 15:44:18 -0700 Subject: [PATCH] CLOUDSTACK-6236:Negative ref_cnt of template(snapshot/volume)_store_ref results in out-of-range error in Mysql --- .../storage/datastore/db/SnapshotDataStoreVO.java | 11 ++++++++++- .../storage/datastore/db/TemplateDataStoreVO.java | 11 ++++++++++- .../storage/datastore/db/VolumeDataStoreVO.java | 11 ++++++++++- 3 files changed, 30 insertions(+), 3 deletions(-) diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java index 8b68d6c9038..75b1d75dd6a 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/SnapshotDataStoreVO.java @@ -29,6 +29,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.log4j.Logger; + import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; @@ -44,6 +46,8 @@ import com.cloud.utils.fsm.StateObject; @Entity @Table(name = "snapshot_store_ref") public class SnapshotDataStoreVO implements StateObject, DataObjectInStore { + private static final Logger s_logger = Logger.getLogger(SnapshotDataStoreVO.class); + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @@ -272,7 +276,12 @@ public class SnapshotDataStoreVO implements StateObject 0) { + refCnt--; + } + else { + s_logger.warn("We should not try to decrement a zero reference count even though our code has guarded"); + } } public Long getVolumeId() { diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java index 897fee0e4de..bb40bf5d11a 100755 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreVO.java @@ -29,6 +29,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.log4j.Logger; + import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; @@ -45,6 +47,8 @@ import com.cloud.utils.fsm.StateObject; @Entity @Table(name = "template_store_ref") public class TemplateDataStoreVO implements StateObject, DataObjectInStore { + private static final Logger s_logger = Logger.getLogger(TemplateDataStoreVO.class); + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @@ -367,7 +371,12 @@ public class TemplateDataStoreVO implements StateObject 0) { + refCnt--; + } + else{ + s_logger.warn("We should not try to decrement a zero reference count even though our code has guarded"); + } } } diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java index fe6aca4c3d2..588eae8ba57 100755 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreVO.java @@ -29,6 +29,8 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; +import org.apache.log4j.Logger; + import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine; import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State; @@ -44,6 +46,8 @@ import com.cloud.utils.fsm.StateObject; @Entity @Table(name = "volume_store_ref") public class VolumeDataStoreVO implements StateObject, DataObjectInStore { + private static final Logger s_logger = Logger.getLogger(VolumeDataStoreVO.class); + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) Long id; @@ -342,7 +346,12 @@ public class VolumeDataStoreVO implements StateObject 0) { + refCnt--; + } + else { + s_logger.warn("We should not try to decrement a zero reference count even though our code has guarded"); + } } public void incrRefCnt() {