implement toURI

This commit is contained in:
Edison Su 2013-01-17 18:49:34 -08:00
parent c4a11b9979
commit ddc53771bf
8 changed files with 80 additions and 59 deletions

View File

@ -45,7 +45,7 @@ public class ImageDataFactoryImpl implements ImageDataFactory {
return null;
}
ImageDataVO templ = imageDataDao.findById(templateId);
TemplateObject tmpl = new TemplateObject(templ, store);
TemplateObject tmpl = TemplateObject.getTemplate(templ, store);
return tmpl;
}
}

View File

@ -23,16 +23,15 @@ import java.util.Map;
import javax.inject.Inject;
import org.apache.cloudstack.storage.datastore.provider.DataStoreProvider;
import org.apache.cloudstack.storage.datastore.provider.DataStoreProviderManager;
import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
import org.apache.cloudstack.storage.image.datastore.ImageDataStore;
import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.store.ImageDataStoreImpl;
import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.image.store.HttpDataStoreImpl;
import org.springframework.stereotype.Component;
@Component
@ -49,9 +48,9 @@ public class ImageDataStoreManagerImpl implements ImageDataStoreManager {
public ImageDataStore getImageDataStore(long dataStoreId) {
ImageDataStoreVO dataStore = dataStoreDao.findById(dataStoreId);
long providerId = dataStore.getProvider();
DataStoreProvider provider = providerManager.getDataStoreProviderById(providerId);
ImageDataStore imgStore = new ImageDataStoreImpl(dataStore,
driverMaps.get(provider.getUuid())
ImageDataStoreProvider provider = (ImageDataStoreProvider)providerManager.getDataStoreProviderById(providerId);
ImageDataStore imgStore = HttpDataStoreImpl.getDataStore(dataStore,
driverMaps.get(provider.getUuid()), provider
);
// TODO Auto-generated method stub
return imgStore;

View File

@ -25,32 +25,43 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.datastore.provider.ImageDataStoreProvider;
import org.apache.cloudstack.storage.image.ImageDataStoreDriver;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.image.datastore.ImageDataStore;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataStoreVO;
import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
import com.cloud.utils.component.ComponentContext;
public class ImageDataStoreImpl implements ImageDataStore {
public class HttpDataStoreImpl implements ImageDataStore {
@Inject
ImageDataDao imageDao;
@Inject
private ObjectInDataStoreManager objectInStoreMgr;
ImageDataStoreDriver driver;
ImageDataStoreVO imageDataStoreVO;
ImageDataStoreProvider provider;
boolean needDownloadToCacheStorage = false;
public ImageDataStoreImpl(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver) {
private HttpDataStoreImpl(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
ImageDataStoreProvider provider) {
this.driver = imageDataStoreDriver;
this.imageDataStoreVO = dataStoreVO;
this.provider = provider;
}
public static HttpDataStoreImpl getDataStore(ImageDataStoreVO dataStoreVO, ImageDataStoreDriver imageDataStoreDriver,
ImageDataStoreProvider provider) {
HttpDataStoreImpl instance = new HttpDataStoreImpl(dataStoreVO, imageDataStoreDriver, provider);
return ComponentContext.inject(instance);
}
@Override
public Set<TemplateInfo> listTemplates() {
@ -58,12 +69,10 @@ public class ImageDataStoreImpl implements ImageDataStore {
return null;
}
@Override
public DataStoreDriver getDriver() {
// TODO Auto-generated method stub
return null;
return this.driver;
}
@ -71,7 +80,7 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override
public DataStoreRole getRole() {
// TODO Auto-generated method stub
return null;
return DataStoreRole.Image;
}
@ -79,15 +88,14 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override
public long getId() {
// TODO Auto-generated method stub
return 0;
return this.imageDataStoreVO.getId();
}
@Override
public String getUri() {
// TODO Auto-generated method stub
return null;
return this.imageDataStoreVO.getProtocol() + "://" + "?role=" + this.getRole();
}
@ -95,7 +103,7 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override
public Scope getScope() {
// TODO Auto-generated method stub
return null;
return new ZoneScope(imageDataStoreVO.getDcId());
}
@ -126,7 +134,7 @@ public class ImageDataStoreImpl implements ImageDataStore {
@Override
public boolean exists(DataObject object) {
// TODO Auto-generated method stub
return false;
return (objectInStoreMgr.findObject(object.getId(), object.getType(),
this.getId(), this.getRole()) != null) ? true : false;
}
}

View File

@ -18,16 +18,21 @@
*/
package org.apache.cloudstack.storage.image.store;
import java.io.File;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.image.TemplateEvent;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
import org.apache.cloudstack.storage.image.db.ImageDataVO;
import org.apache.cloudstack.storage.image.manager.ImageDataManager;
import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
import org.apache.log4j.Logger;
import com.cloud.utils.component.ComponentContext;
@ -41,8 +46,10 @@ public class TemplateObject implements TemplateInfo {
ImageDataManager imageMgr;
@Inject
ImageDataDao imageDao;
@Inject
ObjectInDataStoreManager ojbectInStoreMgr;
public TemplateObject(ImageDataVO template, DataStore dataStore) {
private TemplateObject(ImageDataVO template, DataStore dataStore) {
this.imageVO = template;
this.dataStore = dataStore;
}
@ -78,7 +85,16 @@ public class TemplateObject implements TemplateInfo {
@Override
public String getUri() {
return this.dataStore.getUri() + "template/" + this.imageVO.getUrl();
if (this.dataStore == null) {
return this.imageVO.getUrl();
} else {
ObjectInDataStoreVO obj = ojbectInStoreMgr.findObject(this.imageVO.getId(), DataObjectType.TEMPLATE, this.dataStore.getId(), this.dataStore.getRole());
if (obj.getState() != ObjectInDataStoreStateMachine.State.Ready) {
return this.dataStore.getUri() + File.separator + "?type=" + DataObjectType.TEMPLATE + "&size=" + this.imageVO.getSize();
} else {
return this.dataStore.getUri() + File.separator + "?type=" + DataObjectType.TEMPLATE + "&path=" + obj.getInstallPath();
}
}
}
@Override

View File

@ -54,6 +54,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
protected PrimaryDataStoreDriver driver;
protected PrimaryDataStoreVO pdsv;
protected PrimaryDataStoreLifeCycle lifeCycle;
@Inject
private ObjectInDataStoreManager objectInStoreMgr;
@Inject
ImageDataFactory imageDataFactory;
@ -118,8 +119,8 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
public String getUri() {
return this.pdsv.getPoolType() + File.separator
+ this.pdsv.getHostAddress() + File.separator
+ this.pdsv.getPath();
+ this.pdsv.getPath() + File.separator
+ "?role=" + this.getRole();
}
@Override

View File

@ -167,9 +167,8 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
}
@Override
public String grantAccess(DataObject vol, EndPoint ep) {
// TODO Auto-generated method stub
return null;
public String grantAccess(DataObject object, EndPoint ep) {
return object.getUri();
}
@Override

View File

@ -24,6 +24,8 @@ import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectType;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.DiskFormat;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.volume.db.VolumeDao2;
import org.apache.cloudstack.storage.volume.db.VolumeVO;
import org.apache.log4j.Logger;
@ -43,14 +45,15 @@ public class VolumeObject implements VolumeInfo {
VolumeDao2 volumeDao;
@Inject
VolumeManager volumeMgr;
@Inject
ObjectInDataStoreManager ojbectInStoreMgr;
private VolumeObject(DataStore dataStore, VolumeVO volumeVO) {
this.volumeVO = volumeVO;
this.dataStore = dataStore;
}
public static VolumeObject getVolumeObject(DataStore dataStore,
VolumeVO volumeVO) {
public static VolumeObject getVolumeObject(DataStore dataStore, VolumeVO volumeVO) {
VolumeObject vo = new VolumeObject(dataStore, volumeVO);
vo = ComponentContext.inject(vo);
return vo;
@ -87,11 +90,9 @@ public class VolumeObject implements VolumeInfo {
boolean result = false;
_volStateMachine = volumeMgr.getStateMachine();
try {
result = _volStateMachine.transitTo(volumeVO, event, null,
volumeDao);
result = _volStateMachine.transitTo(volumeVO, event, null, volumeDao);
} catch (NoTransitionException e) {
String errorMessage = "Failed to transit volume: "
+ this.getVolumeId() + ", due to: " + e.toString();
String errorMessage = "Failed to transit volume: " + this.getVolumeId() + ", due to: " + e.toString();
s_logger.debug(errorMessage);
throw new CloudRuntimeException(errorMessage);
}
@ -115,8 +116,15 @@ public class VolumeObject implements VolumeInfo {
@Override
public String getUri() {
return this.dataStore.getUri() + File.separator + "?type=volume&path="
+ this.volumeVO.getPath();
if (this.dataStore == null) {
throw new CloudRuntimeException("datastore must be set before using this object");
}
ObjectInDataStoreVO obj = ojbectInStoreMgr.findObject(this.volumeVO.getId(), DataObjectType.VOLUME, this.dataStore.getId(), this.dataStore.getRole());
if (obj.getState() != ObjectInDataStoreStateMachine.State.Ready) {
return this.dataStore.getUri() + File.separator + "&objType=" + DataObjectType.VOLUME + "&size=" + this.volumeVO.getSize();
} else {
return this.dataStore.getUri() + File.separator + "&objType=" + DataObjectType.VOLUME + "&path=" + obj.getInstallPath();
}
}
@Override

View File

@ -18,10 +18,12 @@ package org.apache.cloudstack.storage.datastore.driver;
import java.util.Set;
import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
import org.apache.cloudstack.engine.subsystem.api.storage.CopyCommandResult;
import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStream;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
@ -29,70 +31,58 @@ import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
@Override
public String grantAccess(DataStream data,
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint ep) {
public String grantAccess(DataObject data, EndPoint ep) {
// TODO Auto-generated method stub
return null;
}
@Override
public boolean revokeAccess(DataStream data,
org.apache.cloudstack.engine.subsystem.api.storage.EndPoint ep) {
public boolean revokeAccess(DataObject data, EndPoint ep) {
// TODO Auto-generated method stub
return false;
}
@Override
public Set<DataStream> listObjects(DataStore store) {
public Set<DataObject> listObjects(DataStore store) {
// TODO Auto-generated method stub
return null;
}
@Override
public void createAsync(DataStream data,
AsyncCompletionCallback<CreateCmdResult> callback) {
public void createAsync(DataObject data, AsyncCompletionCallback<CreateCmdResult> callback) {
// TODO Auto-generated method stub
}
@Override
public void deleteAsync(
DataStream data,
AsyncCompletionCallback<org.apache.cloudstack.engine.subsystem.api.storage.CommandResult> callback) {
public void deleteAsync(DataObject data, AsyncCompletionCallback<CommandResult> callback) {
// TODO Auto-generated method stub
}
@Override
public void copyAsync(DataStream srcdata, DataStream destData,
AsyncCompletionCallback<CopyCommandResult> callback) {
public void copyAsync(DataObject srcdata, DataObject destData, AsyncCompletionCallback<CopyCommandResult> callback) {
// TODO Auto-generated method stub
}
@Override
public boolean canCopy(DataStream srcData, DataStream destData) {
public boolean canCopy(DataObject srcData, DataObject destData) {
// TODO Auto-generated method stub
return false;
}
@Override
public void takeSnapshot(
SnapshotInfo snapshot,
AsyncCompletionCallback<org.apache.cloudstack.engine.subsystem.api.storage.CommandResult> callback) {
public void takeSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback) {
// TODO Auto-generated method stub
}
@Override
public void revertSnapshot(
SnapshotInfo snapshot,
AsyncCompletionCallback<org.apache.cloudstack.engine.subsystem.api.storage.CommandResult> callback) {
public void revertSnapshot(SnapshotInfo snapshot, AsyncCompletionCallback<CommandResult> callback) {
// TODO Auto-generated method stub
}
}