From 565bdfb27b0e5a151d7acbc6471c676bb1e2ec25 Mon Sep 17 00:00:00 2001 From: Min Chen Date: Mon, 20 May 2013 16:21:45 -0700 Subject: [PATCH] Fix CLOUDSTACK-2525: clean up db entries in vm_template and template_store_ref in case of template creation failure. --- .../storage/datastore/db/TemplateDataStoreDao.java | 2 ++ .../storage/image/db/TemplateDataStoreDaoImpl.java | 9 +++++++++ server/src/com/cloud/template/TemplateManagerImpl.java | 2 ++ 3 files changed, 13 insertions(+) diff --git a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java index dbb8dbdbc6d..b83c590266f 100644 --- a/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java +++ b/engine/api/src/org/apache/cloudstack/storage/datastore/db/TemplateDataStoreDao.java @@ -37,6 +37,8 @@ public interface TemplateDataStoreDao extends GenericDao listByTemplateStore(long templateId, long storeId); List listByTemplateStoreStatus(long templateId, long storeId, State... states); diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java index 345098c6898..d41733d6d29 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/TemplateDataStoreDaoImpl.java @@ -182,6 +182,15 @@ public class TemplateDataStoreDaoImpl extends GenericDaoBase sc = templateSearch.create(); + sc.setParameters("template_id", templateId); + Transaction txn = Transaction.currentTxn(); + txn.start(); + expunge(sc); + txn.commit(); + } @Override public List listByTemplateStore(long templateId, long storeId) { diff --git a/server/src/com/cloud/template/TemplateManagerImpl.java b/server/src/com/cloud/template/TemplateManagerImpl.java index c78377309de..dca892f0037 100755 --- a/server/src/com/cloud/template/TemplateManagerImpl.java +++ b/server/src/com/cloud/template/TemplateManagerImpl.java @@ -1456,6 +1456,8 @@ public class TemplateManagerImpl extends ManagerBase implements TemplateManager, if (privateTemplate == null) { Transaction txn = Transaction.currentTxn(); txn.start(); + // Remove the template_store_ref record first, otherwise, we cannot remove the template record due to FK constraints + this._tmplStoreDao.deletePrimaryRecordsForTemplate(templateId); // Remove the template record this._tmpltDao.expunge(templateId);