Skip to content

Commit d006fd1

Browse files
author
Abhinandan Prateek
committed
bug 9909: upload manager support multiple secondary storage
1 parent baa638a commit d006fd1

3 files changed

Lines changed: 32 additions & 15 deletions

File tree

core/src/com/cloud/storage/resource/NfsSecondaryStorageResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -539,8 +539,8 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
539539
_params.put(StorageLayer.InstanceConfigKey, _storage);
540540
_dlMgr = new DownloadManagerImpl();
541541
_dlMgr.configure("DownloadManager", _params);
542-
//_upldMgr = new UploadManagerImpl();
543-
//_upldMgr.configure("UploadManager", params);
542+
_upldMgr = new UploadManagerImpl();
543+
_upldMgr.configure("UploadManager", params);
544544
} catch (ConfigurationException e) {
545545
s_logger.warn("Caught problem while configuring DownloadManager", e);
546546
return false;

server/src/com/cloud/storage/upload/UploadMonitorImpl.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,20 @@ public UploadVO createEntityDownloadURL(VMTemplateVO template, VMTemplateHostVO
200200

201201
Type type = (template.getFormat() == ImageFormat.ISO) ? Type.ISO : Type.TEMPLATE ;
202202

203-
//Check if ssvm is up
204-
HostVO sserver = storageServers.get(0);
205-
if(sserver.getStatus() != com.cloud.host.Status.Up){
206-
throw new CloudRuntimeException("Couldnt create extract link - Secondary Storage Vm is not up");
207-
}
203+
List<HostVO> storageServerVMs = _serverDao.listByTypeDataCenter(Host.Type.SecondaryStorageVM, dataCenterId);
204+
//Check if one ssvm is up
205+
boolean no_vm_up = true;
206+
HostVO use_ssvm = null;
207+
for (HostVO ssvm: storageServerVMs){
208+
if(ssvm.getStatus() == com.cloud.host.Status.Up){
209+
no_vm_up = false;
210+
use_ssvm = ssvm;
211+
break;
212+
}
213+
}
214+
if(no_vm_up){
215+
throw new CloudRuntimeException("Couldnt create extract link - Secondary Storage Vm is not up");
216+
}
208217

209218
//Check if it already exists.
210219
List<UploadVO> extractURLList = _uploadDao.listByTypeUploadStatus(template.getId(), type, UploadVO.Status.DOWNLOAD_URL_CREATED);
@@ -213,15 +222,15 @@ public UploadVO createEntityDownloadURL(VMTemplateVO template, VMTemplateHostVO
213222
}
214223

215224
// It doesn't exist so create a DB entry.
216-
UploadVO uploadTemplateObj = new UploadVO(sserver.getId(), template.getId(), new Date(),
225+
UploadVO uploadTemplateObj = new UploadVO(use_ssvm.getId(), template.getId(), new Date(),
217226
Status.DOWNLOAD_URL_NOT_CREATED, 0, type, Mode.HTTP_DOWNLOAD);
218227
uploadTemplateObj.setInstallPath(vmTemplateHost.getInstallPath());
219228
_uploadDao.persist(uploadTemplateObj);
220229
try{
221230
// Create Symlink at ssvm
222231
String uuid = UUID.randomUUID().toString() + ".vhd";
223232
CreateEntityDownloadURLCommand cmd = new CreateEntityDownloadURLCommand(vmTemplateHost.getInstallPath(), uuid);
224-
long result = send(sserver.getId(), cmd, null);
233+
long result = send(use_ssvm.getId(), cmd, null);
225234
if (result == -1){
226235
errorString = "Unable to create a link for " +type+ " id:"+template.getId();
227236
s_logger.error(errorString);
@@ -230,7 +239,7 @@ public UploadVO createEntityDownloadURL(VMTemplateVO template, VMTemplateHostVO
230239

231240
//Construct actual URL locally now that the symlink exists at SSVM
232241
List<SecondaryStorageVmVO> ssVms = _secStorageVmDao.getSecStorageVmListInStates(SecondaryStorageVm.Role.templateProcessor, dataCenterId, State.Running);
233-
if (ssVms.size() > 0) {
242+
if (ssVms.size() > 0) {
234243
SecondaryStorageVmVO ssVm = ssVms.get(0);
235244
if (ssVm.getPublicIpAddress() == null) {
236245
errorString = "A running secondary storage vm has a null public ip?";

server/src/com/cloud/template/TemplateManagerImpl.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,12 +262,20 @@ private Long extract(Account account, Long templateId, String url, Long zoneId,
262262
}
263263
}
264264

265-
HostVO secondaryStorageHost = _storageMgr.getSecondaryStorageHost(zoneId);
265+
List<HostVO> sservers = _storageMgr.getSecondaryStorageHosts(zoneId);
266+
266267
VMTemplateHostVO tmpltHostRef = null;
267-
if (secondaryStorageHost != null) {
268-
tmpltHostRef = _tmpltHostDao.findByHostTemplate(secondaryStorageHost.getId(), templateId);
269-
if (tmpltHostRef != null && tmpltHostRef.getDownloadState() != com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
270-
throw new InvalidParameterValueException("The " + desc + " has not been downloaded ");
268+
if (sservers != null) {
269+
for(HostVO secondaryStorageHost: sservers){
270+
tmpltHostRef = _tmpltHostDao.findByHostTemplate(secondaryStorageHost.getId(), templateId);
271+
if (tmpltHostRef != null){
272+
if (tmpltHostRef.getDownloadState() != com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
273+
throw new InvalidParameterValueException("The " + desc + " has not been downloaded ");
274+
}
275+
else {
276+
break;
277+
}
278+
}
271279
}
272280
}
273281

0 commit comments

Comments
 (0)