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 2012/12/08 03:23:20 UTC
[1/2] git commit: add lifecycle on primarydatastore
Updated Branches:
refs/heads/javelin 57c9b4c6b -> 7652a44be
add lifecycle on primarydatastore
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/ae59bf6c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/ae59bf6c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/ae59bf6c
Branch: refs/heads/javelin
Commit: ae59bf6c3bd29b8319167230bad913f34abbc786
Parents: 57c9b4c
Author: Edison Su <su...@gmail.com>
Authored: Thu Dec 6 19:01:06 2012 -0800
Committer: Edison Su <su...@gmail.com>
Committed: Fri Dec 7 18:23:08 2012 -0800
----------------------------------------------------------------------
.../subsystem/api/storage/DataStoreLifeCycle.java | 13 ----
.../api/storage/PrimaryDataStoreInfo.java | 2 +
.../api/storage/PrimaryDataStoreLifeCycle.java | 37 ++++++++++++
.../api/storage/PrimaryDataStoreProvider.java | 18 ++++++
.../engine/subsystem/api/storage/Scope.java | 24 ++++++++
.../engine/subsystem/api/storage/ScopeType.java | 25 ++++++++
.../cloudstack/storage/test/volumeServiceTest.java | 4 +-
.../storage/datastore/PrimaryDataStore.java | 1 -
.../cloudstack/storage/scope/ClusterScope.java | 42 +++++++++++++
.../apache/cloudstack/storage/scope/HostScope.java | 39 ++++++++++++
.../apache/cloudstack/storage/scope/ZoneScope.java | 42 +++++++++++++
.../storage/datastore/DataStoreStatus.java | 2 +-
.../storage/datastore/DefaultPrimaryDataStore.java | 34 +++++++++--
.../storage/datastore/db/PrimaryDataStoreVO.java | 2 +-
.../driver/DefaultPrimaryDataStoreDriverImpl.java | 27 ++++++++-
.../datastore/driver/PrimaryDataStoreDriver.java | 9 +++
.../DefaultPrimaryDataStoreLifeCycleImpl.java | 41 +++++++------
.../lifecycle/PrimaryDataStoreLifeCycle.java | 39 ------------
.../DefaultPrimaryDataStoreManagerImpl.java | 14 +---
.../datastore/manager/PrimaryDataStoreManager.java | 3 +-
.../DefaultPrimaryDatastoreProviderImpl.java | 46 +++++++++------
.../provider/PrimaryDataStoreProvider.java | 17 -----
.../provider/PrimaryDataStoreProviderManager.java | 2 +
.../PrimaryDataStoreProviderManagerImpl.java | 6 +-
.../TemplatePrimaryDataStoreManagerImpl.java | 32 +++++++---
.../driver/SolidfirePrimaryDataStoreDriver.java | 20 ++++++
.../SolidfirePrimaryDataStoreProvider.java | 22 ++++---
.../apache/cloudstack/storage/test/VolumeTest.java | 7 +-
28 files changed, 413 insertions(+), 157 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
deleted file mode 100644
index 8a73e63..0000000
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/DataStoreLifeCycle.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.apache.cloudstack.engine.subsystem.api.storage;
-
-public interface DataStoreLifeCycle {
- public enum DataStoreEvent {
- HOSTUP,
- HOSTDOWN,
- }
- void add();
- void delete();
- void enable();
- void disable();
- void processEvent(DataStoreEvent event, Object... objs);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
index 9995688..27ea41c 100644
--- a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreInfo.java
@@ -38,4 +38,6 @@ public interface PrimaryDataStoreInfo {
public State getManagedState();
public String getName();
public String getType();
+ public PrimaryDataStoreLifeCycle getLifeCycle();
+ PrimaryDataStoreProvider getProvider();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
new file mode 100644
index 0000000..bcd0d85
--- /dev/null
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreLifeCycle.java
@@ -0,0 +1,37 @@
+/*
+ * 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.engine.subsystem.api.storage;
+
+import java.util.Map;
+
+public interface PrimaryDataStoreLifeCycle {
+ public boolean initialize(Map<String, String> dsInfos);
+
+ public boolean attach(Scope scope);
+
+ public boolean dettach();
+
+ public boolean unmanaged();
+
+ public boolean maintain();
+
+ public boolean cancelMaintain();
+
+ public boolean deleteDataStore();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
new file mode 100644
index 0000000..c83594e
--- /dev/null
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/PrimaryDataStoreProvider.java
@@ -0,0 +1,18 @@
+package org.apache.cloudstack.engine.subsystem.api.storage;
+
+import java.util.Map;
+
+public interface PrimaryDataStoreProvider {
+ public PrimaryDataStoreInfo getDataStore(long dataStoreId);
+ public long getId();
+ public String getName();
+
+ /**
+ * @param dsInfos
+ * @return
+ */
+ PrimaryDataStoreInfo registerDataStore(Map<String, String> dsInfos);
+
+ //LifeCycle of provider
+ public boolean configure();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
new file mode 100644
index 0000000..a9601a1
--- /dev/null
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/Scope.java
@@ -0,0 +1,24 @@
+/*
+ * 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.engine.subsystem.api.storage;
+
+public interface Scope {
+ public ScopeType getScopeType();
+ public long getScopeId();
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ScopeType.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ScopeType.java b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ScopeType.java
new file mode 100644
index 0000000..d1606e1
--- /dev/null
+++ b/engine/api/src/org/apache/cloudstack/engine/subsystem/api/storage/ScopeType.java
@@ -0,0 +1,25 @@
+/*
+ * 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.engine.subsystem.api.storage;
+
+public enum ScopeType {
+ HOST,
+ CLUSTER,
+ ZONE;
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
----------------------------------------------------------------------
diff --git a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
index 2c24739..09fa3d1 100644
--- a/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
+++ b/engine/storage/integration-test/test/org/apache/cloudstack/storage/test/volumeServiceTest.java
@@ -35,6 +35,8 @@ import javax.naming.ConfigurationException;
import org.apache.cloudstack.engine.cloud.entity.api.TemplateEntity;
import org.apache.cloudstack.engine.cloud.entity.api.VolumeEntity;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.QCOW2;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VHD;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VMDK;
@@ -47,9 +49,7 @@ import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
import org.apache.cloudstack.storage.datastore.provider.DefaultPrimaryDatastoreProviderImpl;
-import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProviderManager;
import org.apache.cloudstack.storage.image.ImageService;
import org.apache.cloudstack.storage.image.db.ImageDataDao;
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/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 b977a79..befb9d6 100644
--- a/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
+++ b/engine/storage/src/org/apache/cloudstack/storage/datastore/PrimaryDataStore.java
@@ -49,5 +49,4 @@ public interface PrimaryDataStore extends PrimaryDataStoreInfo {
boolean installTemplate(TemplateOnPrimaryDataStoreInfo template);
VolumeDiskType getDefaultDiskType();
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/src/org/apache/cloudstack/storage/scope/ClusterScope.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/scope/ClusterScope.java b/engine/storage/src/org/apache/cloudstack/storage/scope/ClusterScope.java
new file mode 100644
index 0000000..dad2f50
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/scope/ClusterScope.java
@@ -0,0 +1,42 @@
+/*
+ * 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.scope;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+
+public class ClusterScope implements Scope {
+ private ScopeType type = ScopeType.CLUSTER;
+ private long clusterId;
+
+ public ClusterScope(long clusterId) {
+ this.clusterId = clusterId;
+ }
+
+ @Override
+ public ScopeType getScopeType() {
+ return this.type;
+ }
+
+ @Override
+ public long getScopeId() {
+ return this.clusterId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/src/org/apache/cloudstack/storage/scope/HostScope.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/scope/HostScope.java b/engine/storage/src/org/apache/cloudstack/storage/scope/HostScope.java
new file mode 100644
index 0000000..a36c98e
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/scope/HostScope.java
@@ -0,0 +1,39 @@
+/*
+ * 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.scope;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+
+public class HostScope implements Scope {
+ private ScopeType type = ScopeType.HOST;
+ private long hostId;
+ public HostScope(long hostId) {
+ this.hostId = hostId;
+ }
+ @Override
+ public ScopeType getScopeType() {
+ return this.type;
+ }
+
+ @Override
+ public long getScopeId() {
+ return this.hostId;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/src/org/apache/cloudstack/storage/scope/ZoneScope.java
----------------------------------------------------------------------
diff --git a/engine/storage/src/org/apache/cloudstack/storage/scope/ZoneScope.java b/engine/storage/src/org/apache/cloudstack/storage/scope/ZoneScope.java
new file mode 100644
index 0000000..23a0ddb
--- /dev/null
+++ b/engine/storage/src/org/apache/cloudstack/storage/scope/ZoneScope.java
@@ -0,0 +1,42 @@
+/*
+ * 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.scope;
+
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+
+public class ZoneScope implements Scope {
+ private ScopeType type = ScopeType.ZONE;
+ private long zoneId;
+
+ public ZoneScope(long zoneId) {
+ this.zoneId = zoneId;
+ }
+
+ @Override
+ public ScopeType getScopeType() {
+ return this.type;
+ }
+
+ @Override
+ public long getScopeId() {
+ return this.zoneId;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
index 5c61da0..a40f6cf 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DataStoreStatus.java
@@ -19,5 +19,5 @@
package org.apache.cloudstack.storage.datastore;
public enum DataStoreStatus {
- Creating, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
+ Initial, Initialized, Creating, Up, PrepareForMaintenance, ErrorInMaintenance, CancelMaintenance, Maintenance, Removed;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
index b6350ed..f5e7349 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/DefaultPrimaryDataStore.java
@@ -8,10 +8,13 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
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.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.disktype.VolumeDiskType;
import org.apache.cloudstack.storage.HypervisorHostEndPoint;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
+import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.image.TemplateInfo;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
@@ -33,6 +36,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
protected PrimaryDataStoreDriver driver;
protected PrimaryDataStoreVO pdsv;
protected PrimaryDataStoreInfo pdsInfo;
+ protected PrimaryDataStoreLifeCycle lifeCycle;
@Inject
private VolumeDao volumeDao;
@Inject
@@ -40,14 +44,20 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
@Inject
TemplatePrimaryDataStoreManager templatePrimaryStoreMgr;
- private DefaultPrimaryDataStore(PrimaryDataStoreDriver driver, PrimaryDataStoreVO pdsv, PrimaryDataStoreInfo pdsInfo) {
- this.driver = driver;
+ private DefaultPrimaryDataStore(PrimaryDataStoreVO pdsv) {
this.pdsv = pdsv;
- this.pdsInfo = pdsInfo;
}
- public static DefaultPrimaryDataStore createDataStore(PrimaryDataStoreDriver driver, PrimaryDataStoreVO pdsv, PrimaryDataStoreInfo pdsInfo) {
- DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(driver, pdsv, pdsInfo);
+ public void setDriver(PrimaryDataStoreDriver driver) {
+ this.driver = driver;
+ }
+
+ public void setLifeCycle(PrimaryDataStoreLifeCycle lifeCycle) {
+ this.lifeCycle = lifeCycle;
+ }
+
+ public static DefaultPrimaryDataStore createDataStore(PrimaryDataStoreVO pdsv) {
+ DefaultPrimaryDataStore dataStore = new DefaultPrimaryDataStore(pdsv);
return ComponentInject.inject(dataStore);
}
@@ -120,7 +130,7 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
@Override
public VolumeObject createVolume(VolumeInfo vi, VolumeDiskType diskType) {
- if (!pdsInfo.isVolumeDiskTypeSupported(diskType)) {
+ if (!isVolumeDiskTypeSupported(diskType)) {
return null;
}
VolumeObject vo = (VolumeObject) vi;
@@ -193,4 +203,16 @@ public class DefaultPrimaryDataStore implements PrimaryDataStore {
// TODO Auto-generated method stub
return null;
}
+
+ @Override
+ public PrimaryDataStoreLifeCycle getLifeCycle() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public PrimaryDataStoreProvider getProvider() {
+ // TODO Auto-generated method stub
+ return null;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
index 6c05d10..5a6b409 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/db/PrimaryDataStoreVO.java
@@ -108,7 +108,7 @@ public class PrimaryDataStoreVO implements Identity {
}
public PrimaryDataStoreVO() {
- // TODO Auto-generated constructor stub
+ this.status = DataStoreStatus.Initial;
}
public String getName() {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
index 97b49cb..db5f7e8 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/DefaultPrimaryDataStoreDriverImpl.java
@@ -1,6 +1,7 @@
package org.apache.cloudstack.storage.datastore.driver;
import java.util.List;
+import java.util.Map;
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.engine.subsystem.api.storage.VolumeInfo;
@@ -8,6 +9,7 @@ import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
import org.apache.cloudstack.storage.command.CreateVolumeCommand;
import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
import org.apache.cloudstack.storage.command.DeleteVolume;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.to.ImageOnPrimayDataStoreTO;
import org.apache.cloudstack.storage.to.VolumeTO;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
@@ -19,10 +21,13 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.utils.exception.CloudRuntimeException;
-@Component
public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver {
private static final Logger s_logger = Logger.getLogger(DefaultPrimaryDataStoreDriverImpl.class);
-
+ protected PrimaryDataStore dataStore;
+ public DefaultPrimaryDataStoreDriverImpl(PrimaryDataStore dataStore) {
+ this.dataStore = dataStore;
+ }
+
@Override
public boolean createVolume(VolumeObject vol) {
// The default driver will send createvolume command to one of hosts
@@ -110,4 +115,22 @@ public class DefaultPrimaryDataStoreDriverImpl implements PrimaryDataStoreDriver
// TODO Auto-generated method stub
return 0;
}
+
+ @Override
+ public boolean initialize(Map<String, String> params) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean grantAccess(EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean revokeAccess(EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
index 271ec38..a42ec16 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/driver/PrimaryDataStoreDriver.java
@@ -1,5 +1,7 @@
package org.apache.cloudstack.storage.datastore.driver;
+import java.util.Map;
+
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
import org.apache.cloudstack.storage.volume.VolumeObject;
@@ -18,4 +20,11 @@ public interface PrimaryDataStoreDriver {
long getCapacity();
long getAvailableCapacity();
+
+
+ //Lifecycle API
+ boolean initialize(Map<String, String> params);
+ boolean grantAccess(EndPoint ep);
+ boolean revokeAccess(EndPoint ep);
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
index c4c7216..3d611cc 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/DefaultPrimaryDataStoreLifeCycleImpl.java
@@ -25,18 +25,23 @@ import java.util.Map;
import javax.inject.Inject;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
+import org.apache.cloudstack.engine.subsystem.api.storage.Scope;
+import org.apache.cloudstack.engine.subsystem.api.storage.ScopeType;
+import org.apache.cloudstack.storage.datastore.DataStoreStatus;
+import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
-import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.springframework.stereotype.Component;
public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLifeCycle {
- private final PrimaryDataStoreProvider provider;
+ protected PrimaryDataStoreInfo dataStore;
protected PrimaryDataStoreDao dataStoreDao;
- public DefaultPrimaryDataStoreLifeCycleImpl(PrimaryDataStoreProvider provider, PrimaryDataStoreDao dataStoreDao) {
- this.provider = provider;
+ public DefaultPrimaryDataStoreLifeCycleImpl(PrimaryDataStoreDao dataStoreDao, PrimaryDataStore dataStore) {
this.dataStoreDao = dataStoreDao;
+ this.dataStore = dataStore;
}
protected class DataStoreUrlParser {
@@ -75,54 +80,54 @@ public class DefaultPrimaryDataStoreLifeCycleImpl implements PrimaryDataStoreLif
}
@Override
- public PrimaryDataStoreInfo registerDataStore(Map<String, String> dsInfos) {
+ public boolean initialize(Map<String, String> dsInfos) {
DataStoreUrlParser parser = new DataStoreUrlParser(dsInfos.get("url"));
- PrimaryDataStoreVO dataStore = new PrimaryDataStoreVO();
+ PrimaryDataStoreVO dataStore = dataStoreDao.findById(this.dataStore.getId());
dataStore.setName(dsInfos.get("name"));
dataStore.setPoolType(parser.getSchema());
dataStore.setPort(parser.port);
- dataStore.setDataCenterId(Integer.parseInt(dsInfos.get("dcId")));
dataStore.setHostAddress(parser.getHost());
dataStore.setPath(parser.getPath());
- dataStore.setStorageProviderId(this.provider.getId());
- dataStore.setClusterId(Long.parseLong(dsInfos.get("clusterId")));
- dataStore = dataStoreDao.persist(dataStore);
+ dataStore.setStatus(DataStoreStatus.Initialized);
+ dataStoreDao.update(this.dataStore.getId(), dataStore);
//TODO: add extension point for each data store
- return this.provider.getDataStore(dataStore.getId());
+
+ this.dataStore = this.dataStore.getProvider().getDataStore(dataStore.getId());
+ return true;
}
@Override
- public boolean attach(long scope) {
- // TODO Auto-generated method stub
+ public boolean attach(Scope scope) {
+ //if (scope.getScopeType() == ScopeType.CLUSTER)
return false;
}
@Override
- public boolean dettach(long dataStoreId) {
+ public boolean dettach() {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean unmanaged(long dataStoreId) {
+ public boolean unmanaged() {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean maintain(long dataStoreId) {
+ public boolean maintain() {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean cancelMaintain(long dataStoreId) {
+ public boolean cancelMaintain() {
// TODO Auto-generated method stub
return false;
}
@Override
- public boolean deleteDataStore(long dataStoreId) {
+ public boolean deleteDataStore() {
// TODO Auto-generated method stub
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
deleted file mode 100644
index 570a622..0000000
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/lifecycle/PrimaryDataStoreLifeCycle.java
+++ /dev/null
@@ -1,39 +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.lifecycle;
-
-import java.util.Map;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
-
-public interface PrimaryDataStoreLifeCycle {
- public PrimaryDataStoreInfo registerDataStore(Map<String, String> dsInfos);
-
- public boolean attach(long scope);
-
- public boolean dettach(long dataStoreId);
-
- public boolean unmanaged(long dataStoreId);
-
- public boolean maintain(long dataStoreId);
-
- public boolean cancelMaintain(long dataStoreId);
-
- public boolean deleteDataStore(long dataStoreId);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
index 91528ba..139da4d 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/DefaultPrimaryDataStoreManagerImpl.java
@@ -20,12 +20,13 @@ package org.apache.cloudstack.storage.datastore.manager;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
-import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProviderManager;
import org.springframework.stereotype.Component;
@@ -43,14 +44,7 @@ public class DefaultPrimaryDataStoreManagerImpl implements PrimaryDataStoreManag
PrimaryDataStoreVO dataStoreVO = dataStoreDao.findById(dataStoreId);
Long providerId = dataStoreVO.getStorageProviderId();
PrimaryDataStoreProvider provider = providerManager.getDataStoreProvider(providerId);
- PrimaryDataStore dataStore = provider.getDataStore(dataStoreId);
+ PrimaryDataStore dataStore = (PrimaryDataStore)provider.getDataStore(dataStoreId);
return dataStore;
}
-
- @Override
- public PrimaryDataStoreLifeCycle getPrimaryDataStoreLifeCycle(long dataStoreId) {
- // TODO Auto-generated method stub
- return null;
- }
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java
index 7dd0276..f6b3625 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/manager/PrimaryDataStoreManager.java
@@ -18,11 +18,10 @@
*/
package org.apache.cloudstack.storage.datastore.manager;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
public interface PrimaryDataStoreManager {
public PrimaryDataStore getPrimaryDataStore(long dataStoreId);
- public PrimaryDataStoreLifeCycle getPrimaryDataStoreLifeCycle(long dataStoreId);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
index 872673e..f1fca31 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/DefaultPrimaryDatastoreProviderImpl.java
@@ -4,29 +4,31 @@ import java.util.Map;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
+import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.driver.DefaultPrimaryDataStoreDriverImpl;
import org.apache.cloudstack.storage.datastore.driver.PrimaryDataStoreDriver;
import org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
import org.springframework.stereotype.Component;
@Component
public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProvider {
private final String providerName = "default primary data store provider";
protected PrimaryDataStoreDriver driver;
- private PrimaryDataStoreProviderVO provider;
+ private PrimaryDataStoreProviderVO providerVO;
@Inject
protected PrimaryDataStoreDao dataStoreDao;
- protected PrimaryDataStoreLifeCycle dataStoreLifeCycle;
+ @Inject
+ protected PrimaryDataStoreProviderDao providerDao;
public DefaultPrimaryDatastoreProviderImpl() {
- this.driver = new DefaultPrimaryDataStoreDriverImpl();
- this.dataStoreLifeCycle = new DefaultPrimaryDataStoreLifeCycleImpl(this, dataStoreDao);
+
}
@Override
@@ -36,29 +38,37 @@ public class DefaultPrimaryDatastoreProviderImpl implements PrimaryDataStoreProv
return null;
}
- PrimaryDataStore pds = DefaultPrimaryDataStore.createDataStore(driver, dsv, null);
+ DefaultPrimaryDataStore pds = DefaultPrimaryDataStore.createDataStore(dsv);
+
+ PrimaryDataStoreDriver driver = new DefaultPrimaryDataStoreDriverImpl(pds);
+ pds.setDriver(driver);
+
+ DefaultPrimaryDataStoreLifeCycleImpl lifeCycle = new DefaultPrimaryDataStoreLifeCycleImpl(dataStoreDao, pds);
+ pds.setLifeCycle(lifeCycle);
+
return pds;
}
-
+
@Override
- public PrimaryDataStoreLifeCycle getDataStoreLifeCycle() {
- return dataStoreLifeCycle;
+ public PrimaryDataStore registerDataStore(Map<String, String> dsInfos) {
+ PrimaryDataStoreVO dataStoreVO = new PrimaryDataStoreVO();
+ dataStoreVO.setStorageProviderId(this.getId());
+ dataStoreVO = dataStoreDao.persist(dataStoreVO);
+
+ PrimaryDataStore dataStore = this.getDataStore(dataStoreVO.getId());
+ PrimaryDataStoreLifeCycle lifeCycle = dataStore.getLifeCycle();
+ lifeCycle.initialize(dsInfos);
+ return getDataStore(dataStore.getId());
}
@Override
public long getId() {
- return this.provider.getId();
- }
-
- @Override
- public boolean register(PrimaryDataStoreProviderVO provider, Map<String, Object> params) {
- this.provider = provider;
- return true;
+ return this.providerVO.getId();
}
@Override
- public boolean init(PrimaryDataStoreProviderVO provider) {
- this.provider = provider;
+ public boolean configure() {
+ this.providerVO = providerDao.findByName(this.providerName);
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
deleted file mode 100644
index c875426..0000000
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProvider.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.apache.cloudstack.storage.datastore.provider;
-
-import java.util.Map;
-
-import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
-import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
-
-public interface PrimaryDataStoreProvider {
- public PrimaryDataStore getDataStore(long dataStoreId);
- public PrimaryDataStoreLifeCycle getDataStoreLifeCycle();
- public long getId();
- public String getName();
- public boolean register(PrimaryDataStoreProviderVO provider, Map<String, Object> params);
- public boolean init(PrimaryDataStoreProviderVO provider);
-}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
index 5ede09c..dae9f11 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManager.java
@@ -2,6 +2,8 @@ package org.apache.cloudstack.storage.datastore.provider;
import java.util.List;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
+
import com.cloud.utils.component.Manager;
public interface PrimaryDataStoreProviderManager extends Manager {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
index c0ad052..d064cce 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/datastore/provider/PrimaryDataStoreProviderManagerImpl.java
@@ -24,6 +24,7 @@ import java.util.Map;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreProviderVO;
import org.springframework.stereotype.Component;
@@ -60,10 +61,9 @@ public class PrimaryDataStoreProviderManagerImpl implements PrimaryDataStoreProv
PrimaryDataStoreProviderVO dataStoreProvider = new PrimaryDataStoreProviderVO();
dataStoreProvider.setName(provider.getName());
dataStoreProvider = providerDao.persist(dataStoreProvider);
- provider.register(dataStoreProvider, params);
}
- PrimaryDataStoreProviderVO providervo = providerDao.findByName(provider.getName());
- provider.init(providervo);
+
+ provider.configure();
}
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
index 5b2d1cb..b197ba1 100644
--- a/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
+++ b/engine/storage/volume/src/org/apache/cloudstack/storage/volume/TemplatePrimaryDataStoreManagerImpl.java
@@ -72,23 +72,35 @@ public class TemplatePrimaryDataStoreManagerImpl implements TemplatePrimaryDataS
retries--;
} while (retries > 0);
+ if (templateStoreVO == null) {
+ throw new CloudRuntimeException("waiting too long for template downloading, marked it as failed");
+ }
+
return templateStoreVO;
}
@Override
public TemplateOnPrimaryDataStoreObject createTemplateOnPrimaryDataStore(TemplateInfo template, PrimaryDataStoreInfo dataStore) {
-
- TemplatePrimaryDataStoreVO templateStoreVO = new TemplatePrimaryDataStoreVO(dataStore.getId(), template.getId());
- try {
- templateStoreVO = templateStoreDao.persist(templateStoreVO);
- } catch (Throwable th) {
- templateStoreVO = templateStoreDao.findByTemplateIdAndPoolId(template.getId(), dataStore.getId());
- if (templateStoreVO != null) {
- templateStoreVO = waitingForTemplateDownload(template, dataStore);
- } else {
- throw new CloudRuntimeException("Failed create db entry: " + th.toString());
+ TemplatePrimaryDataStoreVO templateStoreVO = null;
+ boolean freshNewTemplate = false;
+ templateStoreVO = templateStoreDao.findByTemplateIdAndPoolId(template.getId(), dataStore.getId());
+ if (templateStoreVO == null) {
+ try {
+ templateStoreVO = new TemplatePrimaryDataStoreVO(dataStore.getId(), template.getId());
+ templateStoreVO = templateStoreDao.persist(templateStoreVO);
+ freshNewTemplate = true;
+ } catch (Throwable th) {
+ templateStoreVO = templateStoreDao.findByTemplateIdAndPoolId(template.getId(), dataStore.getId());
+ if (templateStoreVO == null) {
+ throw new CloudRuntimeException("Failed create db entry: " + th.toString());
+ }
}
}
+ //If it's not a fresh template downloading, waiting for other people downloading finished.
+ if (!freshNewTemplate && templateStoreVO.getState() != TemplateOnPrimaryDataStoreStateMachine.State.Ready) {
+ templateStoreVO = waitingForTemplateDownload(template, dataStore);
+ }
+
TemplateOnPrimaryDataStoreObject templateStoreObject = new TemplateOnPrimaryDataStoreObject(dataStore, template, templateStoreVO, templateStoreDao, this);
return templateStoreObject;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
index bd3844a..8d96711 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
+++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/driver/SolidfirePrimaryDataStoreDriver.java
@@ -1,5 +1,7 @@
package org.apache.cloudstack.storage.datastore.driver;
+import java.util.Map;
+
import org.apache.cloudstack.engine.subsystem.api.storage.EndPoint;
import org.apache.cloudstack.storage.volume.TemplateOnPrimaryDataStoreInfo;
import org.apache.cloudstack.storage.volume.VolumeObject;
@@ -49,4 +51,22 @@ public class SolidfirePrimaryDataStoreDriver implements PrimaryDataStoreDriver {
return 0;
}
+ @Override
+ public boolean initialize(Map<String, String> params) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean grantAccess(EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
+ @Override
+ public boolean revokeAccess(EndPoint ep) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
index a66fac2..2fbcc2c 100644
--- a/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
+++ b/plugins/storage/volume/solidfire/src/org/apache/cloudstack/storage/datastore/provider/SolidfirePrimaryDataStoreProvider.java
@@ -1,24 +1,21 @@
package org.apache.cloudstack.storage.datastore.provider;
-import javax.inject.Inject;
-
import org.apache.cloudstack.storage.datastore.DefaultPrimaryDataStore;
import org.apache.cloudstack.storage.datastore.PrimaryDataStore;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreVO;
import org.apache.cloudstack.storage.datastore.driver.SolidfirePrimaryDataStoreDriver;
+import org.apache.cloudstack.storage.datastore.lifecycle.DefaultPrimaryDataStoreLifeCycleImpl;
import org.springframework.stereotype.Component;
@Component
public class SolidfirePrimaryDataStoreProvider extends
DefaultPrimaryDatastoreProviderImpl {
private final String name = "Solidfre Primary Data Store Provider";
- private SolidfirePrimaryDataStoreDriver driver;
-
- @Inject
- public SolidfirePrimaryDataStoreProvider(PrimaryDataStoreDao dataStoreDao) {
- super(dataStoreDao);
- driver = new SolidfirePrimaryDataStoreDriver();
+
+
+ public SolidfirePrimaryDataStoreProvider() {
+ super();
+
// TODO Auto-generated constructor stub
}
@@ -34,7 +31,12 @@ public class SolidfirePrimaryDataStoreProvider extends
return null;
}
- PrimaryDataStore pds = DefaultPrimaryDataStore.createDataStore(driver, dsv, null);
+ DefaultPrimaryDataStore pds = DefaultPrimaryDataStore.createDataStore(dsv);
+ SolidfirePrimaryDataStoreDriver driver = new SolidfirePrimaryDataStoreDriver();
+ pds.setDriver(driver);
+
+ DefaultPrimaryDataStoreLifeCycleImpl lifeCycle = new DefaultPrimaryDataStoreLifeCycleImpl(super.dataStoreDao, pds);
+ pds.setLifeCycle(lifeCycle);
return pds;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/ae59bf6c/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java
----------------------------------------------------------------------
diff --git a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java b/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java
index 39ecc0c..eb0550a 100644
--- a/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java
+++ b/plugins/storage/volume/solidfire/test/org/apache/cloudstack/storage/test/VolumeTest.java
@@ -12,11 +12,11 @@ import javax.inject.Inject;
import javax.naming.ConfigurationException;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
+import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.command.CreateVolumeAnswer;
import org.apache.cloudstack.storage.command.CreateVolumeFromBaseImageCommand;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-import org.apache.cloudstack.storage.datastore.lifecycle.PrimaryDataStoreLifeCycle;
-import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProvider;
import org.apache.cloudstack.storage.datastore.provider.PrimaryDataStoreProviderManager;
import org.junit.Before;
import org.junit.Test;
@@ -120,13 +120,12 @@ public class VolumeTest {
try {
primaryDataStoreProviderMgr.configure("primary data store mgr", new HashMap<String, Object>());
PrimaryDataStoreProvider provider = primaryDataStoreProviderMgr.getDataStoreProvider("Solidfre Primary Data Store Provider");
- PrimaryDataStoreLifeCycle lifeCycle = provider.getDataStoreLifeCycle();
Map<String, String> params = new HashMap<String, String>();
params.put("url", "nfs://test/test");
params.put("dcId", dcId.toString());
params.put("clusterId", clusterId.toString());
params.put("name", "my primary data store");
- PrimaryDataStoreInfo primaryDataStoreInfo = lifeCycle.registerDataStore(params);
+ PrimaryDataStoreInfo primaryDataStoreInfo = provider.registerDataStore(params);
return primaryDataStoreInfo;
} catch (ConfigurationException e) {
return null;