Repository: cloudstack
Updated Branches:
  refs/heads/master 39a671dfd -> 5213401ac


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.


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/5213401a
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/5213401a
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/5213401a

Branch: refs/heads/master
Commit: 5213401ace08f4a5247a325e9d99a4a66bd7df11
Parents: 39a671d
Author: Nitin Mehta <[email protected]>
Authored: Fri Nov 14 16:19:10 2014 -0800
Committer: Nitin Mehta <[email protected]>
Committed: Fri Nov 14 16:19:10 2014 -0800

----------------------------------------------------------------------
 .../storage/datastore/db/VolumeDataStoreDao.java    |  2 ++
 .../storage/image/db/VolumeDataStoreDaoImpl.java    | 16 ++++++++++++++++
 .../storage/volume/VolumeServiceImpl.java           |  5 ++++-
 .../cloud/storage/download/DownloadListener.java    | 12 ++++++++----
 4 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5213401a/engine/schema/src/org/apache/cloudstack/storage/datastore/db/VolumeDataStoreDao.java
----------------------------------------------------------------------
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 625cc29..a056152 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<VolumeDataStoreVO, Long>,
     List<VolumeDataStoreVO> listVolumeDownloadUrls();
 
     void expireDnldUrlsForZone(Long dcId);
+
+    List<VolumeDataStoreVO> listUploadedVolumesByStoreId(long id);
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5213401a/engine/storage/src/org/apache/cloudstack/storage/image/db/VolumeDataStoreDaoImpl.java
----------------------------------------------------------------------
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 2e29ad7..b71eb2c 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<VolumeDataStoreVO, Lo
     private SearchBuilder<VolumeDataStoreVO> cacheSearch;
     private SearchBuilder<VolumeDataStoreVO> storeVolumeSearch;
     private SearchBuilder<VolumeDataStoreVO> downloadVolumeSearch;
+    private SearchBuilder<VolumeDataStoreVO> 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<VolumeDataStoreVO, Lo
         downloadVolumeSearch.and("destroyed", 
downloadVolumeSearch.entity().getDestroyed(), SearchCriteria.Op.EQ);
         downloadVolumeSearch.done();
 
+        uploadVolumeSearch = createSearchBuilder();
+        uploadVolumeSearch.and("store_id", 
uploadVolumeSearch.entity().getDataStoreId(), SearchCriteria.Op.EQ);
+        uploadVolumeSearch.and("url", 
uploadVolumeSearch.entity().getDownloadUrl(), Op.NNULL);
+        uploadVolumeSearch.and("destroyed", 
uploadVolumeSearch.entity().getDestroyed(), SearchCriteria.Op.EQ);
+        uploadVolumeSearch.done();
+
         return true;
     }
 
@@ -272,6 +279,15 @@ public class VolumeDataStoreDaoImpl extends 
GenericDaoBase<VolumeDataStoreVO, Lo
     }
 
     @Override
+    public List<VolumeDataStoreVO> listUploadedVolumesByStoreId(long id) {
+        SearchCriteria<VolumeDataStoreVO> 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();
         PreparedStatement pstmt = null;

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5213401a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/VolumeServiceImpl.java
----------------------------------------------------------------------
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 174874a..edb50b2 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;
@@ -1370,7 +1371,7 @@ public class VolumeServiceImpl implements VolumeService {
                         return;
                     }
 
-                    List<VolumeDataStoreVO> dbVolumes = 
_volumeStoreDao.listByStoreId(storeId);
+                    List<VolumeDataStoreVO> dbVolumes = 
_volumeStoreDao.listUploadedVolumesByStoreId(storeId);
                     List<VolumeDataStoreVO> toBeDownloaded = new 
ArrayList<VolumeDataStoreVO>(dbVolumes);
                     for (VolumeDataStoreVO volumeStore : dbVolumes) {
                         VolumeVO volume = 
_volumeDao.findById(volumeStore.getVolumeId());
@@ -1467,6 +1468,8 @@ public class VolumeServiceImpl implements VolumeService {
                             s_logger.debug("Volume " + 
volumeHost.getVolumeId() + " needs to be downloaded to " + store.getName());
                             // TODO: pass a callback later
                             VolumeInfo vol = 
volFactory.getVolume(volumeHost.getVolumeId());
+                            RegisterVolumePayload payload = new 
RegisterVolumePayload(volumeHost.getDownloadUrl(), volumeHost.getChecksum(), 
vol.getFormat().toString());
+                            vol.addPayload(payload);
                             createVolumeAsync(vol, store);
                         }
                     }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/5213401a/server/src/com/cloud/storage/download/DownloadListener.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/download/DownloadListener.java 
b/server/src/com/cloud/storage/download/DownloadListener.java
index 4f9a560..814ce3c 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<DataStore> imageStores = _storeMgr.getImageStoresByScope(new 
ZoneScope(agent.getDataCenterId()));
-            for (DataStore store : imageStores) {
-                _volumeSrv.handleVolumeSync(store);
-                _imageSrv.handleTemplateSync(store);
+            try{
+                List<DataStore> 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);
             }
         }
     }

Reply via email to