Skip to content

Commit 49ded7e

Browse files
sudisonPrasanna Santhanam
authored andcommitted
the plugin better not touch database
1 parent 57641d8 commit 49ded7e

4 files changed

Lines changed: 52 additions & 101 deletions

File tree

engine/storage/src/org/apache/cloudstack/storage/image/BaseImageStoreDriverImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public DataTO getTO(DataObject data) {
6868
return null;
6969
}
7070

71-
class CreateContext<T> extends AsyncRpcContext<T> {
71+
protected class CreateContext<T> extends AsyncRpcContext<T> {
7272
final DataObject data;
7373

7474
public CreateContext(AsyncCompletionCallback<T> callback, DataObject data) {
@@ -92,7 +92,7 @@ public void createAsync(DataStore dataStore, DataObject data, AsyncCompletionCal
9292
}
9393
}
9494

95-
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<BaseImageStoreDriverImpl, DownloadAnswer> callback,
95+
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<? extends BaseImageStoreDriverImpl, DownloadAnswer> callback,
9696
CreateContext<CreateCmdResult> context) {
9797
DownloadAnswer answer = callback.getResult();
9898
DataObject obj = context.data;
@@ -139,7 +139,7 @@ protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<BaseImageStor
139139
return null;
140140
}
141141

142-
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<BaseImageStoreDriverImpl, DownloadAnswer> callback,
142+
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<? extends BaseImageStoreDriverImpl, DownloadAnswer> callback,
143143
CreateContext<CreateCmdResult> context) {
144144
DownloadAnswer answer = callback.getResult();
145145
DataObject obj = context.data;

plugins/storage/image/simulator/src/org/apache/cloudstack/storage/datastore/driver/SimulatorImageStoreDriverImpl.java

Lines changed: 28 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -26,28 +26,20 @@
2626
import com.cloud.agent.api.to.NfsTO;
2727
import com.cloud.storage.Storage;
2828
import com.cloud.storage.VMTemplateStorageResourceAssoc;
29-
import com.cloud.storage.VMTemplateVO;
30-
import com.cloud.storage.VolumeVO;
3129
import com.cloud.storage.dao.VMTemplateDao;
3230
import com.cloud.storage.dao.VolumeDao;
3331
import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
3432
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
3533
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
36-
import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
3734
import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
3835
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
39-
import org.apache.cloudstack.framework.async.AsyncRpcContext;
4036
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreDao;
41-
import org.apache.cloudstack.storage.datastore.db.TemplateDataStoreVO;
4237
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreDao;
43-
import org.apache.cloudstack.storage.datastore.db.VolumeDataStoreVO;
4438
import org.apache.cloudstack.storage.image.BaseImageStoreDriverImpl;
4539
import org.apache.cloudstack.storage.image.store.ImageStoreImpl;
46-
import org.apache.cloudstack.storage.to.TemplateObjectTO;
47-
import org.apache.cloudstack.storage.to.VolumeObjectTO;
4840

4941
import javax.inject.Inject;
50-
import java.util.Date;
42+
import java.util.UUID;
5143

5244
public class SimulatorImageStoreDriverImpl extends BaseImageStoreDriverImpl {
5345

@@ -69,82 +61,46 @@ public DataStoreTO getStoreTO(DataStore store) {
6961
return nfsTO;
7062
}
7163

72-
class CreateContext<T> extends AsyncRpcContext<T> {
73-
final DataObject data;
7464

75-
public CreateContext(AsyncCompletionCallback<T> callback, DataObject data) {
76-
super(callback);
77-
this.data = data;
78-
}
79-
}
8065

8166
public String createEntityExtractUrl(DataStore store, String installPath, Storage.ImageFormat format) {
8267
return null;
8368
}
8469

8570
@Override
86-
public void createAsync(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
87-
CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
88-
AsyncCallbackDispatcher<SimulatorImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
89-
.create(this);
90-
caller.setContext(context);
71+
public void createAsync(DataStore store, DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
9172
if (data.getType() == DataObjectType.TEMPLATE) {
92-
this.createTemplateAsyncCallback(caller, context);
73+
this.createTemplate(data, callback);
9374
} else if (data.getType() == DataObjectType.VOLUME) {
94-
this.createVolumeAsyncCallback(caller, context);
75+
this.createVolume(data, callback);
9576
}
9677
}
9778

98-
protected Void createTemplateAsyncCallback(AsyncCallbackDispatcher<SimulatorImageStoreDriverImpl, DownloadAnswer> callback,
99-
CreateContext<CreateCmdResult> context) {
100-
DataObject obj = context.data;
101-
DataStore store = obj.getDataStore();
102-
TemplateObjectTO templateTO = (TemplateObjectTO)context.data.getTO();
103-
104-
TemplateDataStoreVO tmpltStoreVO = _templateStoreDao.findByStoreTemplate(store.getId(), obj.getId());
105-
if (tmpltStoreVO != null) {
106-
TemplateDataStoreVO updateBuilder = _templateStoreDao.createForUpdate();
107-
updateBuilder.setDownloadPercent(100);
108-
updateBuilder.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
109-
updateBuilder.setLastUpdated(new Date());
110-
updateBuilder.setSize(new Long(5 * 1024L * 1024L));
111-
updateBuilder.setPhysicalSize(new Long(5 * 1024L * 1024L));
112-
updateBuilder.setDownloadUrl(templateTO.getOrigUrl());
113-
updateBuilder.setInstallPath(templateTO.getPath());
114-
updateBuilder.setTemplateId(templateTO.getId());
115-
updateBuilder.setState(ObjectInDataStoreStateMachine.State.Ready);
116-
_templateStoreDao.update(tmpltStoreVO.getId(), updateBuilder);
117-
// update size in vm_template table
118-
VMTemplateVO tmlptUpdater = _templateDao.createForUpdate();
119-
tmlptUpdater.setSize(new Long(5 * 1024l * 1024l));
120-
_templateDao.update(obj.getId(), tmlptUpdater);
121-
}
122-
return null;
79+
protected void createTemplate(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
80+
CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
81+
AsyncCallbackDispatcher<SimulatorImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
82+
.create(this);
83+
caller.setContext(context);
84+
caller.setCallback(caller.getTarget().createTemplateAsyncCallback(null, null));
85+
String path = UUID.randomUUID().toString();
86+
Long size = new Long(5 * 1024L * 1024L);
87+
DownloadAnswer answer = new DownloadAnswer(null, 100, null, VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
88+
path, path, size, size, null);
89+
caller.complete(answer);
90+
return;
12391
}
12492

125-
protected Void createVolumeAsyncCallback(AsyncCallbackDispatcher<SimulatorImageStoreDriverImpl, DownloadAnswer> callback,
126-
CreateContext<CreateCmdResult> context) {
127-
DataObject obj = context.data;
128-
DataStore store = obj.getDataStore();
129-
VolumeObjectTO volumeTO = (VolumeObjectTO) context.data.getTO();
130-
131-
VolumeDataStoreVO volStoreVO = _volumeStoreDao.findByStoreVolume(store.getId(), obj.getId());
132-
if (volStoreVO != null) {
133-
VolumeDataStoreVO updateBuilder = _volumeStoreDao.createForUpdate();
134-
updateBuilder.setDownloadPercent(100);
135-
updateBuilder.setDownloadState(VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
136-
updateBuilder.setLastUpdated(new Date());
137-
updateBuilder.setInstallPath(volumeTO.getPath());
138-
updateBuilder.setVolumeId(volumeTO.getVolumeId());
139-
updateBuilder.setSize(volumeTO.getSize());
140-
updateBuilder.setPhysicalSize(volumeTO.getSize());
141-
updateBuilder.setState(ObjectInDataStoreStateMachine.State.Ready);
142-
_volumeStoreDao.update(volStoreVO.getId(), updateBuilder);
143-
// update size in volume table
144-
VolumeVO volUpdater = _volumeDao.createForUpdate();
145-
volUpdater.setSize(volumeTO.getSize());
146-
_volumeDao.update(obj.getId(), volUpdater);
147-
}
148-
return null;
93+
protected void createVolume(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
94+
CreateContext<CreateCmdResult> context = new CreateContext<CreateCmdResult>(callback, data);
95+
AsyncCallbackDispatcher<SimulatorImageStoreDriverImpl, DownloadAnswer> caller = AsyncCallbackDispatcher
96+
.create(this);
97+
caller.setContext(context);
98+
caller.setCallback(caller.getTarget().createVolumeAsyncCallback(null, null));
99+
String path = UUID.randomUUID().toString();
100+
Long size = new Long(5 * 1024L * 1024L);
101+
DownloadAnswer answer = new DownloadAnswer(null, 100, null, VMTemplateStorageResourceAssoc.Status.DOWNLOADED,
102+
path, path, size, size, null);
103+
caller.complete(answer);
104+
return;
149105
}
150106
}

plugins/storage/volume/sample/src/org/apache/cloudstack/storage/datastore/driver/SamplePrimaryDataStoreDriverImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,12 @@ public DataStoreTO getStoreTO(DataStore store) {
5454
return null;
5555
}
5656

57-
<<<<<<< HEAD
5857
@Override
5958
public ChapInfo getChapInfo(VolumeInfo volumeInfo) {
6059
return null;
6160
}
6261

63-
private class CreateVolumeContext<T> extends AsyncRpcConext<T> {
64-
=======
6562
private class CreateVolumeContext<T> extends AsyncRpcContext<T> {
66-
>>>>>>> Fix typo in class name
6763
private final DataObject volume;
6864
public CreateVolumeContext(AsyncCompletionCallback<T> callback, DataObject volume) {
6965
super(callback);

server/src/com/cloud/storage/StorageManagerImpl.java

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,6 @@ public boolean start() {
570570
} else {
571571
s_logger.debug("Storage cleanup is not enabled, so the storage cleanup thread is not being scheduled.");
572572
}
573-
574573
return true;
575574
}
576575

@@ -579,7 +578,6 @@ public boolean stop() {
579578
if (_storageCleanupEnabled) {
580579
_executor.shutdown();
581580
}
582-
583581
return true;
584582
}
585583

@@ -591,7 +589,7 @@ public DataStore createLocalStorage(Host host, StoragePoolInfo pInfo) throws Con
591589
if (dc == null || !dc.isLocalStorageEnabled()) {
592590
return null;
593591
}
594-
DataStore store = null;
592+
DataStore store;
595593
try {
596594
StoragePoolVO pool = _storagePoolDao.findPoolByHostPath(host.getDataCenterId(), host.getPodId(), pInfo.getHost(), pInfo.getHostPath(),
597595
pInfo.getUuid());
@@ -693,21 +691,7 @@ public PrimaryDataStoreInfo createPool(CreateStoragePoolCmd cmd) throws Resource
693691
}
694692
}
695693

696-
Map ds = cmd.getDetails();
697-
Map<String, String> details = new HashMap<String, String>();
698-
if (ds != null) {
699-
Collection detailsCollection = ds.values();
700-
Iterator it = detailsCollection.iterator();
701-
while (it.hasNext()) {
702-
HashMap d = (HashMap) it.next();
703-
Iterator it2 = d.entrySet().iterator();
704-
while (it2.hasNext()) {
705-
Map.Entry entry = (Map.Entry) it2.next();
706-
details.put((String) entry.getKey(), (String) entry.getValue());
707-
}
708-
}
709-
}
710-
694+
Map<String, String> details = extractApiParamAsMap(cmd.getDetails());
711695
DataCenterVO zone = _dcDao.findById(cmd.getZoneId());
712696
if (zone == null) {
713697
throw new InvalidParameterValueException("unable to find zone by id " + zoneId);
@@ -732,10 +716,9 @@ public PrimaryDataStoreInfo createPool(CreateStoragePoolCmd cmd) throws Resource
732716
params.put("capacityIops", cmd.getCapacityIops());
733717

734718
DataStoreLifeCycle lifeCycle = storeProvider.getDataStoreLifeCycle();
735-
DataStore store = null;
719+
DataStore store;
736720
try {
737721
store = lifeCycle.initialize(params);
738-
739722
if (scopeType == ScopeType.CLUSTER) {
740723
ClusterScope clusterScope = new ClusterScope(clusterId, podId, zoneId);
741724
lifeCycle.attachCluster(store, clusterScope);
@@ -751,6 +734,23 @@ public PrimaryDataStoreInfo createPool(CreateStoragePoolCmd cmd) throws Resource
751734
return (PrimaryDataStoreInfo) dataStoreMgr.getDataStore(store.getId(), DataStoreRole.Primary);
752735
}
753736

737+
private Map<String, String> extractApiParamAsMap(Map ds) {
738+
Map<String, String> details = new HashMap<String, String>();
739+
if (ds != null) {
740+
Collection detailsCollection = ds.values();
741+
Iterator it = detailsCollection.iterator();
742+
while (it.hasNext()) {
743+
HashMap d = (HashMap) it.next();
744+
Iterator it2 = d.entrySet().iterator();
745+
while (it2.hasNext()) {
746+
Map.Entry entry = (Map.Entry) it2.next();
747+
details.put((String) entry.getKey(), (String) entry.getValue());
748+
}
749+
}
750+
}
751+
return details;
752+
}
753+
754754
@Override
755755
public PrimaryDataStoreInfo updateStoragePool(UpdateStoragePoolCmd cmd) throws IllegalArgumentException {
756756
// Input validation
@@ -1637,7 +1637,6 @@ public ImageStore discoverImageStore(AddImageStoreCmd cmd) throws IllegalArgumen
16371637
}
16381638

16391639
Long dcId = cmd.getZoneId();
1640-
String url = cmd.getUrl();
16411640
Map details = cmd.getDetails();
16421641
ScopeType scopeType = ScopeType.ZONE;
16431642
if (dcId == null) {
@@ -1686,7 +1685,7 @@ public ImageStore discoverImageStore(AddImageStoreCmd cmd) throws IllegalArgumen
16861685
params.put("role", DataStoreRole.Image);
16871686

16881687
DataStoreLifeCycle lifeCycle = storeProvider.getDataStoreLifeCycle();
1689-
DataStore store = null;
1688+
DataStore store;
16901689
try {
16911690
store = lifeCycle.initialize(params);
16921691
} catch (Exception e) {

0 commit comments

Comments
 (0)