blob: ff6c4fb5c6a71eeb9b12aa6b21c8e4ac14424877 [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.datastore;
import java.util.List;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.springframework.stereotype.Component;
import org.apache.cloudstack.storage.image.datastore.ImageStoreProviderManager;
import com.cloud.storage.DataStoreRole;
import com.cloud.storage.ScopeType;
import com.cloud.utils.exception.CloudRuntimeException;
@Component
public class DataStoreManagerImpl implements DataStoreManager {
@Inject
PrimaryDataStoreProviderManager primaryStoreMgr;
@Inject
ImageStoreProviderManager imageDataStoreMgr;
@Override
public DataStore getDataStore(long storeId, DataStoreRole role) {
try {
if (role == DataStoreRole.Primary) {
return primaryStoreMgr.getPrimaryDataStore(storeId);
} else if (role == DataStoreRole.Image) {
return imageDataStoreMgr.getImageStore(storeId);
} else if (role == DataStoreRole.ImageCache) {
return imageDataStoreMgr.getImageStore(storeId);
}
} catch (CloudRuntimeException e) {
throw e;
}
throw new CloudRuntimeException("un recognized type" + role);
}
@Override
public DataStore getDataStore(String uuid, DataStoreRole role) {
if (role == DataStoreRole.Primary) {
return primaryStoreMgr.getPrimaryDataStore(uuid);
} else if (role == DataStoreRole.Image) {
return imageDataStoreMgr.getImageStore(uuid);
}
throw new CloudRuntimeException("un recognized type" + role);
}
@Override
public List<DataStore> getImageStoresByScope(ZoneScope scope) {
return imageDataStoreMgr.listImageStoresByScope(scope);
}
@Override
public List<DataStore> getImageStoresByScopeExcludingReadOnly(ZoneScope scope) {
return imageDataStoreMgr.listImageStoresByScopeExcludingReadOnly(scope);
}
@Override
public DataStore getRandomImageStore(long zoneId) {
List<DataStore> stores = getImageStoresByScope(new ZoneScope(zoneId));
if (stores == null || stores.size() == 0) {
return null;
}
return imageDataStoreMgr.getRandomImageStore(stores);
}
@Override
public DataStore getRandomUsableImageStore(long zoneId) {
List<DataStore> stores = getImageStoresByScopeExcludingReadOnly(new ZoneScope(zoneId));
if (stores == null || stores.size() == 0) {
return null;
}
return imageDataStoreMgr.getRandomImageStore(stores);
}
@Override
public DataStore getImageStoreWithFreeCapacity(long zoneId) {
List<DataStore> stores = getImageStoresByScopeExcludingReadOnly(new ZoneScope(zoneId));
if (stores == null || stores.size() == 0) {
return null;
}
return imageDataStoreMgr.getImageStoreWithFreeCapacity(stores);
}
@Override
public DataStore getImageStoreWithFreeCapacity(List<DataStore> imageStores) {
if (imageStores.isEmpty()) {
return null;
}
return imageDataStoreMgr.getImageStoreWithFreeCapacity(imageStores);
}
@Override
public List<DataStore> listImageStoresWithFreeCapacity(long zoneId) {
List<DataStore> stores = getImageStoresByScopeExcludingReadOnly(new ZoneScope(zoneId));
if (stores == null || stores.size() == 0) {
return null;
}
return imageDataStoreMgr.listImageStoresWithFreeCapacity(stores);
}
@Override
public boolean isRegionStore(DataStore store) {
if (store.getScope().getScopeType() == ScopeType.ZONE && store.getScope().getScopeId() == null)
return true;
else
return false;
}
@Override
public DataStore getPrimaryDataStore(long storeId) {
return primaryStoreMgr.getPrimaryDataStore(storeId);
}
@Override
public DataStore getPrimaryDataStore(String storeUuid) {
return primaryStoreMgr.getPrimaryDataStore(storeUuid);
}
@Override
public List<DataStore> getImageCacheStores(Scope scope) {
return imageDataStoreMgr.listImageCacheStores(scope);
}
@Override
public DataStore getImageCacheStore(long zoneId) {
List<DataStore> stores = getImageCacheStores(new ZoneScope(zoneId));
if (stores == null || stores.size() == 0) {
return null;
}
return imageDataStoreMgr.getImageStoreWithFreeCapacity(stores);
}
@Override
public List<DataStore> listImageStores() {
return imageDataStoreMgr.listImageStores();
}
@Override
public List<DataStore> listImageCacheStores() {
return imageDataStoreMgr.listImageCacheStores();
}
public void setPrimaryStoreMgr(PrimaryDataStoreProviderManager primaryStoreMgr) {
this.primaryStoreMgr = primaryStoreMgr;
}
public void setImageDataStoreMgr(ImageStoreProviderManager imageDataStoreMgr) {
this.imageDataStoreMgr = imageDataStoreMgr;
}
}