diff --git a/api/src/com/cloud/server/ResourceTag.java b/api/src/com/cloud/server/ResourceTag.java index 16d6dc2c181..ce09fdf955b 100644 --- a/api/src/com/cloud/server/ResourceTag.java +++ b/api/src/com/cloud/server/ResourceTag.java @@ -92,6 +92,8 @@ public interface ResourceTag extends ControlledEntity, Identity, InternalIdentit */ long getResourceId(); + void setResourceId(long resourceId); + /** * @return */ diff --git a/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java b/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java index 66e8979b423..85d08b854c0 100644 --- a/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java +++ b/engine/schema/src/com/cloud/storage/dao/VolumeDaoImpl.java @@ -626,6 +626,7 @@ public class VolumeDaoImpl extends GenericDaoBase implements Vol destVol.setInstanceId(instanceId); update(srcVolId, srcVol); update(destVolId, destVol); + _tagsDao.updateResourceId(srcVolId, destVolId, ResourceObjectType.Volume); } catch (Exception e) { throw new CloudRuntimeException("Unable to persist the sequence number for this host"); } diff --git a/engine/schema/src/com/cloud/tags/ResourceTagVO.java b/engine/schema/src/com/cloud/tags/ResourceTagVO.java index eadddd1e31e..cc29d8ea15a 100644 --- a/engine/schema/src/com/cloud/tags/ResourceTagVO.java +++ b/engine/schema/src/com/cloud/tags/ResourceTagVO.java @@ -143,6 +143,10 @@ public class ResourceTagVO implements ResourceTag { return resourceId; } + @Override public void setResourceId(long resourceId) { + this.resourceId = resourceId; + } + @Override public ResourceObjectType getResourceType() { return resourceType; diff --git a/engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java b/engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java index fffe2a475f2..87662ef0679 100644 --- a/engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java +++ b/engine/schema/src/com/cloud/tags/dao/ResourceTagDao.java @@ -34,4 +34,5 @@ public interface ResourceTagDao extends GenericDao { List listBy(long resourceId, ResourceObjectType resourceType); + void updateResourceId(long srcId, long destId, ResourceObjectType resourceType); } diff --git a/engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java b/engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java index 3611999fda1..a6c26243c21 100644 --- a/engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java +++ b/engine/schema/src/com/cloud/tags/dao/ResourceTagsDaoImpl.java @@ -59,4 +59,14 @@ public class ResourceTagsDaoImpl extends GenericDaoBase imp sc.setParameters("resourceType", resourceType); return listBy(sc); } + + @Override public void updateResourceId(long srcId, long destId, ResourceObjectType resourceType) { + SearchCriteria sc = AllFieldsSearch.create(); + sc.setParameters("resourceId", srcId); + sc.setParameters("resourceType", resourceType); + for( ResourceTagVO tag : listBy(sc)) { + tag.setResourceId(destId); + update(tag.getId(), tag); + } + } }