diff --git a/core/src/com/cloud/storage/resource/LocalSecondaryStorageResource.java b/core/src/com/cloud/storage/resource/LocalSecondaryStorageResource.java index cee6b2a67ee..c281682a2de 100644 --- a/core/src/com/cloud/storage/resource/LocalSecondaryStorageResource.java +++ b/core/src/com/cloud/storage/resource/LocalSecondaryStorageResource.java @@ -29,6 +29,7 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.CheckHealthAnswer; import com.cloud.agent.api.CheckHealthCommand; import com.cloud.agent.api.Command; +import com.cloud.agent.api.ComputeChecksumCommand; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.PingStorageCommand; import com.cloud.agent.api.ReadyAnswer; @@ -97,11 +98,18 @@ public class LocalSecondaryStorageResource extends ServerResourceBase implements return new ReadyAnswer((ReadyCommand)cmd); } else if (cmd instanceof ListTemplateCommand){ return execute((ListTemplateCommand)cmd); + } else if (cmd instanceof ComputeChecksumCommand){ + return execute((ComputeChecksumCommand)cmd); } else { return Answer.createUnsupportedCommandAnswer(cmd); } } + private Answer execute(ComputeChecksumCommand cmd) { + return new Answer(cmd, false, null); + } + + private Answer execute(ListTemplateCommand cmd) { String root = getRootDir(); Map templateInfos = _dlMgr.gatherTemplateInfo(root); diff --git a/server/src/com/cloud/host/dao/HostDao.java b/server/src/com/cloud/host/dao/HostDao.java index 54f2214c4a1..e91b2326224 100644 --- a/server/src/com/cloud/host/dao/HostDao.java +++ b/server/src/com/cloud/host/dao/HostDao.java @@ -173,4 +173,6 @@ public interface HostDao extends GenericDao { List listLocalSecondaryStorageHosts(); List listLocalSecondaryStorageHosts(long dataCenterId); + + List listAllSecondaryStorageHosts(long dataCenterId); } diff --git a/server/src/com/cloud/host/dao/HostDaoImpl.java b/server/src/com/cloud/host/dao/HostDaoImpl.java index 0be14a7cdea..ef7e598c70a 100644 --- a/server/src/com/cloud/host/dao/HostDaoImpl.java +++ b/server/src/com/cloud/host/dao/HostDaoImpl.java @@ -317,6 +317,14 @@ public class HostDaoImpl extends GenericDaoBase implements HostDao return search(sc, null); } + + @Override + public List listAllSecondaryStorageHosts(long dataCenterId) { + SearchCriteria sc = createSearchCriteria(); + sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, dataCenterId); + sc.addAnd("type", SearchCriteria.Op.IN, new Object[]{Host.Type.LocalSecondaryStorage, Host.Type.SecondaryStorage}); + return search(sc, null); + } @Override public List findDirectlyConnectedHosts() { diff --git a/server/src/com/cloud/server/ManagementServerImpl.java b/server/src/com/cloud/server/ManagementServerImpl.java index b066db40c95..86595708e18 100755 --- a/server/src/com/cloud/server/ManagementServerImpl.java +++ b/server/src/com/cloud/server/ManagementServerImpl.java @@ -1307,7 +1307,7 @@ public class ManagementServerImpl implements ManagementServer { sc.addAnd("name", SearchCriteria.Op.LIKE, "%" + name + "%"); } if (type != null) { - sc.addAnd("type", SearchCriteria.Op.EQ, type); + sc.addAnd("type", SearchCriteria.Op.LIKE, "%" + type + "%"); } if (state != null) { sc.addAnd("status", SearchCriteria.Op.EQ, state); diff --git a/server/src/com/cloud/server/StatsCollector.java b/server/src/com/cloud/server/StatsCollector.java index 773e71450d8..e52205867f3 100755 --- a/server/src/com/cloud/server/StatsCollector.java +++ b/server/src/com/cloud/server/StatsCollector.java @@ -152,6 +152,7 @@ public class StatsCollector { sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.Storage.toString()); sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.ConsoleProxy.toString()); sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.SecondaryStorage.toString()); + sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.LocalSecondaryStorage.toString()); sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.TrafficMonitor.toString()); sc.addAnd("type", SearchCriteria.Op.NEQ, Host.Type.SecondaryStorageVM.toString()); ConcurrentHashMap hostStats = new ConcurrentHashMap(); diff --git a/server/src/com/cloud/storage/StorageManagerImpl.java b/server/src/com/cloud/storage/StorageManagerImpl.java index d1f70f26c65..03d8908e92f 100755 --- a/server/src/com/cloud/storage/StorageManagerImpl.java +++ b/server/src/com/cloud/storage/StorageManagerImpl.java @@ -959,7 +959,10 @@ public class StorageManagerImpl implements StorageManager, StorageService, Manag public HostVO getSecondaryStorageHost(long zoneId) { List hosts = _hostDao.listSecondaryStorageHosts(zoneId); if( hosts == null || hosts.size() == 0) { - return null; + hosts = _hostDao.listLocalSecondaryStorageHosts(zoneId); + if (hosts.isEmpty()) { + return null; + } } int size = hosts.size(); diff --git a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java index 9e9fca8a088..07fbbb844ce 100755 --- a/server/src/com/cloud/storage/download/DownloadMonitorImpl.java +++ b/server/src/com/cloud/storage/download/DownloadMonitorImpl.java @@ -360,7 +360,7 @@ public class DownloadMonitorImpl implements DownloadMonitor { dcs.add(_dcDao.findById(zoneId)); } for ( DataCenterVO dc : dcs ) { - List ssHosts = _hostDao.listBy(Host.Type.SecondaryStorage, dc.getId()); + List ssHosts = _hostDao.listAllSecondaryStorageHosts(dc.getId()); for ( HostVO ssHost : ssHosts ) { if (isTemplateUpdateable(ssHost.getId(), templateId)) { @@ -533,7 +533,7 @@ public class DownloadMonitorImpl implements DownloadMonitor { s_logger.warn("Huh? Agent id " + sserverId + " does not correspond to a row in hosts table?"); return; } - if ( ssHost.getType() != Host.Type.SecondaryStorage ) { + if ( !(ssHost.getType() == Host.Type.SecondaryStorage || ssHost.getType() == Host.Type.LocalSecondaryStorage) ) { s_logger.warn("Huh? Agent id " + sserverId + " is not secondary storage host"); return; } @@ -676,7 +676,8 @@ public class DownloadMonitorImpl implements DownloadMonitor { } //This code is mostly for migration purposes so that we have checksum for all the templates - checksumSync(sserverId); + if (ssHost.getType() == Host.Type.SecondaryStorage) + checksumSync(sserverId); } diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java index 914c78757a2..aa6dbecd35a 100755 --- a/server/src/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/com/cloud/vm/UserVmManagerImpl.java @@ -1598,7 +1598,7 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager String secUrl = ssHost.getStorageUrl(); Answer answer; answer = _agentMgr.sendToSecStorage(ssHost, new ComputeChecksumCommand(secUrl, templatePath)); - if(answer.getResult()) { + if(answer != null && answer.getResult()) { return answer.getDetails(); } return null;