From 1aeaf4dcc9b0c34f6ed98f90dc7d059bf9cf05e2 Mon Sep 17 00:00:00 2001 From: Nitin Mehta Date: Fri, 14 Nov 2014 16:19:10 -0800 Subject: [PATCH] CLOUDSTACK-7920: NPE in the payload was causing the ssvm agent to not connect, fix it and also make sure that template/volume sync are robust that exceptions do not cause ssvm agent disconnect issues. (cherry picked from commit 5213401ace08f4a5247a325e9d99a4a66bd7df11) Signed-off-by: Rohit Yadav Conflicts: engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java --- .../storage/datastore/db/VolumeDataStoreDao.java | 2 ++ .../storage/image/db/VolumeDataStoreDaoImpl.java | 16 ++++++++++++++++ .../storage/volume/VolumeServiceImpl.java | 3 ++- .../cloud/storage/download/DownloadListener.java | 12 ++++++++---- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java index 625cc297274..a0561521a93 100644 --- a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java +++ b/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java @@ -46,4 +46,6 @@ public interface VolumeDataStoreDao extends GenericDao, List listVolumeDownloadUrls(); void expireDnldUrlsForZone(Long dcId); + + List listUploadedVolumesByStoreId(long id); } diff --git a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java index 2e29ad79cf7..b71eb2c2324 100644 --- a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java +++ b/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java @@ -52,6 +52,7 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase cacheSearch; private SearchBuilder storeVolumeSearch; private SearchBuilder downloadVolumeSearch; + private SearchBuilder uploadVolumeSearch; private static final String EXPIRE_DOWNLOAD_URLS_FOR_ZONE = "update volume_store_ref set download_url_created=? where store_id in (select id from image_store where data_center_id=?)"; @@ -95,6 +96,12 @@ public class VolumeDataStoreDaoImpl extends GenericDaoBase listUploadedVolumesByStoreId(long id) { + SearchCriteria sc = uploadVolumeSearch.create(); + sc.setParameters("store_id", id); + sc.setParameters("destroyed", false); + return listIncludingRemovedBy(sc); + } + + @Override public void expireDnldUrlsForZone(Long dcId){ TransactionLegacy txn = TransactionLegacy.currentTxn(); diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java index 6a66ea3888a..88f098c642e 100644 --- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java +++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java @@ -26,6 +26,7 @@ import java.util.Map; import javax.inject.Inject; +import com.cloud.storage.RegisterVolumePayload; import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity; import org.apache.cloudstack.engine.subsystem.api.storage.ChapInfo; import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult; @@ -1382,7 +1383,7 @@ public class VolumeServiceImpl implements VolumeService { return; } - List dbVolumes = _volumeStoreDao.listByStoreId(storeId); + List dbVolumes = _volumeStoreDao.listUploadedVolumesByStoreId(storeId); List toBeDownloaded = new ArrayList(dbVolumes); for (VolumeDataStoreVO volumeStore : dbVolumes) { VolumeVO volume = volDao.findById(volumeStore.getVolumeId()); diff --git a/server/src/com/cloud/storage/download/DownloadListener.java b/server/src/com/cloud/storage/download/DownloadListener.java index 4f9a5605e33..814ce3c44be 100755 --- a/server/src/com/cloud/storage/download/DownloadListener.java +++ b/server/src/com/cloud/storage/download/DownloadListener.java @@ -298,10 +298,14 @@ public class DownloadListener implements Listener { } }*/ else if (cmd instanceof StartupSecondaryStorageCommand) { - List imageStores = _storeMgr.getImageStoresByScope(new ZoneScope(agent.getDataCenterId())); - for (DataStore store : imageStores) { - _volumeSrv.handleVolumeSync(store); - _imageSrv.handleTemplateSync(store); + try{ + List imageStores = _storeMgr.getImageStoresByScope(new ZoneScope(agent.getDataCenterId())); + for (DataStore store : imageStores) { + _volumeSrv.handleVolumeSync(store); + _imageSrv.handleTemplateSync(store); + } + }catch (Exception e){ + s_logger.error("Caught exception while doing template/volume sync ", e); } } }