@Override public String getSecondaryStorageStoreUrl(long dcId) { List<HostVO> secStorageHosts = _hostDao.listSecondaryStorageHosts(dcId); if (secStorageHosts.size() > 0) return secStorageHosts.get(0).getStorageUrl(); return null; }
@Override public Pair<AfterScanAction, Object> scanPool(Long pool) { long dataCenterId = pool.longValue(); List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates( SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running, State.Migrating, State.Starting, State.Stopped, State.Stopping); int vmSize = (ssVms == null) ? 0 : ssVms.size(); List<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(dataCenterId); int hostSize = (ssHosts == null) ? 0 : ssHosts.size(); if (hostSize > vmSize) { s_logger.info( "No secondary storage vms found in datacenter id=" + dataCenterId + ", starting a new one"); return new Pair<AfterScanAction, Object>( AfterScanAction.expand, SecondaryStorageVm.Role.templateProcessor); } return new Pair<AfterScanAction, Object>( AfterScanAction.nop, SecondaryStorageVm.Role.templateProcessor); }
@Override public boolean generateSetupCommand(Long ssHostId) { HostVO cssHost = _hostDao.findById(ssHostId); Long zoneId = cssHost.getDataCenterId(); if (cssHost.getType() == Host.Type.SecondaryStorageVM) { SecondaryStorageVmVO secStorageVm = _secStorageVmDao.findByInstanceName(cssHost.getName()); if (secStorageVm == null) { s_logger.warn("secondary storage VM " + cssHost.getName() + " doesn't exist"); return false; } List<HostVO> ssHosts = _hostDao.listSecondaryStorageHosts(zoneId); for (HostVO ssHost : ssHosts) { String secUrl = ssHost.getStorageUrl(); SecStorageSetupCommand setupCmd = new SecStorageSetupCommand(secUrl); Answer answer = _agentMgr.easySend(ssHostId, setupCmd); if (answer != null && answer.getResult()) { SecStorageSetupAnswer an = (SecStorageSetupAnswer) answer; ssHost.setParent(an.get_dir()); _hostDao.update(ssHost.getId(), ssHost); if (s_logger.isDebugEnabled()) { s_logger.debug( "Successfully programmed secondary storage " + ssHost.getName() + " in secondary storage VM " + secStorageVm.getInstanceName()); } } else { if (s_logger.isDebugEnabled()) { s_logger.debug( "Successfully programmed secondary storage " + ssHost.getName() + " in secondary storage VM " + secStorageVm.getInstanceName()); } return false; } } } else if (cssHost.getType() == Host.Type.SecondaryStorage) { List<SecondaryStorageVmVO> alreadyRunning = _secStorageVmDao.getSecStorageVmListInStates( SecondaryStorageVm.Role.templateProcessor, zoneId, State.Running); String secUrl = cssHost.getStorageUrl(); SecStorageSetupCommand setupCmd = new SecStorageSetupCommand(secUrl); for (SecondaryStorageVmVO ssVm : alreadyRunning) { HostVO host = _hostDao.findByName(ssVm.getInstanceName()); Answer answer = _agentMgr.easySend(host.getId(), setupCmd); if (answer != null && answer.getResult()) { if (s_logger.isDebugEnabled()) { s_logger.debug( "Successfully programmed secondary storage " + host.getName() + " in secondary storage VM " + ssVm.getInstanceName()); } } else { if (s_logger.isDebugEnabled()) { s_logger.debug( "Successfully programmed secondary storage " + host.getName() + " in secondary storage VM " + ssVm.getInstanceName()); } return false; } } } return true; }