You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ed...@apache.org on 2013/02/21 20:15:16 UTC
[30/45] squash changes into one giant patch
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
index 657d32c..218f901 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataObjectManagerImpl.java
@@ -24,14 +24,14 @@ 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.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
import org.apache.cloudstack.framework.async.AsyncCallbackDispatcher;
import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
import org.apache.cloudstack.framework.async.AsyncRpcConext;
-import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
import org.apache.cloudstack.storage.motion.DataMotionService;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
@@ -52,7 +52,7 @@ public class DataObjectManagerImpl implements DataObjectManager {
protected DataObject waitingForCreated(DataObject dataObj,
DataStore dataStore) {
long retries = this.waitingRetries;
- ObjectInDataStoreVO obj = null;
+ DataObjectInStore obj = null;
do {
try {
Thread.sleep(waitingTime);
@@ -61,8 +61,8 @@ public class DataObjectManagerImpl implements DataObjectManager {
throw new CloudRuntimeException("sleep interrupted", e);
}
- obj = objectInDataStoreMgr.findObject(dataObj.getId(),
- dataObj.getType(), dataStore.getId(), dataStore.getRole());
+ obj = objectInDataStoreMgr.findObject(dataObj,
+ dataStore);
if (obj == null) {
s_logger.debug("can't find object in db, maybe it's cleaned up already, exit waiting");
break;
@@ -92,11 +92,10 @@ public class DataObjectManagerImpl implements DataObjectManager {
}
@Override
- public void createAsync(DataObject data, DataStore store,
+ public void createAsync(DataObject data, DataStore store,
AsyncCompletionCallback<CreateCmdResult> callback, boolean noCopy) {
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- data.getId(), data.getType(), store.getId(),
- store.getRole());
+ DataObjectInStore obj = objectInDataStoreMgr.findObject(
+ data, store);
DataObject objInStore = null;
boolean freshNewTemplate = false;
if (obj == null) {
@@ -105,8 +104,8 @@ public class DataObjectManagerImpl implements DataObjectManager {
data, store);
freshNewTemplate = true;
} catch (Throwable e) {
- obj = objectInDataStoreMgr.findObject(data.getId(),
- data.getType(), store.getId(), store.getRole());
+ obj = objectInDataStoreMgr.findObject(data,
+ store);
if (obj == null) {
CreateCmdResult result = new CreateCmdResult(
null, null);
@@ -184,20 +183,12 @@ public class DataObjectManagerImpl implements DataObjectManager {
return null;
}
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- objInStrore.getId(), objInStrore
- .getType(), objInStrore.getDataStore()
- .getId(), objInStrore.getDataStore()
- .getRole());
-
- obj.setInstallPath(result.getPath());
- obj.setSize(result.getSize());
try {
- objectInDataStoreMgr.update(obj,
+ objectInDataStoreMgr.update(objInStrore,
ObjectInDataStoreStateMachine.Event.OperationSuccessed);
} catch (NoTransitionException e) {
try {
- objectInDataStoreMgr.update(obj,
+ objectInDataStoreMgr.update(objInStrore,
ObjectInDataStoreStateMachine.Event.OperationFailed);
} catch (NoTransitionException e1) {
s_logger.debug("failed to change state", e1);
@@ -259,14 +250,10 @@ public class DataObjectManagerImpl implements DataObjectManager {
CopyContext<CreateCmdResult> context) {
CopyCommandResult result = callback.getResult();
DataObject destObj = context.destObj;
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- destObj.getId(), destObj
- .getType(), destObj.getDataStore()
- .getId(), destObj.getDataStore()
- .getRole());
+
if (result.isFailed()) {
try {
- objectInDataStoreMgr.update(obj, Event.OperationFailed);
+ objectInDataStoreMgr.update(destObj, Event.OperationFailed);
} catch (NoTransitionException e) {
s_logger.debug("Failed to update copying state", e);
}
@@ -276,10 +263,8 @@ public class DataObjectManagerImpl implements DataObjectManager {
context.getParentCallback().complete(res);
}
- obj.setInstallPath(result.getPath());
-
try {
- objectInDataStoreMgr.update(obj,
+ objectInDataStoreMgr.update(destObj,
ObjectInDataStoreStateMachine.Event.OperationSuccessed);
} catch (NoTransitionException e) {
s_logger.debug("Failed to update copying state: ", e);
@@ -311,11 +296,8 @@ public class DataObjectManagerImpl implements DataObjectManager {
@Override
public void deleteAsync(DataObject data,
AsyncCompletionCallback<CommandResult> callback) {
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- data.getId(), data.getType(), data.getDataStore().getId(),
- data.getDataStore().getRole());
try {
- objectInDataStoreMgr.update(obj, Event.DestroyRequested);
+ objectInDataStoreMgr.update(data, Event.DestroyRequested);
} catch (NoTransitionException e) {
s_logger.debug("destroy failed", e);
CreateCmdResult res = new CreateCmdResult(
@@ -338,23 +320,18 @@ public class DataObjectManagerImpl implements DataObjectManager {
protected Void deleteAsynCallback(AsyncCallbackDispatcher<DataObjectManagerImpl, CommandResult> callback,
DeleteContext<CommandResult> context) {
DataObject destObj = context.obj;
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- destObj.getId(), destObj
- .getType(), destObj.getDataStore()
- .getId(), destObj.getDataStore()
- .getRole());
-
+
CommandResult res = callback.getResult();
if (res.isFailed()) {
try {
- objectInDataStoreMgr.update(obj, Event.OperationFailed);
+ objectInDataStoreMgr.update(destObj, Event.OperationFailed);
} catch (NoTransitionException e) {
s_logger.debug("delete failed", e);
}
} else {
try {
- objectInDataStoreMgr.update(obj, Event.OperationSuccessed);
+ objectInDataStoreMgr.update(destObj, Event.OperationSuccessed);
} catch (NoTransitionException e) {
s_logger.debug("delete failed", e);
}
@@ -366,9 +343,8 @@ public class DataObjectManagerImpl implements DataObjectManager {
@Override
public DataObject createInternalStateOnly(DataObject data, DataStore store) {
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- data.getId(), data.getType(), store.getId(),
- store.getRole());
+ DataObjectInStore obj = objectInDataStoreMgr.findObject(
+ data, store);
DataObject objInStore = null;
if (obj == null) {
objInStore = objectInDataStoreMgr.create(
@@ -391,12 +367,6 @@ public class DataObjectManagerImpl implements DataObjectManager {
@Override
public void update(DataObject data, String path, Long size) {
- ObjectInDataStoreVO obj = objectInDataStoreMgr.findObject(
- data.getId(), data.getType(), data.getDataStore().getId(),
- data.getDataStore().getRole());
-
- obj.setInstallPath(path);
- obj.setSize(size);
- objectInDataStoreMgr.update(obj);
+ throw new CloudRuntimeException("not implemented");
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManager.java
deleted file mode 100644
index 829be50..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManager.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.Map;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
-
-public interface DataStoreManager {
- public DataStore getDataStore(long storeId, DataStoreRole role);
- public DataStore registerDataStore(Map<String, String> params, String providerUuid);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
index f857ac5..a2fd08d 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreManagerImpl.java
@@ -18,12 +18,15 @@
*/
package org.apache.cloudstack.storage.datastore;
+import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
import org.apache.cloudstack.storage.image.datastore.ImageDataStoreManager;
import org.springframework.stereotype.Component;
@@ -50,5 +53,22 @@ public class DataStoreManagerImpl implements DataStoreManager {
String providerUuid) {
return null;
}
+ @Override
+ public DataStore getDataStore(String uuid, DataStoreRole role) {
+ if (role == DataStoreRole.Primary) {
+ return primaryStorMgr.getPrimaryDataStore(uuid);
+ } else if (role == DataStoreRole.Image) {
+ return imageDataStoreMgr.getImageDataStore(uuid);
+ }
+ throw new CloudRuntimeException("un recognized type" + role);
+ }
+ @Override
+ public List<DataStore> getImageStores(Scope scope) {
+ return imageDataStoreMgr.getList();
+ }
+ @Override
+ public DataStore getPrimaryDataStore(long storeId) {
+ return primaryStorMgr.getPrimaryDataStore(storeId);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
deleted file mode 100644
index 23551e4..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * 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;
-
-public enum DataStoreStatus {
- Initial, Initialized, Creating, Attaching, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
index e707de6..d170f5c 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManager.java
@@ -17,26 +17,20 @@
package org.apache.cloudstack.storage.datastore;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
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.DataStoreRole;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
import com.cloud.utils.fsm.NoTransitionException;
public interface ObjectInDataStoreManager {
public DataObject create(DataObject template, DataStore dataStore);
- public VolumeInfo create(VolumeInfo volume, DataStore dataStore);
- public SnapshotInfo create(SnapshotInfo snapshot, DataStore dataStore);
- public ObjectInDataStoreVO findObject(long objectId, DataObjectType type,
- long dataStoreId, DataStoreRole role);
public DataObject get(DataObject dataObj, DataStore store);
public boolean update(DataObject vo, Event event) throws NoTransitionException;
- boolean update(ObjectInDataStoreVO obj, Event event)
- throws NoTransitionException;
-
- boolean update(ObjectInDataStoreVO obj);
+ DataObjectInStore findObject(String uuid, DataObjectType type,
+ String dataStoreUuid, DataStoreRole role);
+ DataObjectInStore findObject(DataObject obj, DataStore store);
+ DataStore findStore(String objUuid, DataObjectType type, DataStoreRole role);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
index 7eb4932..87ba1d2 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/ObjectInDataStoreManagerImpl.java
@@ -19,19 +19,25 @@ package org.apache.cloudstack.storage.datastore;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.DataObject;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
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.DataStoreManager;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreRole;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.ImageDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.Event;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine.State;
+import org.apache.cloudstack.engine.subsystem.api.storage.SnapshotDataFactory;
+import org.apache.cloudstack.engine.subsystem.api.storage.VolumeDataFactory;
import org.apache.cloudstack.storage.db.ObjectInDataStoreDao;
import org.apache.cloudstack.storage.db.ObjectInDataStoreVO;
-import org.apache.cloudstack.storage.image.ImageDataFactory;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.Event;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine.State;
+import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.cloud.storage.VMTemplateStoragePoolVO;
+import com.cloud.storage.dao.VMTemplateHostDao;
+import com.cloud.storage.dao.VMTemplatePoolDao;
+import com.cloud.storage.dao.VolumeHostDao;
import com.cloud.utils.db.SearchCriteria.Op;
import com.cloud.utils.db.SearchCriteria2;
import com.cloud.utils.db.SearchCriteriaService;
@@ -41,16 +47,28 @@ import com.cloud.utils.fsm.StateMachine2;
@Component
public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
+ private static final Logger s_logger = Logger
+ .getLogger(ObjectInDataStoreManagerImpl.class);
@Inject
ImageDataFactory imageFactory;
@Inject
+ DataStoreManager storeMgr;
+ @Inject
VolumeDataFactory volumeFactory;
@Inject
ObjectInDataStoreDao objectDataStoreDao;
- protected StateMachine2<State, Event, ObjectInDataStoreVO> stateMachines;
+ @Inject
+ VolumeHostDao volumeHostDao;
+ @Inject
+ VMTemplateHostDao templateHostDao;
+ @Inject
+ VMTemplatePoolDao templatePoolDao;
+ @Inject
+ SnapshotDataFactory snapshotFactory;
+ protected StateMachine2<State, Event, DataObjectInStore> stateMachines;
public ObjectInDataStoreManagerImpl() {
- stateMachines = new StateMachine2<State, Event, ObjectInDataStoreVO>();
+ stateMachines = new StateMachine2<State, Event, DataObjectInStore>();
stateMachines.addTransition(State.Allocated, Event.CreateRequested,
State.Creating);
stateMachines.addTransition(State.Creating, Event.OperationSuccessed,
@@ -76,101 +94,122 @@ public class ObjectInDataStoreManagerImpl implements ObjectInDataStoreManager {
stateMachines.addTransition(State.Allocated, Event.CreateOnlyRequested,
State.Creating2);
stateMachines.addTransition(State.Creating2, Event.OperationFailed,
- State.Failed);
+ State.Allocated);
stateMachines.addTransition(State.Creating2, Event.OperationSuccessed,
State.Ready);
}
@Override
public DataObject create(DataObject obj, DataStore dataStore) {
-
- ObjectInDataStoreVO vo = new ObjectInDataStoreVO();
- vo.setDataStoreId(dataStore.getId());
- vo.setDataStoreRole(dataStore.getRole());
- vo.setObjectId(obj.getId());
- vo.setSize(obj.getSize());
-
- vo.setObjectType(obj.getType());
- vo = objectDataStoreDao.persist(vo);
+ if (obj.getType() == DataObjectType.TEMPLATE && dataStore.getRole() == DataStoreRole.Primary) {
+ VMTemplateStoragePoolVO vo = new VMTemplateStoragePoolVO(dataStore.getId(), obj.getId());
+ vo = templatePoolDao.persist(vo);
+ } else {
+ ObjectInDataStoreVO vo = new ObjectInDataStoreVO();
+ vo.setDataStoreRole(dataStore.getRole());
+ vo.setDataStoreUuid(dataStore.getUuid());
+ vo.setObjectType(obj.getType());
+ vo.setObjectUuid(obj.getUuid());
+ vo = objectDataStoreDao.persist(vo);
+ }
if (obj.getType() == DataObjectType.TEMPLATE) {
- return imageFactory.getTemplate(obj.getId(), dataStore);
+ return imageFactory.getTemplate(obj, dataStore);
} else if (obj.getType() == DataObjectType.VOLUME) {
- return volumeFactory.getVolume(obj.getId(), dataStore);
+ return volumeFactory.getVolume(obj, dataStore);
+ } else if (obj.getType() == DataObjectType.SNAPSHOT) {
+ return snapshotFactory.getSnapshot(obj, dataStore);
}
throw new CloudRuntimeException("unknown type");
}
-
- @Override
- public VolumeInfo create(VolumeInfo volume, DataStore dataStore) {
- ObjectInDataStoreVO vo = new ObjectInDataStoreVO();
- vo.setDataStoreId(dataStore.getId());
- vo.setDataStoreRole(dataStore.getRole());
- vo.setObjectId(volume.getId());
- vo.setObjectType(volume.getType());
- vo = objectDataStoreDao.persist(vo);
-
- return volumeFactory.getVolume(volume.getId(), dataStore);
- }
-
- @Override
- public SnapshotInfo create(SnapshotInfo snapshot, DataStore dataStore) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public ObjectInDataStoreVO findObject(long objectId, DataObjectType type,
- long dataStoreId, DataStoreRole role) {
- SearchCriteriaService<ObjectInDataStoreVO, ObjectInDataStoreVO> sc = SearchCriteria2
- .create(ObjectInDataStoreVO.class);
- sc.addAnd(sc.getEntity().getObjectId(), Op.EQ, objectId);
- sc.addAnd(sc.getEntity().getDataStoreId(), Op.EQ, dataStoreId);
- sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type);
- sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role);
- sc.addAnd(sc.getEntity().getState(), Op.NIN,
- ObjectInDataStoreStateMachine.State.Destroyed,
- ObjectInDataStoreStateMachine.State.Failed);
- ObjectInDataStoreVO objectStoreVO = sc.find();
- return objectStoreVO;
-
- }
-
+
@Override
public boolean update(DataObject data, Event event)
throws NoTransitionException {
- ObjectInDataStoreVO obj = this.findObject(data.getId(), data.getType(),
- data.getDataStore().getId(), data.getDataStore().getRole());
+ DataObjectInStore obj = this.findObject(data, data.getDataStore());
if (obj == null) {
throw new CloudRuntimeException(
"can't find mapping in ObjectInDataStore table for: "
+ data);
}
- return this.stateMachines.transitTo(obj, event, null,
- objectDataStoreDao);
-
- }
-
- @Override
- public boolean update(ObjectInDataStoreVO obj, Event event)
- throws NoTransitionException {
- return this.stateMachines.transitTo(obj, event, null,
- objectDataStoreDao);
-
+
+ if (data.getType() == DataObjectType.TEMPLATE && data.getDataStore().getRole() == DataStoreRole.Primary) {
+ try {
+ this.stateMachines.transitTo(obj, event, null,
+ templatePoolDao);
+ } catch (NoTransitionException e) {
+ if (event == Event.CreateOnlyRequested || event == Event.OperationSuccessed) {
+ s_logger.debug("allow muliple create requests");
+ } else {
+ throw e;
+ }
+ }
+ } else {
+ this.stateMachines.transitTo(obj, event, null, objectDataStoreDao);
+ }
+ return true;
}
@Override
public DataObject get(DataObject dataObj, DataStore store) {
if (dataObj.getType() == DataObjectType.TEMPLATE) {
- return imageFactory.getTemplate(dataObj.getId(), store);
+ return imageFactory.getTemplate(dataObj, store);
} else if (dataObj.getType() == DataObjectType.VOLUME) {
- return volumeFactory.getVolume(dataObj.getId(), store);
+ return volumeFactory.getVolume(dataObj, store);
}
throw new CloudRuntimeException("unknown type");
}
@Override
- public boolean update(ObjectInDataStoreVO obj) {
- return objectDataStoreDao.update(obj.getId(), obj);
+ public DataObjectInStore findObject(DataObject obj, DataStore store) {
+ DataObjectInStore vo = null;
+ SearchCriteriaService<ObjectInDataStoreVO, ObjectInDataStoreVO> sc = SearchCriteria2.create(ObjectInDataStoreVO.class);
+
+ if (store.getRole() == DataStoreRole.Image) {
+ sc.addAnd(sc.getEntity().getDataStoreUuid(), Op.EQ, store.getUuid());
+ sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, store.getRole());
+ sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, obj.getUuid());
+ sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, obj.getType());
+ vo = sc.find();
+ } else if (obj.getType() == DataObjectType.TEMPLATE && store.getRole() == DataStoreRole.Primary) {
+ vo = templatePoolDao.findByPoolTemplate(store.getId(), obj.getId());
+ } else {
+ s_logger.debug("unknown type: " + obj.getType() + " " + store.getRole());
+ throw new CloudRuntimeException("unknown type");
+ }
+ return vo;
}
+
+ @Override
+ public DataObjectInStore findObject(String uuid, DataObjectType type,
+ String dataStoreUuid, DataStoreRole role) {
+ DataObjectInStore vo = null;
+ SearchCriteriaService<ObjectInDataStoreVO, ObjectInDataStoreVO> sc = SearchCriteria2.create(ObjectInDataStoreVO.class);
+
+ if (role == DataStoreRole.Image) {
+ sc.addAnd(sc.getEntity().getDataStoreUuid(), Op.EQ, dataStoreUuid);
+ sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role);
+ sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, uuid);
+ sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type);
+ vo = sc.find();
+ }
+ return vo;
+ }
+
+ @Override
+ public DataStore findStore(String objUuid, DataObjectType type, DataStoreRole role) {
+ DataStore store = null;
+ if (role == DataStoreRole.Image) {
+ SearchCriteriaService<ObjectInDataStoreVO, ObjectInDataStoreVO> sc = SearchCriteria2.create(ObjectInDataStoreVO.class);
+ sc.addAnd(sc.getEntity().getDataStoreRole(), Op.EQ, role);
+ sc.addAnd(sc.getEntity().getObjectUuid(), Op.EQ, objUuid);
+ sc.addAnd(sc.getEntity().getObjectType(), Op.EQ, type);
+ ObjectInDataStoreVO vo = sc.find();
+ if (vo != null) {
+ store = this.storeMgr.getDataStore(vo.getDataStoreUuid(), vo.getDataStoreRole());
+ }
+ }
+ return store;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
index a6ba9bc..fdaaace 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -20,31 +20,19 @@ package org.apache.cloudstack.storage.datastore;
import java.util.List;
-import org.apache.cloudstack.engine.subsystem.api.storage.CommandResult;
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.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+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.disktype.DiskFormat;
-import org.apache.cloudstack.framework.async.AsyncCompletionCallback;
-import org.apache.cloudstack.storage.image.TemplateInfo;
-import org.apache.cloudstack.storage.snapshot.SnapshotInfo;
-import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
-import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
public interface PrimaryDataStore extends DataStore, PrimaryDataStoreInfo {
VolumeInfo getVolume(long id);
List<VolumeInfo> getVolumes();
-/* void deleteVolumeAsync(VolumeInfo volume, AsyncCompletionCallback<CommandResult> callback);
-
- void createVolumeAsync(VolumeInfo vo, VolumeDiskType diskType, AsyncCompletionCallback<CommandResult> callback);
-
- void createVoluemFromBaseImageAsync(VolumeInfo volume, TemplateInfo templateStore, AsyncCompletionCallback<CommandResult> callback);
- */
-
boolean exists(DataObject data);
TemplateInfo getTemplate(long templateId);
@@ -53,13 +41,4 @@ public interface PrimaryDataStore extends DataStore, PrimaryDataStoreInfo {
DiskFormat getDefaultDiskType();
-
-/* void takeSnapshot(SnapshotInfo snapshot,
- AsyncCompletionCallback<CommandResult> callback);
-
- void revertSnapshot(SnapshotInfo snapshot,
- AsyncCompletionCallback<CommandResult> callback);
-
- void deleteSnapshot(SnapshotInfo snapshot,
- AsyncCompletionCallback<CommandResult> callback);*/
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java
index 0ac57f4..e70f803 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreEntityImpl.java
@@ -26,8 +26,8 @@ import java.util.Map;
import org.apache.cloudstack.engine.datacenter.entity.api.StorageEntity;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
-import com.cloud.storage.StoragePoolStatus;
import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.storage.StoragePoolStatus;
public class PrimaryDataStoreEntityImpl implements StorageEntity {
private PrimaryDataStoreInfo dataStore;
@@ -132,7 +132,8 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity {
@Override
public State getState() {
- return this.dataStore.getManagedState();
+ //return this.dataStore.getManagedState();
+ return null;
}
@Override
@@ -229,13 +230,7 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity {
return null;
}
- @Override
- public String getStorageProvider() {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
public String getStorageType() {
// TODO Auto-generated method stub
return null;
@@ -247,4 +242,16 @@ public class PrimaryDataStoreEntityImpl implements StorageEntity {
}
+ @Override
+ public Long getStorageProviderId() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public boolean isInMaintenance() {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
index a60ec7a..664c2d1 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStoreProviderManager.java
@@ -18,11 +18,14 @@
*/
package org.apache.cloudstack.storage.datastore;
+import org.apache.cloudstack.engine.subsystem.api.storage.HypervisorHostListener;
import org.apache.cloudstack.storage.volume.PrimaryDataStoreDriver;
public interface PrimaryDataStoreProviderManager {
public PrimaryDataStore getPrimaryDataStore(long dataStoreId);
+ public PrimaryDataStore getPrimaryDataStore(String uuid);
boolean registerDriver(String uuid, PrimaryDataStoreDriver driver);
+ boolean registerHostListener(String uuid, HypervisorHostListener listener);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/VolumeDataFactory.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/VolumeDataFactory.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/VolumeDataFactory.java
deleted file mode 100644
index 0cffc05..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/VolumeDataFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * 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 org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
-import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
-
-public interface VolumeDataFactory {
- VolumeInfo getVolume(long volumeId, DataStore store);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDao.java
deleted file mode 100644
index dca83ce..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDao.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * 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.db;
-
-import com.cloud.utils.db.GenericDao;
-
-public interface DataStoreProviderDao extends GenericDao<DataStoreProviderVO, Long> {
- public DataStoreProviderVO findByName(String name);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDaoImpl.java
deleted file mode 100644
index ccb6b48..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderDaoImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * 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.db;
-
-import org.springframework.stereotype.Component;
-
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchCriteria2;
-import com.cloud.utils.db.SearchCriteriaService;
-import com.cloud.utils.db.SearchCriteria.Op;
-
-@Component
-class DataStoreProviderDaoImpl extends GenericDaoBase<DataStoreProviderVO, Long> implements DataStoreProviderDao {
-
- @Override
- public DataStoreProviderVO findByName(String name) {
- SearchCriteriaService<DataStoreProviderVO, DataStoreProviderVO> sc = SearchCriteria2.create(DataStoreProviderVO.class);
- sc.addAnd(sc.getEntity().getName(), Op.EQ, name);
- return sc.find();
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderVO.java
deleted file mode 100644
index dcdafdd..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/DataStoreProviderVO.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.db;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-
-@Entity
-@Table(name = "data_store_provider")
-public class DataStoreProviderVO {
- @Id
- @TableGenerator(name = "data_store_provider_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "data_store_provider_seq", allocationSize = 1)
- @Column(name = "id", updatable = false, nullable = false)
- private long id;
-
- @Column(name = "name", nullable = false)
- private String name;
-
- @Column(name = "uuid", nullable = false)
- private String uuid;
-
- public long getId() {
- return id;
- }
-
- public String getName() {
- return this.name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
-
- public String getUuid() {
- return this.uuid;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
deleted file mode 100644
index 24a5c79..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDao.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * 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.db;
-
-import java.util.List;
-import java.util.Map;
-
-import org.apache.cloudstack.storage.datastore.DataStoreStatus;
-
-import com.cloud.utils.db.GenericDao;
-
-public interface PrimaryDataStoreDao extends GenericDao<PrimaryDataStoreVO, Long> {
-
- /**
- * @param datacenterId
- * -- the id of the datacenter (availability zone)
- */
- List<PrimaryDataStoreVO> listByDataCenterId(long datacenterId);
-
- /**
- * @param datacenterId
- * -- the id of the datacenter (availability zone)
- */
- List<PrimaryDataStoreVO> listBy(long datacenterId, long podId, Long clusterId);
-
- /**
- * Set capacity of storage pool in bytes
- *
- * @param id
- * pool id.
- * @param capacity
- * capacity in bytes
- */
- void updateCapacity(long id, long capacity);
-
- /**
- * Set available bytes of storage pool in bytes
- *
- * @param id
- * pool id.
- * @param available
- * available capacity in bytes
- */
- void updateAvailable(long id, long available);
-
- PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map<String, String> details);
-
- /**
- * Find pool by name.
- *
- * @param name
- * name of pool.
- * @return the single StoragePoolVO
- */
- List<PrimaryDataStoreVO> findPoolByName(String name);
-
- /**
- * Find pools by the pod that matches the details.
- *
- * @param podId
- * pod id to find the pools in.
- * @param details
- * details to match. All must match for the pool to be returned.
- * @return List of StoragePoolVO
- */
- List<PrimaryDataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details);
-
- List<PrimaryDataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared);
-
- /**
- * Find pool by UUID.
- *
- * @param uuid
- * uuid of pool.
- * @return the single StoragePoolVO
- */
- PrimaryDataStoreVO findPoolByUUID(String uuid);
-
- List<PrimaryDataStoreVO> listByStorageHost(String hostFqdnOrIp);
-
- PrimaryDataStoreVO findPoolByHostPath(long dcId, Long podId, String host, String path, String uuid);
-
- List<PrimaryDataStoreVO> listPoolByHostPath(String host, String path);
-
- void updateDetails(long poolId, Map<String, String> details);
-
- Map<String, String> getDetails(long poolId);
-
- List<String> searchForStoragePoolDetails(long poolId, String value);
-
- List<PrimaryDataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid);
-
- List<PrimaryDataStoreVO> listByStatus(DataStoreStatus status);
-
- long countPoolsByStatus(DataStoreStatus... statuses);
-
- List<PrimaryDataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status);
-
- List<PrimaryDataStoreVO> listPoolsByCluster(long clusterId);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
deleted file mode 100644
index faca54b..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDaoImpl.java
+++ /dev/null
@@ -1,360 +0,0 @@
-/*
- * 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.db;
-
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.storage.datastore.DataStoreStatus;
-import org.springframework.stereotype.Component;
-
-import com.cloud.utils.db.DB;
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.GenericSearchBuilder;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.SearchCriteria.Func;
-import com.cloud.utils.db.SearchCriteria.Op;
-import com.cloud.utils.db.Transaction;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-@Component
-public class PrimaryDataStoreDaoImpl extends GenericDaoBase<PrimaryDataStoreVO, Long> implements PrimaryDataStoreDao {
- protected final SearchBuilder<PrimaryDataStoreVO> AllFieldSearch;
- protected final SearchBuilder<PrimaryDataStoreVO> DcPodSearch;
- protected final SearchBuilder<PrimaryDataStoreVO> DcPodAnyClusterSearch;
- protected final SearchBuilder<PrimaryDataStoreVO> DeleteLvmSearch;
- protected final GenericSearchBuilder<PrimaryDataStoreVO, Long> StatusCountSearch;
-
- @Inject protected PrimaryDataStoreDetailsDao _detailsDao;
-
- private final String DetailsSqlPrefix = "SELECT storage_pool.* from storage_pool LEFT JOIN storage_pool_details ON storage_pool.id = storage_pool_details.pool_id WHERE storage_pool.removed is null and storage_pool.data_center_id = ? and (storage_pool.pod_id = ? or storage_pool.pod_id is null) and (";
- private final String DetailsSqlSuffix = ") GROUP BY storage_pool_details.pool_id HAVING COUNT(storage_pool_details.name) >= ?";
- private final String FindPoolTagDetails = "SELECT storage_pool_details.name FROM storage_pool_details WHERE pool_id = ? and value = ?";
-
- public PrimaryDataStoreDaoImpl() {
- AllFieldSearch = createSearchBuilder();
- AllFieldSearch.and("name", AllFieldSearch.entity().getName(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("uuid", AllFieldSearch.entity().getUuid(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("datacenterId", AllFieldSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("hostAddress", AllFieldSearch.entity().getHostAddress(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("status", AllFieldSearch.entity().getStatus(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("path", AllFieldSearch.entity().getPath(), SearchCriteria.Op.EQ);
- AllFieldSearch.and("podId", AllFieldSearch.entity().getPodId(), Op.EQ);
- AllFieldSearch.and("clusterId", AllFieldSearch.entity().getClusterId(), Op.EQ);
- AllFieldSearch.done();
-
- DcPodSearch = createSearchBuilder();
- DcPodSearch.and("datacenterId", DcPodSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
- DcPodSearch.and().op("nullpod", DcPodSearch.entity().getPodId(), SearchCriteria.Op.NULL);
- DcPodSearch.or("podId", DcPodSearch.entity().getPodId(), SearchCriteria.Op.EQ);
- DcPodSearch.cp();
- DcPodSearch.and().op("nullcluster", DcPodSearch.entity().getClusterId(), SearchCriteria.Op.NULL);
- DcPodSearch.or("cluster", DcPodSearch.entity().getClusterId(), SearchCriteria.Op.EQ);
- DcPodSearch.cp();
- DcPodSearch.done();
-
- DcPodAnyClusterSearch = createSearchBuilder();
- DcPodAnyClusterSearch.and("datacenterId", DcPodAnyClusterSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
- DcPodAnyClusterSearch.and().op("nullpod", DcPodAnyClusterSearch.entity().getPodId(), SearchCriteria.Op.NULL);
- DcPodAnyClusterSearch.or("podId", DcPodAnyClusterSearch.entity().getPodId(), SearchCriteria.Op.EQ);
- DcPodAnyClusterSearch.cp();
- DcPodAnyClusterSearch.done();
-
- DeleteLvmSearch = createSearchBuilder();
- DeleteLvmSearch.and("ids", DeleteLvmSearch.entity().getId(), SearchCriteria.Op.IN);
- DeleteLvmSearch.and().op("LVM", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ);
- DeleteLvmSearch.or("Filesystem", DeleteLvmSearch.entity().getPoolType(), SearchCriteria.Op.EQ);
- DeleteLvmSearch.cp();
- DeleteLvmSearch.done();
-
- StatusCountSearch = createSearchBuilder(Long.class);
- StatusCountSearch.and("status", StatusCountSearch.entity().getStatus(), SearchCriteria.Op.IN);
- StatusCountSearch.select(null, Func.COUNT, null);
- StatusCountSearch.done();
- }
-
- @Override
- public List<PrimaryDataStoreVO> findPoolByName(String name) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("name", name);
- return listIncludingRemovedBy(sc);
- }
-
- @Override
- public PrimaryDataStoreVO findPoolByUUID(String uuid) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("uuid", uuid);
- return findOneIncludingRemovedBy(sc);
- }
-
- @Override
- public List<PrimaryDataStoreVO> findIfDuplicatePoolsExistByUUID(String uuid) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("uuid", uuid);
- return listBy(sc);
- }
-
- @Override
- public List<PrimaryDataStoreVO> listByDataCenterId(long datacenterId) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("datacenterId", datacenterId);
- return listBy(sc);
- }
-
- @Override
- public void updateAvailable(long id, long available) {
- PrimaryDataStoreVO pool = createForUpdate(id);
- pool.setAvailableBytes(available);
- update(id, pool);
- }
-
- @Override
- public void updateCapacity(long id, long capacity) {
- PrimaryDataStoreVO pool = createForUpdate(id);
- pool.setCapacityBytes(capacity);
- update(id, pool);
-
- }
-
- @Override
- public List<PrimaryDataStoreVO> listByStorageHost(String hostFqdnOrIp) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("hostAddress", hostFqdnOrIp);
- return listIncludingRemovedBy(sc);
- }
-
- @Override
- public List<PrimaryDataStoreVO> listByStatus(DataStoreStatus status) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("status", status);
- return listBy(sc);
- }
-
- @Override
- public List<PrimaryDataStoreVO> listByStatusInZone(long dcId, DataStoreStatus status) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("status", status);
- sc.setParameters("datacenterId", dcId);
- return listBy(sc);
- }
-
- @Override
- public PrimaryDataStoreVO findPoolByHostPath(long datacenterId, Long podId, String host, String path, String uuid) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("hostAddress", host);
- sc.setParameters("path", path);
- sc.setParameters("datacenterId", datacenterId);
- sc.setParameters("podId", podId);
- sc.setParameters("uuid", uuid);
-
- return findOneBy(sc);
- }
-
- @Override
- public List<PrimaryDataStoreVO> listBy(long datacenterId, long podId, Long clusterId) {
- if (clusterId != null) {
- SearchCriteria<PrimaryDataStoreVO> sc = DcPodSearch.create();
- sc.setParameters("datacenterId", datacenterId);
- sc.setParameters("podId", podId);
-
- sc.setParameters("cluster", clusterId);
- return listBy(sc);
- } else {
- SearchCriteria<PrimaryDataStoreVO> sc = DcPodAnyClusterSearch.create();
- sc.setParameters("datacenterId", datacenterId);
- sc.setParameters("podId", podId);
- return listBy(sc);
- }
- }
-
- @Override
- public List<PrimaryDataStoreVO> listPoolByHostPath(String host, String path) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("hostAddress", host);
- sc.setParameters("path", path);
-
- return listBy(sc);
- }
-
- public PrimaryDataStoreVO listById(Integer id) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("id", id);
-
- return findOneIncludingRemovedBy(sc);
- }
-
- @Override
- @DB
- public PrimaryDataStoreVO persist(PrimaryDataStoreVO pool, Map<String, String> details) {
- Transaction txn = Transaction.currentTxn();
- txn.start();
- pool = super.persist(pool);
- if (details != null) {
- for (Map.Entry<String, String> detail : details.entrySet()) {
- PrimaryDataStoreDetailVO vo = new PrimaryDataStoreDetailVO(pool.getId(), detail.getKey(), detail.getValue());
- _detailsDao.persist(vo);
- }
- }
- txn.commit();
- return pool;
- }
-
- @DB
- @Override
- public List<PrimaryDataStoreVO> findPoolsByDetails(long dcId, long podId, Long clusterId, Map<String, String> details) {
- StringBuilder sql = new StringBuilder(DetailsSqlPrefix);
- if (clusterId != null) {
- sql.append("storage_pool.cluster_id = ? OR storage_pool.cluster_id IS NULL) AND (");
- }
- for (Map.Entry<String, String> detail : details.entrySet()) {
- sql.append("((storage_pool_details.name='").append(detail.getKey()).append("') AND (storage_pool_details.value='").append(detail.getValue()).append("')) OR ");
- }
- sql.delete(sql.length() - 4, sql.length());
- sql.append(DetailsSqlSuffix);
- Transaction txn = Transaction.currentTxn();
- PreparedStatement pstmt = null;
- try {
- pstmt = txn.prepareAutoCloseStatement(sql.toString());
- int i = 1;
- pstmt.setLong(i++, dcId);
- pstmt.setLong(i++, podId);
- if (clusterId != null) {
- pstmt.setLong(i++, clusterId);
- }
- pstmt.setInt(i++, details.size());
- ResultSet rs = pstmt.executeQuery();
- List<PrimaryDataStoreVO> pools = new ArrayList<PrimaryDataStoreVO>();
- while (rs.next()) {
- pools.add(toEntityBean(rs, false));
- }
- return pools;
- } catch (SQLException e) {
- throw new CloudRuntimeException("Unable to execute " + pstmt, e);
- }
- }
-
- protected Map<String, String> tagsToDetails(String[] tags) {
- Map<String, String> details = new HashMap<String, String>(tags.length);
- for (String tag : tags) {
- details.put(tag, "true");
- }
- return details;
- }
-
- @Override
- public List<PrimaryDataStoreVO> findPoolsByTags(long dcId, long podId, Long clusterId, String[] tags, Boolean shared) {
- List<PrimaryDataStoreVO> storagePools = null;
- if (tags == null || tags.length == 0) {
- storagePools = listBy(dcId, podId, clusterId);
- } else {
- Map<String, String> details = tagsToDetails(tags);
- storagePools = findPoolsByDetails(dcId, podId, clusterId, details);
- }
-
- if (shared == null) {
- return storagePools;
- } else {
- List<PrimaryDataStoreVO> filteredStoragePools = new ArrayList<PrimaryDataStoreVO>(storagePools);
- for (PrimaryDataStoreVO pool : storagePools) {
- /*
- * if (shared != pool.isShared()) {
- * filteredStoragePools.remove(pool); }
- */
- }
-
- return filteredStoragePools;
- }
- }
-
- @Override
- @DB
- public List<String> searchForStoragePoolDetails(long poolId, String value) {
-
- StringBuilder sql = new StringBuilder(FindPoolTagDetails);
-
- Transaction txn = Transaction.currentTxn();
- PreparedStatement pstmt = null;
- try {
- pstmt = txn.prepareAutoCloseStatement(sql.toString());
- pstmt.setLong(1, poolId);
- pstmt.setString(2, value);
-
- ResultSet rs = pstmt.executeQuery();
- List<String> tags = new ArrayList<String>();
-
- while (rs.next()) {
- tags.add(rs.getString("name"));
- }
- return tags;
- } catch (SQLException e) {
- throw new CloudRuntimeException("Unable to execute " + pstmt.toString(), e);
- }
-
- }
-
- @Override
- public void updateDetails(long poolId, Map<String, String> details) {
- if (details != null) {
- _detailsDao.update(poolId, details);
- }
- }
-
- @Override
- public Map<String, String> getDetails(long poolId) {
- return _detailsDao.getDetails(poolId);
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- super.configure(name, params);
- _detailsDao.configure("DetailsDao", params);
- return true;
- }
-
- @Override
- public long countPoolsByStatus(DataStoreStatus... statuses) {
- SearchCriteria<Long> sc = StatusCountSearch.create();
-
- sc.setParameters("status", (Object[]) statuses);
-
- List<Long> rs = customSearchIncludingRemoved(sc, null);
- if (rs.size() == 0) {
- return 0;
- }
-
- return rs.get(0);
- }
-
- @Override
- public List<PrimaryDataStoreVO> listPoolsByCluster(long clusterId) {
- SearchCriteria<PrimaryDataStoreVO> sc = AllFieldSearch.create();
- sc.setParameters("clusterId", clusterId);
-
- return listBy(sc);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
deleted file mode 100644
index d1f802d..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailVO.java
+++ /dev/null
@@ -1,79 +0,0 @@
-// 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.db;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Entity
-@Table(name="storage_pool_details")
-public class PrimaryDataStoreDetailVO {
- @Id
- @GeneratedValue(strategy=GenerationType.IDENTITY)
- @Column(name="id")
- long id;
-
- @Column(name="pool_id")
- long poolId;
-
- @Column(name="name")
- String name;
-
- @Column(name="value")
- String value;
-
- public PrimaryDataStoreDetailVO(long poolId, String name, String value) {
- this.poolId = poolId;
- this.name = name;
- this.value = value;
- }
-
- public long getId() {
- return id;
- }
-
- public long getPoolId() {
- return poolId;
- }
-
- public void setPoolId(long poolId) {
- this.poolId = poolId;
- }
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getValue() {
- return value;
- }
-
- public void setValue(String value) {
- this.value = value;
- }
-
- protected PrimaryDataStoreDetailVO() {
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
deleted file mode 100644
index 906742b..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDao.java
+++ /dev/null
@@ -1,28 +0,0 @@
-// 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.db;
-
-import java.util.Map;
-
-import com.cloud.storage.StoragePoolDetailVO;
-import com.cloud.utils.db.GenericDao;
-
-public interface PrimaryDataStoreDetailsDao extends GenericDao<PrimaryDataStoreDetailVO, Long> {
-
- void update(long poolId, Map<String, String> details);
- Map<String, String> getDetails(long poolId);
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDaoImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDaoImpl.java
deleted file mode 100644
index 59c488c..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreDetailsDaoImpl.java
+++ /dev/null
@@ -1,71 +0,0 @@
-// 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.db;
-
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import org.springframework.stereotype.Component;
-
-import com.cloud.utils.db.GenericDaoBase;
-import com.cloud.utils.db.SearchBuilder;
-import com.cloud.utils.db.SearchCriteria;
-import com.cloud.utils.db.Transaction;
-
-@Component
-public class PrimaryDataStoreDetailsDaoImpl extends GenericDaoBase<PrimaryDataStoreDetailVO, Long> implements PrimaryDataStoreDetailsDao {
-
- protected final SearchBuilder<PrimaryDataStoreDetailVO> PoolSearch = null;
-
- protected PrimaryDataStoreDetailsDaoImpl() {
- /*
- super();
- PoolSearch = createSearchBuilder();
- PoolSearch.and("pool", PoolSearch.entity().getPoolId(), SearchCriteria.Op.EQ);
- PoolSearch.done();
- */
- }
-
- @Override
- public void update(long poolId, Map<String, String> details) {
- Transaction txn = Transaction.currentTxn();
- SearchCriteria<PrimaryDataStoreDetailVO> sc = PoolSearch.create();
- sc.setParameters("pool", poolId);
-
- txn.start();
- expunge(sc);
- for (Map.Entry<String, String> entry : details.entrySet()) {
- PrimaryDataStoreDetailVO detail = new PrimaryDataStoreDetailVO(poolId, entry.getKey(), entry.getValue());
- persist(detail);
- }
- txn.commit();
- }
-
- @Override
- public Map<String, String> getDetails(long poolId) {
- SearchCriteria<PrimaryDataStoreDetailVO> sc = PoolSearch.create();
- sc.setParameters("pool", poolId);
-
- List<PrimaryDataStoreDetailVO> details = listBy(sc);
- Map<String, String> detailsMap = new HashMap<String, String>();
- for (PrimaryDataStoreDetailVO detail : details) {
- detailsMap.put(detail.getName(), detail.getValue());
- }
-
- return detailsMap;
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
deleted file mode 100644
index 3e37ec7..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
+++ /dev/null
@@ -1,267 +0,0 @@
-/*
- * 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.db;
-
-import java.util.Date;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.EnumType;
-import javax.persistence.Enumerated;
-import javax.persistence.Id;
-import javax.persistence.Table;
-import javax.persistence.TableGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-
-import org.apache.cloudstack.api.Identity;
-import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
-import org.apache.cloudstack.storage.datastore.DataStoreStatus;
-
-import com.cloud.utils.db.GenericDao;
-
-@Entity
-@Table(name = "storage_pool")
-public class PrimaryDataStoreVO implements Identity {
- @Id
- @TableGenerator(name = "storage_pool_sq", table = "sequence", pkColumnName = "name", valueColumnName = "value", pkColumnValue = "storage_pool_seq", allocationSize = 1)
- @Column(name = "id", updatable = false, nullable = false)
- private long id;
-
- @Column(name = "name", updatable = false, nullable = false, length = 255)
- private String name = null;
-
- @Column(name = "uuid", length = 255)
- private String uuid = null;
-
- @Column(name = "pool_type", updatable = false, nullable = false, length = 32)
- private String poolType;
-
- @Column(name = GenericDao.CREATED_COLUMN)
- Date created;
-
- @Column(name = GenericDao.REMOVED_COLUMN)
- private Date removed;
-
- @Column(name = "update_time", updatable = true)
- @Temporal(value = TemporalType.TIMESTAMP)
- private Date updateTime;
-
- @Column(name = "data_center_id", updatable = true, nullable = false)
- private long dataCenterId;
-
- @Column(name = "pod_id", updatable = true)
- private Long podId;
-
- @Column(name = "available_bytes", updatable = true, nullable = true)
- private long availableBytes;
-
- @Column(name = "capacity_bytes", updatable = true, nullable = true)
- private long capacityBytes;
-
- @Column(name = "status", updatable = true, nullable = false)
- @Enumerated(value = EnumType.STRING)
- private DataStoreStatus status;
-
- @Column(name = "storage_provider_id", updatable = true, nullable = false)
- private Long storageProviderId;
-
- @Column(name = "host_address")
- private String hostAddress;
-
- @Column(name = "path")
- private String path;
-
- @Column(name = "port")
- private int port;
-
- @Column(name = "user_info")
- private String userInfo;
-
- @Column(name = "cluster_id")
- private Long clusterId;
-
- @Column(name = "scope")
- @Enumerated(value = EnumType.STRING)
- private ScopeType scope;
-
- public long getId() {
- return id;
- }
-
- public DataStoreStatus getStatus() {
- return status;
- }
-
- public PrimaryDataStoreVO() {
- this.status = DataStoreStatus.Initial;
- }
-
- public String getName() {
- return name;
- }
-
- @Override
- public String getUuid() {
- return uuid;
- }
-
- public String getPoolType() {
- return poolType;
- }
-
- public void setPoolType(String protocol) {
- this.poolType = protocol;
- }
-
- public Date getCreated() {
- return created;
- }
-
- public Date getRemoved() {
- return removed;
- }
-
- public Date getUpdateTime() {
- return updateTime;
- }
-
- public long getDataCenterId() {
- return dataCenterId;
- }
-
- public long getAvailableBytes() {
- return availableBytes;
- }
-
- public Long getStorageProviderId() {
- return storageProviderId;
- }
-
- public void setStorageProviderId(Long provider) {
- storageProviderId = provider;
- }
-
- public long getCapacityBytes() {
- return capacityBytes;
- }
-
- public void setAvailableBytes(long available) {
- availableBytes = available;
- }
-
- public void setCapacityBytes(long capacity) {
- capacityBytes = capacity;
- }
-
- public Long getClusterId() {
- return clusterId;
- }
-
- public void setClusterId(Long clusterId) {
- this.clusterId = clusterId;
- }
-
- public String getHostAddress() {
- return hostAddress;
- }
-
- public void setHostAddress(String host) {
- this.hostAddress = host;
- }
-
- public String getPath() {
- return path;
- }
-
- public String getUserInfo() {
- return userInfo;
- }
-
- public void setStatus(DataStoreStatus status) {
- this.status = status;
- }
-
- public void setId(long id) {
- this.id = id;
- }
-
- public void setDataCenterId(long dcId) {
- this.dataCenterId = dcId;
- }
-
- public void setPodId(Long podId) {
- this.podId = podId;
- }
-
- public void setUuid(String uuid) {
- this.uuid = uuid;
- }
-
- public void setPath(String path) {
- this.path = path;
- }
-
- public void setUserInfo(String userInfo) {
- this.userInfo = userInfo;
- }
-
- public int getPort() {
- return port;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public Long getPodId() {
- return podId;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public void setScope(ScopeType scope) {
- this.scope = scope;
- }
-
- public ScopeType getScope() {
- return this.scope;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof PrimaryDataStoreVO) || obj == null) {
- return false;
- }
- PrimaryDataStoreVO that = (PrimaryDataStoreVO) obj;
- return this.id == that.id;
- }
-
- @Override
- public int hashCode() {
- return new Long(id).hashCode();
- }
-
- @Override
- public String toString() {
- return new StringBuilder("Pool[").append(id).append("|").append(poolType).append("]").toString();
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProvider.java
deleted file mode 100644
index 0d38f34..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProvider.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * 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.provider;
-
-import java.util.Map;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreDriver;
-import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle;
-
-public interface DataStoreProvider {
- public DataStoreLifeCycle getLifeCycle();
- public String getName();
- public String getUuid();
- public long getId();
- public boolean configure(Map<String, Object> params);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManager.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManager.java
deleted file mode 100644
index cbe045c..0000000
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManager.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.provider;
-
-import java.util.List;
-
-import com.cloud.utils.component.Manager;
-
-public interface DataStoreProviderManager extends Manager {
- public DataStoreProvider getDataStoreProviderByUuid(String uuid);
- public DataStoreProvider getDataStoreProviderById(long id);
- public DataStoreProvider getDataStoreProvider(String name);
- public List<DataStoreProvider> getDataStoreProviders();
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
index 3634b52..96d2da3 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/DataStoreProviderManagerImpl.java
@@ -26,14 +26,19 @@ import java.util.UUID;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProviderManager;
import org.apache.cloudstack.storage.datastore.db.DataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.DataStoreProviderVO;
+import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
import com.cloud.utils.component.ManagerBase;
@Component
public class DataStoreProviderManagerImpl extends ManagerBase implements DataStoreProviderManager {
+ private static final Logger s_logger = Logger
+ .getLogger(DataStoreProviderManagerImpl.class);
@Inject
List<DataStoreProvider> providers;
@Inject
@@ -59,8 +64,8 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
@Override
public boolean configure(String name, Map<String, Object> params)
throws ConfigurationException {
-
-/*
+ Map<String, Object> copyParams = new HashMap<String, Object>(params);
+
//TODO: hold global lock
List<DataStoreProviderVO> providerVos = providerDao.listAll();
for (DataStoreProvider provider : providers) {
@@ -83,12 +88,20 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
} else {
uuid = providerVO.getUuid();
}
- params.put("uuid", uuid);
- params.put("id", providerVO.getId());
- provider.configure(params);
+ copyParams.put("uuid", uuid);
+ copyParams.put("id", providerVO.getId());
providerMap.put(uuid, provider);
+ try {
+ boolean registrationResult = provider.configure(copyParams);
+ if (!registrationResult) {
+ providerMap.remove(uuid);
+ }
+ } catch(Exception e) {
+ s_logger.debug("configure provider failed", e);
+ providerMap.remove(uuid);
+ }
}
- */
+
return true;
}
@@ -97,4 +110,9 @@ public class DataStoreProviderManagerImpl extends ManagerBase implements DataSto
DataStoreProviderVO provider = providerDao.findById(id);
return providerMap.get(provider.getUuid());
}
+
+ @Override
+ public DataStoreProvider getDefaultPrimaryDataStoreProvider() {
+ return this.getDataStoreProvider("ancient primary data store provider");
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java
index 502158c..d44a40e 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/ImageDataStoreProvider.java
@@ -18,6 +18,8 @@
*/
package org.apache.cloudstack.storage.datastore.provider;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
+
public interface ImageDataStoreProvider extends DataStoreProvider {
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
index dbca549..fdf5958 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
@@ -16,6 +16,8 @@
// under the License.
package org.apache.cloudstack.storage.datastore.provider;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider;
+
public interface PrimaryDataStoreProvider extends DataStoreProvider {
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/00df9727/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
index 08f9182..fb7dec0 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/db/ObjectInDataStoreDao.java
@@ -16,10 +16,12 @@
// under the License.
package org.apache.cloudstack.storage.db;
-import org.apache.cloudstack.storage.volume.ObjectInDataStoreStateMachine;
+import org.apache.cloudstack.engine.subsystem.api.storage.DataObjectInStore;
+import org.apache.cloudstack.engine.subsystem.api.storage.ObjectInDataStoreStateMachine;
+
import com.cloud.utils.db.GenericDao;
import com.cloud.utils.fsm.StateDao;
-public interface ObjectInDataStoreDao extends GenericDao<ObjectInDataStoreVO, Long>, StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, ObjectInDataStoreVO> {
+public interface ObjectInDataStoreDao extends GenericDao<ObjectInDataStoreVO, Long>, StateDao<ObjectInDataStoreStateMachine.State, ObjectInDataStoreStateMachine.Event, DataObjectInStore> {
}