mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-16 10:32:34 +01:00
Have different callback for create template and create volume since they
will update different tables.
This commit is contained in:
parent
eb93efdaa4
commit
2473ceb111
@ -154,17 +154,16 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
AsyncCallbackDispatcher<CloudStackImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
|
AsyncCallbackDispatcher<CloudStackImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
|
||||||
.create(this);
|
.create(this);
|
||||||
caller.setContext(context);
|
caller.setContext(context);
|
||||||
caller.setCallback(caller.getTarget().createAsyncCallback(null, null));
|
|
||||||
|
|
||||||
if (data.getType() == DataObjectType.TEMPLATE) {
|
if (data.getType() == DataObjectType.TEMPLATE) {
|
||||||
|
caller.setCallback(caller.getTarget().createTemplateAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
||||||
} else if (data.getType() == DataObjectType.VOLUME) {
|
} else if (data.getType() == DataObjectType.VOLUME) {
|
||||||
|
caller.setCallback(caller.getTarget().createVolumeAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Void createAsyncCallback(
|
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<CloudStackImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
AsyncCallbackDispatcher<CloudStackImageStoreDriverImpl, DownloadAnswer> callback,
|
|
||||||
CreateContext<CreateCmdResult> context) {
|
CreateContext<CreateCmdResult> context) {
|
||||||
DownloadAnswer answer = callback.getResult();
|
DownloadAnswer answer = callback.getResult();
|
||||||
DataObject obj = context.data;
|
DataObject obj = context.data;
|
||||||
@ -205,7 +204,48 @@ public class CloudStackImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
templateDao.update(obj.getId(), templateDaoBuilder);
|
templateDao.update(obj.getId(), templateDaoBuilder);
|
||||||
}
|
}
|
||||||
|
|
||||||
CreateCmdResult result = new CreateCmdResult(null, answer);
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
caller.complete(result);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<CloudStackImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
|
CreateContext<CreateCmdResult> context) {
|
||||||
|
DownloadAnswer answer = callback.getResult();
|
||||||
|
DataObject obj = context.data;
|
||||||
|
DataStore store = obj.getDataStore();
|
||||||
|
|
||||||
|
VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(store.getId(), obj.getId());
|
||||||
|
if (volStoreVO != null) {
|
||||||
|
VolumeDataStoreVO updateBuilder = _volumeStoreDao.createForUpdate();
|
||||||
|
updateBuilder.setDownloadPercent(answer.getDownloadPct());
|
||||||
|
updateBuilder.setDownloadState(answer.getDownloadStatus());
|
||||||
|
updateBuilder.setLastUpdated(new Date());
|
||||||
|
updateBuilder.setErrorString(answer.getErrorString());
|
||||||
|
updateBuilder.setJobId(answer.getJobId());
|
||||||
|
updateBuilder.setLocalDownloadPath(answer.getDownloadPath());
|
||||||
|
updateBuilder.setInstallPath(answer.getInstallPath());
|
||||||
|
updateBuilder.setSize(answer.getTemplateSize());
|
||||||
|
updateBuilder.setPhysicalSize(answer.getTemplatePhySicalSize());
|
||||||
|
_volumeStoreDao.update(volStoreVO.getId(), updateBuilder);
|
||||||
|
// update size in volume table
|
||||||
|
VolumeVO volUpdater = volumeDao.createForUpdate();
|
||||||
|
volUpdater.setSize(answer.getTemplateSize());
|
||||||
|
volumeDao.update(obj.getId(), volUpdater);
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncCompletionCallback<CreateCmdResult> caller = context.getParentCallback();
|
||||||
|
|
||||||
|
if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.ABANDONED
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.UNKNOWN) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setResult(answer.getErrorString());
|
||||||
|
caller.complete(result);
|
||||||
|
} else if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
caller.complete(result);
|
caller.complete(result);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -173,11 +173,11 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
|
CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
|
||||||
AsyncCallbackDispatcher<S3ImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher.create(this);
|
AsyncCallbackDispatcher<S3ImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher.create(this);
|
||||||
caller.setContext(context);
|
caller.setContext(context);
|
||||||
caller.setCallback(caller.getTarget().createAsyncCallback(null, null));
|
|
||||||
|
|
||||||
if (data.getType() == DataObjectType.TEMPLATE) {
|
if (data.getType() == DataObjectType.TEMPLATE) {
|
||||||
|
caller.setCallback(caller.getTarget().createTemplateAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
||||||
} else if (data.getType() == DataObjectType.VOLUME) {
|
} else if (data.getType() == DataObjectType.VOLUME) {
|
||||||
|
caller.setCallback(caller.getTarget().createVolumeAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -214,7 +214,7 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Void createAsyncCallback(AsyncCallbackDispatcher<S3ImageStoreDriverImpl, DownloadAnswer> callback,
|
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<S3ImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
CreateContext<CreateCmdResult> context) {
|
CreateContext<CreateCmdResult> context) {
|
||||||
DownloadAnswer answer = callback.getResult();
|
DownloadAnswer answer = callback.getResult();
|
||||||
DataObject obj = context.data;
|
DataObject obj = context.data;
|
||||||
@ -261,6 +261,47 @@ public class S3ImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<S3ImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
|
CreateContext<CreateCmdResult> context) {
|
||||||
|
DownloadAnswer answer = callback.getResult();
|
||||||
|
DataObject obj = context.data;
|
||||||
|
DataStore store = obj.getDataStore();
|
||||||
|
|
||||||
|
VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(store.getId(), obj.getId());
|
||||||
|
if (volStoreVO != null) {
|
||||||
|
VolumeDataStoreVO updateBuilder = _volumeStoreDao.createForUpdate();
|
||||||
|
updateBuilder.setDownloadPercent(answer.getDownloadPct());
|
||||||
|
updateBuilder.setDownloadState(answer.getDownloadStatus());
|
||||||
|
updateBuilder.setLastUpdated(new Date());
|
||||||
|
updateBuilder.setErrorString(answer.getErrorString());
|
||||||
|
updateBuilder.setJobId(answer.getJobId());
|
||||||
|
updateBuilder.setLocalDownloadPath(answer.getDownloadPath());
|
||||||
|
updateBuilder.setInstallPath(answer.getInstallPath());
|
||||||
|
updateBuilder.setSize(answer.getTemplateSize());
|
||||||
|
updateBuilder.setPhysicalSize(answer.getTemplatePhySicalSize());
|
||||||
|
_volumeStoreDao.update(volStoreVO.getId(), updateBuilder);
|
||||||
|
// update size in volume table
|
||||||
|
VolumeVO volUpdater = volumeDao.createForUpdate();
|
||||||
|
volUpdater.setSize(answer.getTemplateSize());
|
||||||
|
volumeDao.update(obj.getId(), volUpdater);
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncCompletionCallback<CreateCmdResult> caller = context.getParentCallback();
|
||||||
|
|
||||||
|
if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.ABANDONED
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.UNKNOWN) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setResult(answer.getErrorString());
|
||||||
|
caller.complete(result);
|
||||||
|
} else if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
caller.complete(result);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void deleteTemplate(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
|
private void deleteTemplate(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
|
||||||
TemplateObject templateObj = (TemplateObject) data;
|
TemplateObject templateObj = (TemplateObject) data;
|
||||||
VMTemplateVO template = templateObj.getImage();
|
VMTemplateVO template = templateObj.getImage();
|
||||||
|
|||||||
@ -172,16 +172,16 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
AsyncCallbackDispatcher<SwiftImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
|
AsyncCallbackDispatcher<SwiftImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
|
||||||
.create(this);
|
.create(this);
|
||||||
caller.setContext(context);
|
caller.setContext(context);
|
||||||
caller.setCallback(caller.getTarget().createAsyncCallback(null, null));
|
|
||||||
|
|
||||||
if (data.getType() == DataObjectType.TEMPLATE) {
|
if (data.getType() == DataObjectType.TEMPLATE) {
|
||||||
|
caller.setCallback(caller.getTarget().createTemplateAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
_downloadMonitor.downloadTemplateToStorage(data, caller);
|
||||||
} else if (data.getType() == DataObjectType.VOLUME) {
|
} else if (data.getType() == DataObjectType.VOLUME) {
|
||||||
|
caller.setCallback(caller.getTarget().createVolumeAsyncCallback(null, null));
|
||||||
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
_downloadMonitor.downloadVolumeToStorage(data, caller);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Void createAsyncCallback(AsyncCallbackDispatcher<SwiftImageStoreDriverImpl, DownloadAnswer> callback,
|
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<SwiftImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
CreateContext<CreateCmdResult> context) {
|
CreateContext<CreateCmdResult> context) {
|
||||||
DownloadAnswer answer = callback.getResult();
|
DownloadAnswer answer = callback.getResult();
|
||||||
DataObject obj = context.data;
|
DataObject obj = context.data;
|
||||||
@ -212,7 +212,7 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.ABANDONED
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.ABANDONED
|
||||||
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.UNKNOWN) {
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.UNKNOWN) {
|
||||||
CreateCmdResult result = new CreateCmdResult(null, null);
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
// result.setSucess(false);
|
result.setSuccess(false);
|
||||||
result.setResult(answer.getErrorString());
|
result.setResult(answer.getErrorString());
|
||||||
caller.complete(result);
|
caller.complete(result);
|
||||||
} else if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
|
} else if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
|
||||||
@ -228,6 +228,47 @@ public class SwiftImageStoreDriverImpl implements ImageStoreDriver {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<SwiftImageStoreDriverImpl, DownloadAnswer> callback,
|
||||||
|
CreateContext<CreateCmdResult> context) {
|
||||||
|
DownloadAnswer answer = callback.getResult();
|
||||||
|
DataObject obj = context.data;
|
||||||
|
DataStore store = obj.getDataStore();
|
||||||
|
|
||||||
|
VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(store.getId(), obj.getId());
|
||||||
|
if (volStoreVO != null) {
|
||||||
|
VolumeDataStoreVO updateBuilder = _volumeStoreDao.createForUpdate();
|
||||||
|
updateBuilder.setDownloadPercent(answer.getDownloadPct());
|
||||||
|
updateBuilder.setDownloadState(answer.getDownloadStatus());
|
||||||
|
updateBuilder.setLastUpdated(new Date());
|
||||||
|
updateBuilder.setErrorString(answer.getErrorString());
|
||||||
|
updateBuilder.setJobId(answer.getJobId());
|
||||||
|
updateBuilder.setLocalDownloadPath(answer.getDownloadPath());
|
||||||
|
updateBuilder.setInstallPath(answer.getInstallPath());
|
||||||
|
updateBuilder.setSize(answer.getTemplateSize());
|
||||||
|
updateBuilder.setPhysicalSize(answer.getTemplatePhySicalSize());
|
||||||
|
_volumeStoreDao.update(volStoreVO.getId(), updateBuilder);
|
||||||
|
// update size in volume table
|
||||||
|
VolumeVO volUpdater = volumeDao.createForUpdate();
|
||||||
|
volUpdater.setSize(answer.getTemplateSize());
|
||||||
|
volumeDao.update(obj.getId(), volUpdater);
|
||||||
|
}
|
||||||
|
|
||||||
|
AsyncCompletionCallback<CreateCmdResult> caller = context.getParentCallback();
|
||||||
|
|
||||||
|
if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.ABANDONED
|
||||||
|
|| answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.UNKNOWN) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
result.setSuccess(false);
|
||||||
|
result.setResult(answer.getErrorString());
|
||||||
|
caller.complete(result);
|
||||||
|
} else if (answer.getDownloadStatus() == VMTemplateStorageResourceAssoc.Status.DOWNLOADED) {
|
||||||
|
CreateCmdResult result = new CreateCmdResult(null, null);
|
||||||
|
caller.complete(result);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private void deleteVolume(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
|
private void deleteVolume(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
VolumeVO vol = volumeDao.findById(data.getId());
|
VolumeVO vol = volumeDao.findById(data.getId());
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user