blob: d59f6d4c54dd8200d71e4b9962c1aaf5a573f977 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.cloudstack.storage.image.store;
import java.util.Date;
import java.util.Set;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.inject.Inject;
import com.cloud.storage.Upload;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
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.ImageStoreProvider;
import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.framework.async.AsyncCallFuture;
import org.apache.cloudstack.storage.command.CommandResult;
import org.apache.cloudstack.storage.datastore.ObjectInDataStoreManager;
import org.apache.cloudstack.storage.datastore.db.ImageStoreVO;
import org.apache.cloudstack.storage.image.ImageStoreDriver;
import org.apache.cloudstack.storage.image.datastore.ImageStoreEntity;
import org.apache.cloudstack.storage.to.ImageStoreTO;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.engine.subsystem.api.storage.CreateCmdResult;
import com.cloud.agent.api.to.DatadiskTO;
import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.capacity.dao.CapacityDao;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.utils.component.ComponentContext;
public class ImageStoreImpl implements ImageStoreEntity {
protected Logger logger = LogManager.getLogger(getClass());
@Inject
VMTemplateDao imageDao;
@Inject
private ObjectInDataStoreManager objectInStoreMgr;
@Inject
private CapacityDao capacityDao;
protected ImageStoreDriver driver;
protected ImageStoreVO imageDataStoreVO;
protected ImageStoreProvider provider;
public ImageStoreImpl() {
super();
}
protected void configure(ImageStoreVO dataStoreVO, ImageStoreDriver imageDataStoreDriver, ImageStoreProvider provider) {
this.driver = imageDataStoreDriver;
this.imageDataStoreVO = dataStoreVO;
this.provider = provider;
}
public static ImageStoreEntity getDataStore(ImageStoreVO dataStoreVO, ImageStoreDriver imageDataStoreDriver, ImageStoreProvider provider) {
ImageStoreImpl instance = ComponentContext.inject(ImageStoreImpl.class);
instance.configure(dataStoreVO, imageDataStoreDriver, provider);
return instance;
}
@Override
public Set<TemplateInfo> listTemplates() {
return null;
}
@Override
public DataStoreDriver getDriver() {
return this.driver;
}
@Override
public DataStoreRole getRole() {
return this.imageDataStoreVO.getRole();
}
@Override
public long getId() {
return this.imageDataStoreVO.getId();
}
@Override
public String getUri() {
return this.imageDataStoreVO.getUrl();
}
@Override
public Scope getScope() {
return new ZoneScope(imageDataStoreVO.getDataCenterId());
}
@Override
public TemplateInfo getTemplate(long templateId) {
return null;
}
@Override
public VolumeInfo getVolume(long volumeId) {
return null;
}
@Override
public SnapshotInfo getSnapshot(long snapshotId) {
return null;
}
@Override
public boolean exists(DataObject object) {
return (objectInStoreMgr.findObject(object, this) != null) ? true : false;
}
@Override
public String getUuid() {
return this.imageDataStoreVO.getUuid();
}
public Date getCreated() {
return this.imageDataStoreVO.getCreated();
}
@Override
public DataObject create(DataObject obj) {
DataObject object = objectInStoreMgr.create(obj, this);
return object;
}
@Override
public boolean delete(DataObject obj) {
AsyncCallFuture<CommandResult> future = new AsyncCallFuture<CommandResult>();
this.driver.deleteAsync(obj.getDataStore(), obj, future);
try {
future.get();
} catch (InterruptedException e) {
logger.debug("failed delete obj", e);
return false;
} catch (ExecutionException e) {
logger.debug("failed delete obj", e);
return false;
}
objectInStoreMgr.delete(obj);
return true;
}
@Override
public String getName() {
return imageDataStoreVO.getName();
}
@Override
public Long getDataCenterId() {
return imageDataStoreVO.getDataCenterId();
}
@Override
public String getProviderName() {
return imageDataStoreVO.getProviderName();
}
@Override
public String getProtocol() {
return imageDataStoreVO.getProtocol();
}
@Override
public String getUrl() {
return imageDataStoreVO.getUrl();
}
@Override
public DataStoreTO getTO() {
DataStoreTO to = getDriver().getStoreTO(this);
if (to == null) {
ImageStoreTO primaryTO = new ImageStoreTO();
primaryTO.setProviderName(getProviderName());
primaryTO.setRole(getRole());
primaryTO.setType(getProtocol());
primaryTO.setUri(getUri());
return primaryTO;
}
return to;
}
@Override
public String getMountPoint() {
return imageDataStoreVO.getParent();
}
@Override
public String createEntityExtractUrl(String installPath, ImageFormat format, DataObject dataObject) {
return driver.createEntityExtractUrl(this, installPath, format, dataObject);
}
@Override
public void deleteExtractUrl(String installPath, String url, Upload.Type entityType) {
driver.deleteEntityExtractUrl(this, installPath, url, entityType);
}
@Override
public List<DatadiskTO> getDataDiskTemplates(DataObject obj, String configurationId) {
return driver.getDataDiskTemplates(obj, configurationId);
}
@Override
public Void createDataDiskTemplateAsync(TemplateInfo dataDiskTemplate, String path, String diskId, long fileSize, boolean bootable, AsyncCompletionCallback<CreateCmdResult> callback) {
return driver.createDataDiskTemplateAsync(dataDiskTemplate, path, diskId, bootable, fileSize, callback);
}
}