You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by pr...@apache.org on 2013/01/03 20:54:03 UTC
[2/6] git commit: Provisioning Service: register Pod, Cluster,
Deregister Zone/Pod/Cluster and unit tests
Provisioning Service: register Pod, Cluster, Deregister Zone/Pod/Cluster and unit tests
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/3ff3a47e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/3ff3a47e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/3ff3a47e
Branch: refs/heads/javelin
Commit: 3ff3a47e36d9d0f8776ff8a5f575fdd18a0e4b7b
Parents: 1eb64e6
Author: Prachi Damle <pr...@cloud.com>
Authored: Thu Dec 20 18:19:16 2012 +0530
Committer: Prachi Damle <pr...@cloud.com>
Committed: Thu Jan 3 11:44:37 2013 -0800
----------------------------------------------------------------------
.../datacenter/entity/api/ClusterEntity.java | 22 +-
.../engine/datacenter/entity/api/PodEntity.java | 17 +-
.../engine/datacenter/entity/api/ZoneEntity.java | 6 +-
.../engine/entity/api/CloudStackEntity.java | 1 +
.../rest/service/api/ProvisioningRestService.java | 84 ++++
.../engine/service/api/ProvisioningService.java | 12 +-
.../datacenter/entity/api/ClusterEntityImpl.java | 193 ++++++++++
.../entity/api/DataCenterResourceManager.java | 12 +-
.../entity/api/DataCenterResourceManagerImpl.java | 61 +++-
.../datacenter/entity/api/PodEntityImpl.java | 109 +++---
.../datacenter/entity/api/ZoneEntityImpl.java | 29 +-
.../engine/datacenter/entity/api/db/ClusterVO.java | 235 ++++++++++++
.../datacenter/entity/api/db/DataCenterVO.java | 1 +
.../engine/datacenter/entity/api/db/HostPodVO.java | 241 ++++++++++++
.../datacenter/entity/api/db/dao/ClusterDao.java | 38 ++
.../entity/api/db/dao/ClusterDaoImpl.java | 295 +++++++++++++++
.../datacenter/entity/api/db/dao/HostPodDao.java | 36 ++
.../entity/api/db/dao/HostPodDaoImpl.java | 188 +++++++++
.../service/api/ProvisioningServiceImpl.java | 70 ++--
.../provisioning/test/ChildTestConfiguration.java | 12 +
.../engine/provisioning/test/ProvisioningTest.java | 53 +++-
21 files changed, 1589 insertions(+), 126 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
index bec5a4c..d4d3a8c 100755
--- a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntity.java
@@ -18,8 +18,26 @@
*/
package org.apache.cloudstack.engine.datacenter.entity.api;
-import com.cloud.org.Cluster;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.org.Cluster.ClusterType;
+import com.cloud.org.Grouping.AllocationState;
+import com.cloud.org.Managed.ManagedState;
+
+public interface ClusterEntity extends DataCenterResourceEntity, OrganizationScope {
+
+ String getName();
+
+ long getDataCenterId();
+
+ long getPodId();
+
+ HypervisorType getHypervisorType();
+
+ ClusterType getClusterType();
+
+ AllocationState getAllocationState();
+
+ ManagedState getManagedState();
-public interface ClusterEntity extends DataCenterResourceEntity, Cluster, OrganizationScope {
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
index 2cc6625..6eda5dd 100755
--- a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntity.java
@@ -22,9 +22,24 @@ import java.util.List;
import com.cloud.dc.Pod;
import com.cloud.org.Cluster;
+import com.cloud.org.Grouping.AllocationState;
-public interface PodEntity extends DataCenterResourceEntity, Pod {
+public interface PodEntity extends DataCenterResourceEntity {
List<Cluster> listClusters();
+
+ String getCidrAddress();
+
+ int getCidrSize();
+
+ String getGateway();
+
+ long getDataCenterId();
+
+ String getName();
+
+ AllocationState getAllocationState();
+
+ boolean getExternalDhcp();
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
index 106e18d..c9ed9fb 100755
--- a/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntity.java
@@ -41,7 +41,7 @@ public interface ZoneEntity extends DataCenterResourceEntity {
@Url(clazz=ProvisioningService.class, method="getPod", name="id", type=List.class)
List<String> listPodIds();
- @Override
- @Path("/enable")
- boolean enable();
+
+ String getName();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java b/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
index e1f41fa..09130d1 100755
--- a/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
+++ b/engine/api/src/org/apache/cloudstack/engine/entity/api/CloudStackEntity.java
@@ -92,4 +92,5 @@ public interface CloudStackEntity {
* @return list of actions that can be performed on the object in its current state
*/
List<Method> getApplicableActions();
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ProvisioningRestService.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ProvisioningRestService.java b/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ProvisioningRestService.java
new file mode 100644
index 0000000..fdfd17a
--- /dev/null
+++ b/engine/api/src/org/apache/cloudstack/engine/rest/service/api/ProvisioningRestService.java
@@ -0,0 +1,84 @@
+/*
+ * 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.rest.service.api;
+
+import java.util.Iterator;
+import java.util.List;
+
+import javax.inject.Inject;
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.UriBuilder;
+import javax.ws.rs.core.UriInfo;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
+import org.apache.cloudstack.engine.rest.datacenter.entity.api.PodRestTO;
+import org.apache.cloudstack.engine.rest.datacenter.entity.api.ZoneRestTO;
+import org.apache.cloudstack.engine.service.api.ProvisioningService;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+
+@Service("provisioningRestService")
+@Path("/provisioning")
+@Produces({"application/xml", "application/json"})
+@Component
+public class ProvisioningRestService {
+ @Inject
+ ProvisioningService _provisioningService;
+
+ @GET
+ @Path("/{zoneid}")
+ public ZoneRestTO getZone(@Context UriInfo ui, @PathParam("zoneid") String id) {
+ UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
+ ZoneEntity entity = _provisioningService.getZone(id);
+ return new ZoneRestTO(ui, entity, ub.build(entity.getUuid()));
+ }
+
+ @GET
+ @Path("/zones")
+ public ZoneRestTO[] listZones(@Context UriInfo ui) {
+ List<ZoneEntity> zones = _provisioningService.listZones();
+ ZoneRestTO[] tos = new ZoneRestTO[zones.size()];
+ UriBuilder ub = ui.getAbsolutePathBuilder().path(this.getClass(), "getZone");
+ Iterator<ZoneEntity> it = zones.iterator();
+ for (int i = 0; i < tos.length; i++) {
+ ZoneEntity entity = it.next();
+ tos[i] = new ZoneRestTO(ui, entity, ub.build(entity.getUuid()));
+ }
+ return tos;
+ }
+
+ @GET
+ @Path("/zone/{zoneid}/pods")
+ public PodRestTO[] listPods(@PathParam("zoneid") String zoneId) {
+ List<PodEntity> pods = _provisioningService.listPods();
+ PodRestTO[] tos = new PodRestTO[pods.size()];
+ Iterator<PodEntity> it = pods.iterator();
+ for (int i = 0; i < tos.length; i++) {
+ PodEntity pod = it.next();
+ tos[i] = new PodRestTO(pod);
+ }
+ return tos;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java
----------------------------------------------------------------------
diff --git a/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java b/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java
index 8b28aee..e451742 100755
--- a/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java
+++ b/engine/api/src/org/apache/cloudstack/engine/service/api/ProvisioningService.java
@@ -42,22 +42,22 @@ public interface ProvisioningService {
StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details);
@POST
- ZoneEntity registerZone(String zoneUuid, String owner, List<String> tags, Map<String, String> details);
+ ZoneEntity registerZone(String zoneUuid, String name, String owner, List<String> tags, Map<String, String> details);
@POST
- PodEntity registerPod(String name, Long zoneId, String gateway, String cidr, String startIp, String endIp, List<String> tags, Map<String, String> details);
+ PodEntity registerPod(String podUuid, String name, String owner, String zoneUuid, List<String> tags, Map<String, String> details);
- ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details);
+ ClusterEntity registerCluster(String clusterUuid, String name, String owner, List<String> tags, Map<String, String> details);
String registerHost(String name, List<String> tags, Map<String, String> details);
void deregisterStorage(String uuid);
- void deregisterZone();
+ void deregisterZone(String uuid);
- void deregisterPod();
+ void deregisterPod(String uuid);
- void deregisterCluster();
+ void deregisterCluster(String uuid);
void deregisterHost();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
new file mode 100644
index 0000000..20ffcb1
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ClusterEntityImpl.java
@@ -0,0 +1,193 @@
+
+package org.apache.cloudstack.engine.datacenter.entity.api;
+
+import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.org.Cluster.ClusterType;
+import com.cloud.org.Grouping.AllocationState;
+import com.cloud.org.Managed.ManagedState;
+import com.cloud.utils.fsm.NoTransitionException;
+
+
+public class ClusterEntityImpl implements ClusterEntity {
+
+
+ private DataCenterResourceManager manager;
+
+ private ClusterVO clusterVO;
+
+
+ public ClusterEntityImpl(String clusterId, DataCenterResourceManager manager) {
+ this.manager = manager;
+ this.clusterVO = this.manager.loadCluster(clusterId);
+ }
+
+ @Override
+ public boolean enable() {
+ try {
+ manager.changeState(this, Event.EnableRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean disable() {
+ try {
+ manager.changeState(this, Event.DisableRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean deactivate() {
+ try {
+ manager.changeState(this, Event.DeactivateRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
+ }
+
+
+ @Override
+ public boolean reactivate() {
+ try {
+ manager.changeState(this, Event.ActivatedRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
+ }
+
+
+ @Override
+ public State getState() {
+ return clusterVO.getState();
+ }
+
+ @Override
+ public void persist() {
+ manager.saveCluster(clusterVO);
+ }
+
+ @Override
+ public String getUuid() {
+ return clusterVO.getUuid();
+ }
+
+ @Override
+ public long getId() {
+ return clusterVO.getId();
+ }
+
+ @Override
+ public String getCurrentState() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getDesiredState() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public Date getCreatedTime() {
+ return clusterVO.getCreated();
+ }
+
+ @Override
+ public Date getLastUpdatedTime() {
+ return clusterVO.getLastUpdated();
+ }
+
+ @Override
+ public String getOwner() {
+ return clusterVO.getOwner();
+ }
+
+ @Override
+ public Map<String, String> getDetails() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public void addDetail(String name, String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void delDetail(String name, String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void updateDetail(String name, String value) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public List<Method> getApplicableActions() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return clusterVO.getName();
+ }
+
+ @Override
+ public long getDataCenterId() {
+ return clusterVO.getDataCenterId();
+ }
+
+ @Override
+ public long getPodId() {
+ return clusterVO.getPodId();
+ }
+
+ @Override
+ public HypervisorType getHypervisorType() {
+ return clusterVO.getHypervisorType();
+ }
+
+ @Override
+ public ClusterType getClusterType() {
+ return clusterVO.getClusterType();
+ }
+
+ @Override
+ public AllocationState getAllocationState() {
+ return clusterVO.getAllocationState();
+ }
+
+ @Override
+ public ManagedState getManagedState() {
+ return clusterVO.getManagedState();
+ }
+
+ public void setOwner(String owner) {
+ clusterVO.setOwner(owner);
+ }
+
+ public void setName(String name) {
+ clusterVO.setName(name);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
index 8bd3ca4..11e24cb 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManager.java
@@ -2,7 +2,9 @@ package org.apache.cloudstack.engine.datacenter.entity.api;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
import com.cloud.utils.fsm.NoTransitionException;
@@ -14,6 +16,14 @@ public interface DataCenterResourceManager {
void saveDataCenter(DataCenterVO dc);
- boolean changeState(ZoneEntity dc, Event event) throws NoTransitionException;
+ void savePod(HostPodVO dc);
+
+ void saveCluster(ClusterVO cluster);
+
+ boolean changeState(DataCenterResourceEntity entity, Event event) throws NoTransitionException;
+
+ HostPodVO loadPod(String uuid);
+
+ ClusterVO loadCluster(String uuid);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
index b36b11d..161d00e 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/DataCenterResourceManagerImpl.java
@@ -4,24 +4,32 @@ import javax.inject.Inject;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
import org.springframework.stereotype.Component;
-import com.cloud.dc.DataCenter;
+
import com.cloud.exception.InvalidParameterValueException;
-import com.cloud.utils.Pair;
import com.cloud.utils.fsm.NoTransitionException;
import com.cloud.utils.fsm.StateMachine2;
-import com.cloud.vm.VirtualMachine;
@Component
public class DataCenterResourceManagerImpl implements DataCenterResourceManager {
- // @Inject
+ @Inject
DataCenterDao _dataCenterDao;
-
- protected StateMachine2<State, Event, DataCenterResourceEntity> _stateMachine;
+
+ @Inject
+ HostPodDao _podDao;
+
+ @Inject
+ ClusterDao _clusterDao;
+
+ protected StateMachine2<State, Event, DataCenterResourceEntity> _stateMachine = DataCenterResourceEntity.State.s_fsm;
@Override
public DataCenterVO loadDataCenter(String dataCenterId) {
@@ -39,8 +47,45 @@ public class DataCenterResourceManagerImpl implements DataCenterResourceManager
}
@Override
- public boolean changeState(ZoneEntity entity, Event event) throws NoTransitionException {
- return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _dataCenterDao);
+ public boolean changeState(DataCenterResourceEntity entity, Event event) throws NoTransitionException {
+
+ if(entity instanceof ZoneEntity){
+ return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _dataCenterDao);
+ }else if(entity instanceof PodEntity){
+ return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _podDao);
+ }else if(entity instanceof ClusterEntity){
+ return _stateMachine.transitTo((DataCenterResourceEntity)entity, event, null, _clusterDao);
+ }
+
+ return false;
+ }
+
+ @Override
+ public HostPodVO loadPod(String uuid) {
+ HostPodVO pod = _podDao.findByUUID(uuid);
+ if(pod == null){
+ throw new InvalidParameterValueException("Pod does not exist");
+ }
+ return pod;
+ }
+
+ @Override
+ public ClusterVO loadCluster(String uuid) {
+ ClusterVO cluster = _clusterDao.findByUUID(uuid);
+ if(cluster == null){
+ throw new InvalidParameterValueException("Pod does not exist");
+ }
+ return cluster;
+ }
+
+ @Override
+ public void savePod(HostPodVO pod) {
+ _podDao.persist(pod);
+ }
+
+ @Override
+ public void saveCluster(ClusterVO cluster) {
+ _clusterDao.persist(cluster);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
index ba42959..e17e391 100755
--- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/PodEntityImpl.java
@@ -23,62 +23,84 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+
import com.cloud.org.Cluster;
+import com.cloud.org.Grouping.AllocationState;
+import com.cloud.utils.fsm.NoTransitionException;
public class PodEntityImpl implements PodEntity {
- String _uuid;
- String _name;
- public PodEntityImpl(String uuid, String name) {
- _uuid = uuid;
- _name = name;
+
+ private DataCenterResourceManager manager;
+
+ private HostPodVO podVO;
+
+ public PodEntityImpl(String uuid, DataCenterResourceManager manager) {
+ this.manager = manager;
+ podVO = manager.loadPod(uuid);
}
@Override
public boolean enable() {
- // TODO Auto-generated method stub
- return false;
+ try {
+ manager.changeState(this, Event.EnableRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
}
@Override
public boolean disable() {
- // TODO Auto-generated method stub
- return false;
+ try {
+ manager.changeState(this, Event.DisableRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
}
@Override
public boolean deactivate() {
- // TODO Auto-generated method stub
- return false;
+ try {
+ manager.changeState(this, Event.DeactivateRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
}
@Override
public boolean reactivate() {
- // TODO Auto-generated method stub
- return false;
+ try {
+ manager.changeState(this, Event.ActivatedRequest);
+ } catch (NoTransitionException e) {
+ return false;
+ }
+ return true;
}
@Override
public State getState() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getState();
}
@Override
public String getUuid() {
- return _uuid;
+ return podVO.getUuid();
}
@Override
public long getId() {
- // TODO Auto-generated method stub
- return 0;
+ return podVO.getId();
}
@Override
public String getCurrentState() {
// TODO Auto-generated method stub
- return null;
+ return null;
}
@Override
@@ -89,20 +111,17 @@ public class PodEntityImpl implements PodEntity {
@Override
public Date getCreatedTime() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getCreated();
}
@Override
public Date getLastUpdatedTime() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getLastUpdated();
}
@Override
public String getOwner() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getOwner();
}
@@ -114,49 +133,37 @@ public class PodEntityImpl implements PodEntity {
@Override
public String getCidrAddress() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getCidrAddress();
}
@Override
public int getCidrSize() {
- // TODO Auto-generated method stub
- return 0;
+ return podVO.getCidrSize();
}
@Override
public String getGateway() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getGateway();
}
@Override
public long getDataCenterId() {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
- public String getDescription() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getDataCenterId();
}
@Override
public String getName() {
- return _name;
+ return podVO.getName();
}
@Override
public AllocationState getAllocationState() {
- // TODO Auto-generated method stub
- return null;
+ return podVO.getAllocationState();
}
@Override
public boolean getExternalDhcp() {
- // TODO Auto-generated method stub
- return false;
+ return podVO.getExternalDhcp();
}
@Override
@@ -167,13 +174,12 @@ public class PodEntityImpl implements PodEntity {
@Override
public void persist() {
- // TODO Auto-generated method stub
+ manager.savePod(podVO);
}
@Override
public Map<String, String> getDetails() {
- // TODO Auto-generated method stub
return null;
}
@@ -191,8 +197,15 @@ public class PodEntityImpl implements PodEntity {
@Override
public void updateDetail(String name, String value) {
- // TODO Auto-generated method stub
-
+
+ }
+
+ public void setOwner(String owner) {
+ podVO.setOwner(owner);
}
+ public void setName(String name) {
+ podVO.setName(name);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
index ae35536..e87cc4b 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/ZoneEntityImpl.java
@@ -23,36 +23,26 @@ import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
-
-import javax.inject.Inject;
import javax.ws.rs.GET;
-import javax.ws.rs.POST;
import javax.ws.rs.Path;
-
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
-import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
-import org.apache.cloudstack.engine.service.api.ProvisioningService;
-
-import org.springframework.stereotype.Component;
-
import com.cloud.utils.fsm.FiniteStateObject;
import com.cloud.utils.fsm.NoTransitionException;
-@Component
@Path("/zone/{id}")
public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event> {
- @Inject
- DataCenterResourceManager manager;
-
+ private DataCenterResourceManager manager;
+
private DataCenterVO dataCenterVO;
- public ZoneEntityImpl(String dataCenterId) {
- this.dataCenterVO = manager.loadDataCenter(dataCenterId);
+ public ZoneEntityImpl(String dataCenterId, DataCenterResourceManager manager) {
+ this.manager = manager;
+ this.dataCenterVO = this.manager.loadDataCenter(dataCenterId);
}
@Override
@@ -133,6 +123,7 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
return dataCenterVO.getOwner();
}
+
public void setOwner(String owner) {
dataCenterVO.setOwner(owner);
}
@@ -191,6 +182,10 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
manager.saveDataCenter(dataCenterVO);
}
+ @Override
+ public String getName() {
+ return dataCenterVO.getName();
+ }
@Override
public List<String> listPodIds() {
@@ -199,4 +194,8 @@ public class ZoneEntityImpl implements ZoneEntity, FiniteStateObject<DataCenterR
podIds.add("pod-uuid-2");
return podIds;
}
+
+ public void setName(String name) {
+ dataCenterVO.setName(name);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterVO.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterVO.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterVO.java
new file mode 100644
index 0000000..f13bde6
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/ClusterVO.java
@@ -0,0 +1,235 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db;
+
+import java.util.Date;
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+
+import com.cloud.api.Identity;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.org.Cluster;
+import com.cloud.org.Managed.ManagedState;
+import com.cloud.org.Grouping;
+import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.db.StateMachine;
+
+@Entity
+@Table(name="cluster")
+public class ClusterVO implements Cluster, Identity {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name="id")
+ long id;
+
+ @Column(name="name")
+ String name;
+
+ @Column(name="guid")
+ String guid;
+
+ @Column(name="data_center_id")
+ long dataCenterId;
+
+ @Column(name="pod_id")
+ long podId;
+
+ @Column(name="hypervisor_type")
+ String hypervisorType;
+
+ @Column(name="cluster_type")
+ @Enumerated(value=EnumType.STRING)
+ Cluster.ClusterType clusterType;
+
+ @Column(name="allocation_state")
+ @Enumerated(value=EnumType.STRING)
+ AllocationState allocationState;
+
+ @Column(name="managed_state")
+ @Enumerated(value=EnumType.STRING)
+ ManagedState managedState;
+
+ @Column(name=GenericDao.REMOVED_COLUMN)
+ private Date removed;
+
+ @Column(name="uuid")
+ String uuid;
+
+ //orchestration
+
+ @Column(name="owner")
+ private String owner = null;
+
+ @Column(name=GenericDao.CREATED_COLUMN)
+ protected Date created;
+
+ @Column(name="lastUpdated", updatable=true)
+ @Temporal(value=TemporalType.TIMESTAMP)
+ protected Date lastUpdated;
+
+ /**
+ * Note that state is intentionally missing the setter. Any updates to
+ * the state machine needs to go through the DAO object because someone
+ * else could be updating it as well.
+ */
+ @Enumerated(value=EnumType.STRING)
+ @StateMachine(state=State.class, event=Event.class)
+ @Column(name="state", updatable=true, nullable=false, length=32)
+ protected State state = null;
+
+
+ public ClusterVO() {
+ clusterType = Cluster.ClusterType.CloudManaged;
+ allocationState = Grouping.AllocationState.Enabled;
+
+ this.uuid = UUID.randomUUID().toString();
+ this.state = State.Disabled;
+ }
+
+ public ClusterVO(long dataCenterId, long podId, String name) {
+ this.dataCenterId = dataCenterId;
+ this.podId = podId;
+ this.name = name;
+ this.clusterType = Cluster.ClusterType.CloudManaged;
+ this.allocationState = Grouping.AllocationState.Enabled;
+ this.managedState = ManagedState.Managed;
+ this.uuid = UUID.randomUUID().toString();
+ this.state = State.Disabled;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public long getDataCenterId() {
+ return dataCenterId;
+ }
+
+ public long getPodId() {
+ return podId;
+ }
+
+ public Cluster.ClusterType getClusterType() {
+ return clusterType;
+ }
+
+ public void setClusterType(Cluster.ClusterType clusterType) {
+ this.clusterType = clusterType;
+ }
+
+ public AllocationState getAllocationState() {
+ return allocationState;
+ }
+
+ public void setAllocationState(AllocationState allocationState) {
+ this.allocationState = allocationState;
+ }
+
+ public ManagedState getManagedState() {
+ return managedState;
+ }
+
+ public void setManagedState(ManagedState managedState) {
+ this.managedState = managedState;
+ }
+
+ public ClusterVO(long clusterId) {
+ this.id = clusterId;
+ }
+
+ @Override
+ public int hashCode() {
+ return NumbersUtil.hash(id);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (!(obj instanceof ClusterVO)) {
+ return false;
+ }
+ ClusterVO that = (ClusterVO)obj;
+ return this.id == that.id;
+ }
+
+ public HypervisorType getHypervisorType() {
+ return HypervisorType.getType(hypervisorType);
+ }
+
+ public void setHypervisorType(String hy) {
+ hypervisorType = hy;
+ }
+
+ public String getGuid() {
+ return guid;
+ }
+
+ public void setGuid(String guid) {
+ this.guid = guid;
+ }
+
+ public Date getRemoved() {
+ return removed;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public Date getLastUpdated() {
+ return lastUpdated;
+ }
+
+ public State getState() {
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DataCenterVO.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DataCenterVO.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DataCenterVO.java
index 9047cb9..beccb6f 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DataCenterVO.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/DataCenterVO.java
@@ -240,6 +240,7 @@ public class DataCenterVO implements DataCenter, Identity {
this.zoneToken = zoneToken;
this.domain = domainSuffix;
this.uuid = UUID.randomUUID().toString();
+ this.state = State.Disabled;
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/HostPodVO.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/HostPodVO.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/HostPodVO.java
new file mode 100644
index 0000000..6467a4b
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/HostPodVO.java
@@ -0,0 +1,241 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db;
+
+import java.util.Date;
+import java.util.UUID;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+
+import com.cloud.api.Identity;
+import com.cloud.dc.Pod;
+import com.cloud.org.Grouping;
+import com.cloud.utils.NumbersUtil;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.db.StateMachine;
+
+@Entity
+@Table(name = "host_pod_ref")
+public class HostPodVO implements Pod, Identity {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ long id;
+
+ @Column(name = "name")
+ private String name = null;
+
+ @Column(name = "data_center_id")
+ private long dataCenterId;
+
+ @Column(name = "gateway")
+ private String gateway;
+
+ @Column(name = "cidr_address")
+ private String cidrAddress;
+
+ @Column(name = "cidr_size")
+ private int cidrSize;
+
+ @Column(name = "description")
+ private String description;
+
+ @Column(name="allocation_state")
+ @Enumerated(value=EnumType.STRING)
+ AllocationState allocationState;
+
+ @Column(name = "external_dhcp")
+ private Boolean externalDhcp;
+
+ @Column(name=GenericDao.REMOVED_COLUMN)
+ private Date removed;
+
+ @Column(name = "uuid")
+ private String uuid;
+
+ //orchestration
+ @Column(name="owner")
+ private String owner = null;
+
+ @Column(name=GenericDao.CREATED_COLUMN)
+ protected Date created;
+
+ @Column(name="lastUpdated", updatable=true)
+ @Temporal(value=TemporalType.TIMESTAMP)
+ protected Date lastUpdated;
+
+ /**
+ * Note that state is intentionally missing the setter. Any updates to
+ * the state machine needs to go through the DAO object because someone
+ * else could be updating it as well.
+ */
+ @Enumerated(value=EnumType.STRING)
+ @StateMachine(state=State.class, event=Event.class)
+ @Column(name="state", updatable=true, nullable=false, length=32)
+ protected State state = null;
+
+ public HostPodVO(String name, long dcId, String gateway, String cidrAddress, int cidrSize, String description) {
+ this.name = name;
+ this.dataCenterId = dcId;
+ this.gateway = gateway;
+ this.cidrAddress = cidrAddress;
+ this.cidrSize = cidrSize;
+ this.description = description;
+ this.allocationState = Grouping.AllocationState.Enabled;
+ this.externalDhcp = false;
+ this.uuid = UUID.randomUUID().toString();
+ this.state = State.Disabled;
+ }
+
+ /*
+ * public HostPodVO(String name, long dcId) { this(null, name, dcId); }
+ */
+ protected HostPodVO() {
+ this.uuid = UUID.randomUUID().toString();
+ }
+
+ @Override
+ public long getId() {
+ return id;
+ }
+
+ public long getDataCenterId() {
+ return dataCenterId;
+ }
+
+ public void setDataCenterId(long dataCenterId) {
+ this.dataCenterId = dataCenterId;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public String getCidrAddress() {
+ return cidrAddress;
+ }
+
+ public void setCidrAddress(String cidrAddress) {
+ this.cidrAddress = cidrAddress;
+ }
+
+ @Override
+ public int getCidrSize() {
+ return cidrSize;
+ }
+
+ public void setCidrSize(int cidrSize) {
+ this.cidrSize = cidrSize;
+ }
+
+ @Override
+ public String getGateway() {
+ return gateway;
+ }
+
+ public void setGateway(String gateway) {
+ this.gateway = gateway;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ public AllocationState getAllocationState() {
+ return allocationState;
+ }
+
+ public void setAllocationState(AllocationState allocationState) {
+ this.allocationState = allocationState;
+ }
+
+ // Use for comparisons only.
+ public HostPodVO(Long id) {
+ this.id = id;
+ }
+
+ @Override
+ public int hashCode() {
+ return NumbersUtil.hash(id);
+ }
+
+ public boolean getExternalDhcp() {
+ return externalDhcp;
+ }
+
+ public void setExternalDhcp(boolean use) {
+ externalDhcp = use;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj instanceof HostPodVO) {
+ return id == ((HostPodVO)obj).id;
+ } else {
+ return false;
+ }
+ }
+
+ public Date getRemoved() {
+ return removed;
+ }
+
+ @Override
+ public String getUuid() {
+ return this.uuid;
+ }
+
+ public void setUuid(String uuid) {
+ this.uuid = uuid;
+ }
+
+ public String getOwner() {
+ return owner;
+ }
+
+ public void setOwner(String owner) {
+ this.owner = owner;
+ }
+
+ public Date getCreated() {
+ return created;
+ }
+
+ public Date getLastUpdated() {
+ return lastUpdated;
+ }
+
+ public State getState() {
+ return state;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDao.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDao.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDao.java
new file mode 100644
index 0000000..771b64d
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDao.java
@@ -0,0 +1,38 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
+
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.fsm.StateDao;
+
+public interface ClusterDao extends GenericDao<ClusterVO, Long>, StateDao<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event, DataCenterResourceEntity> {
+ List<ClusterVO> listByPodId(long podId);
+ ClusterVO findBy(String name, long podId);
+ List<ClusterVO> listByHyTypeWithoutGuid(String hyType);
+ List<ClusterVO> listByZoneId(long zoneId);
+
+ List<HypervisorType> getAvailableHypervisorInZone(Long zoneId);
+ List<ClusterVO> listByDcHyType(long dcId, String hyType);
+ Map<Long, List<Long>> getPodClusterIdMap(List<Long> clusterIds);
+ List<Long> listDisabledClusters(long zoneId, Long podId);
+ List<Long> listClustersWithDisabledPods(long zoneId);
+ ClusterVO findByUUID(String uuid);
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDaoImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDaoImpl.java
new file mode 100644
index 0000000..ff2e911
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/ClusterDaoImpl.java
@@ -0,0 +1,295 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+import org.apache.log4j.Logger;
+
+
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.org.Grouping;
+import com.cloud.utils.component.ComponentLocator;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.GenericSearchBuilder;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.UpdateBuilder;
+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;
+
+@Local(value=ClusterDao.class)
+public class ClusterDaoImpl extends GenericDaoBase<ClusterVO, Long> implements ClusterDao {
+ private static final Logger s_logger = Logger.getLogger(ClusterDaoImpl.class);
+
+ protected final SearchBuilder<ClusterVO> PodSearch;
+ protected final SearchBuilder<ClusterVO> HyTypeWithoutGuidSearch;
+ protected final SearchBuilder<ClusterVO> AvailHyperSearch;
+ protected final SearchBuilder<ClusterVO> ZoneSearch;
+ protected final SearchBuilder<ClusterVO> ZoneHyTypeSearch;
+ protected SearchBuilder<ClusterVO> StateChangeSearch;
+ protected SearchBuilder<ClusterVO> UUIDSearch;
+
+ private static final String GET_POD_CLUSTER_MAP_PREFIX = "SELECT pod_id, id FROM cloud.cluster WHERE cluster.id IN( ";
+ private static final String GET_POD_CLUSTER_MAP_SUFFIX = " )";
+
+ protected final HostPodDaoImpl _hostPodDao = ComponentLocator.inject(HostPodDaoImpl.class);
+
+ protected ClusterDaoImpl() {
+ super();
+
+ HyTypeWithoutGuidSearch = createSearchBuilder();
+ HyTypeWithoutGuidSearch.and("hypervisorType", HyTypeWithoutGuidSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ);
+ HyTypeWithoutGuidSearch.and("guid", HyTypeWithoutGuidSearch.entity().getGuid(), SearchCriteria.Op.NULL);
+ HyTypeWithoutGuidSearch.done();
+
+ ZoneHyTypeSearch = createSearchBuilder();
+ ZoneHyTypeSearch.and("hypervisorType", ZoneHyTypeSearch.entity().getHypervisorType(), SearchCriteria.Op.EQ);
+ ZoneHyTypeSearch.and("dataCenterId", ZoneHyTypeSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ ZoneHyTypeSearch.done();
+
+ PodSearch = createSearchBuilder();
+ PodSearch.and("pod", PodSearch.entity().getPodId(), SearchCriteria.Op.EQ);
+ PodSearch.and("name", PodSearch.entity().getName(), SearchCriteria.Op.EQ);
+ PodSearch.done();
+
+ ZoneSearch = createSearchBuilder();
+ ZoneSearch.and("dataCenterId", ZoneSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ ZoneSearch.groupBy(ZoneSearch.entity().getHypervisorType());
+ ZoneSearch.done();
+
+ AvailHyperSearch = createSearchBuilder();
+ AvailHyperSearch.and("zoneId", AvailHyperSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ AvailHyperSearch.select(null, Func.DISTINCT, AvailHyperSearch.entity().getHypervisorType());
+ AvailHyperSearch.done();
+
+ UUIDSearch = createSearchBuilder();
+ UUIDSearch.and("uuid", UUIDSearch.entity().getUuid(), SearchCriteria.Op.EQ);
+ UUIDSearch.done();
+
+ StateChangeSearch = createSearchBuilder();
+ StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ);
+ StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ);
+ StateChangeSearch.done();
+ }
+
+ @Override
+ public List<ClusterVO> listByZoneId(long zoneId) {
+ SearchCriteria<ClusterVO> sc = ZoneSearch.create();
+ sc.setParameters("dataCenterId", zoneId);
+ return listBy(sc);
+ }
+
+ @Override
+ public List<ClusterVO> listByPodId(long podId) {
+ SearchCriteria<ClusterVO> sc = PodSearch.create();
+ sc.setParameters("pod", podId);
+
+ return listBy(sc);
+ }
+
+ @Override
+ public ClusterVO findBy(String name, long podId) {
+ SearchCriteria<ClusterVO> sc = PodSearch.create();
+ sc.setParameters("pod", podId);
+ sc.setParameters("name", name);
+
+ return findOneBy(sc);
+ }
+
+ @Override
+ public List<ClusterVO> listByHyTypeWithoutGuid(String hyType) {
+ SearchCriteria<ClusterVO> sc = HyTypeWithoutGuidSearch.create();
+ sc.setParameters("hypervisorType", hyType);
+
+ return listBy(sc);
+ }
+
+ @Override
+ public List<ClusterVO> listByDcHyType(long dcId, String hyType) {
+ SearchCriteria<ClusterVO> sc = ZoneHyTypeSearch.create();
+ sc.setParameters("dataCenterId", dcId);
+ sc.setParameters("hypervisorType", hyType);
+ return listBy(sc);
+ }
+
+ @Override
+ public List<HypervisorType> getAvailableHypervisorInZone(Long zoneId) {
+ SearchCriteria<ClusterVO> sc = AvailHyperSearch.create();
+ if (zoneId != null) {
+ sc.setParameters("zoneId", zoneId);
+ }
+ List<ClusterVO> clusters = listBy(sc);
+ List<HypervisorType> hypers = new ArrayList<HypervisorType>(4);
+ for (ClusterVO cluster : clusters) {
+ hypers.add(cluster.getHypervisorType());
+ }
+
+ return hypers;
+ }
+
+ @Override
+ public Map<Long, List<Long>> getPodClusterIdMap(List<Long> clusterIds){
+ Transaction txn = Transaction.currentTxn();
+ PreparedStatement pstmt = null;
+ Map<Long, List<Long>> result = new HashMap<Long, List<Long>>();
+
+ try {
+ StringBuilder sql = new StringBuilder(GET_POD_CLUSTER_MAP_PREFIX);
+ if (clusterIds.size() > 0) {
+ for (Long clusterId : clusterIds) {
+ sql.append(clusterId).append(",");
+ }
+ sql.delete(sql.length()-1, sql.length());
+ sql.append(GET_POD_CLUSTER_MAP_SUFFIX);
+ }
+
+ pstmt = txn.prepareAutoCloseStatement(sql.toString());
+ ResultSet rs = pstmt.executeQuery();
+ while (rs.next()) {
+ Long podId = rs.getLong(1);
+ Long clusterIdInPod = rs.getLong(2);
+ if(result.containsKey(podId)){
+ List<Long> clusterList = result.get(podId);
+ clusterList.add(clusterIdInPod);
+ result.put(podId, clusterList);
+ }else{
+ List<Long> clusterList = new ArrayList<Long>();
+ clusterList.add(clusterIdInPod);
+ result.put(podId, clusterList);
+ }
+ }
+ return result;
+ } catch (SQLException e) {
+ throw new CloudRuntimeException("DB Exception on: " + GET_POD_CLUSTER_MAP_PREFIX, e);
+ } catch (Throwable e) {
+ throw new CloudRuntimeException("Caught: " + GET_POD_CLUSTER_MAP_PREFIX, e);
+ }
+ }
+
+ @Override
+ public List<Long> listDisabledClusters(long zoneId, Long podId) {
+ GenericSearchBuilder<ClusterVO, Long> clusterIdSearch = createSearchBuilder(Long.class);
+ clusterIdSearch.selectField(clusterIdSearch.entity().getId());
+ clusterIdSearch.and("dataCenterId", clusterIdSearch.entity().getDataCenterId(), Op.EQ);
+ if(podId != null){
+ clusterIdSearch.and("podId", clusterIdSearch.entity().getPodId(), Op.EQ);
+ }
+ clusterIdSearch.and("allocationState", clusterIdSearch.entity().getAllocationState(), Op.EQ);
+ clusterIdSearch.done();
+
+
+ SearchCriteria<Long> sc = clusterIdSearch.create();
+ sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
+ if (podId != null) {
+ sc.addAnd("podId", SearchCriteria.Op.EQ, podId);
+ }
+ sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled);
+ return customSearch(sc, null);
+ }
+
+ @Override
+ public List<Long> listClustersWithDisabledPods(long zoneId) {
+
+ GenericSearchBuilder<HostPodVO, Long> disabledPodIdSearch = _hostPodDao.createSearchBuilder(Long.class);
+ disabledPodIdSearch.selectField(disabledPodIdSearch.entity().getId());
+ disabledPodIdSearch.and("dataCenterId", disabledPodIdSearch.entity().getDataCenterId(), Op.EQ);
+ disabledPodIdSearch.and("allocationState", disabledPodIdSearch.entity().getAllocationState(), Op.EQ);
+
+ GenericSearchBuilder<ClusterVO, Long> clusterIdSearch = createSearchBuilder(Long.class);
+ clusterIdSearch.selectField(clusterIdSearch.entity().getId());
+ clusterIdSearch.join("disabledPodIdSearch", disabledPodIdSearch, clusterIdSearch.entity().getPodId(), disabledPodIdSearch.entity().getId(), JoinBuilder.JoinType.INNER);
+ clusterIdSearch.done();
+
+
+ SearchCriteria<Long> sc = clusterIdSearch.create();
+ sc.setJoinParameters("disabledPodIdSearch", "dataCenterId", zoneId);
+ sc.setJoinParameters("disabledPodIdSearch", "allocationState", Grouping.AllocationState.Disabled);
+
+ return customSearch(sc, null);
+ }
+
+ @Override
+ public boolean remove(Long id) {
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ ClusterVO cluster = createForUpdate();
+ cluster.setName(null);
+ cluster.setGuid(null);
+
+ update(id, cluster);
+
+ boolean result = super.remove(id);
+ txn.commit();
+ return result;
+ }
+
+
+ @Override
+ public ClusterVO findByUUID(String uuid) {
+ SearchCriteria<ClusterVO> sc = UUIDSearch.create();
+ sc.setParameters("uuid", uuid);
+ return findOneBy(sc);
+ }
+
+ @Override
+ public boolean updateState(State currentState, Event event, State nextState, DataCenterResourceEntity clusterEntity, Object data) {
+
+ ClusterVO vo = findById(clusterEntity.getId());
+
+ Date oldUpdatedTime = vo.getLastUpdated();
+
+ SearchCriteria<ClusterVO> sc = StateChangeSearch.create();
+ sc.setParameters("id", vo.getId());
+ sc.setParameters("state", currentState);
+
+ UpdateBuilder builder = getUpdateBuilder(vo);
+ builder.set(vo, "state", nextState);
+ builder.set(vo, "lastUpdated", new Date());
+
+ int rows = update((ClusterVO) vo, sc);
+
+ if (rows == 0 && s_logger.isDebugEnabled()) {
+ ClusterVO dbCluster = findByIdIncludingRemoved(vo.getId());
+ if (dbCluster != null) {
+ StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
+ str.append(": DB Data={id=").append(dbCluster.getId()).append("; state=").append(dbCluster.getState()).append(";updatedTime=")
+ .append(dbCluster.getLastUpdated());
+ str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatedTime=").append(vo.getLastUpdated());
+ str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatedTime=").append(oldUpdatedTime);
+ } else {
+ s_logger.debug("Unable to update dataCenter: id=" + vo.getId() + ", as there is no such dataCenter exists in the database anymore");
+ }
+ }
+ return rows > 0;
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDao.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDao.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDao.java
new file mode 100644
index 0000000..bfdbaae
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDao.java
@@ -0,0 +1,36 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
+
+import java.util.HashMap;
+import java.util.List;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+
+
+import com.cloud.utils.db.GenericDao;
+import com.cloud.utils.fsm.StateDao;
+
+public interface HostPodDao extends GenericDao<HostPodVO, Long>, StateDao<DataCenterResourceEntity.State, DataCenterResourceEntity.State.Event, DataCenterResourceEntity> {
+ public List<HostPodVO> listByDataCenterId(long id);
+
+ public HostPodVO findByName(String name, long dcId);
+
+ public HashMap<Long, List<Object>> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip);
+
+ public List<Long> listDisabledPods(long zoneId);
+
+ public HostPodVO findByUUID(String uuid);
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDaoImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDaoImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDaoImpl.java
new file mode 100644
index 0000000..df52ed6
--- /dev/null
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/datacenter/entity/api/db/dao/HostPodDaoImpl.java
@@ -0,0 +1,188 @@
+// Copyright 2012 Citrix Systems, Inc. Licensed under the
+// Apache License, Version 2.0 (the "License"); you may not use this
+// file except in compliance with the License. Citrix Systems, Inc.
+// reserves all rights not expressly granted by 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.
+//
+// Automatically generated by addcopyright.py at 04/03/2012
+package org.apache.cloudstack.engine.datacenter.entity.api.db.dao;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.ejb.Local;
+
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
+import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State.Event;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+import org.apache.log4j.Logger;
+
+
+import com.cloud.org.Grouping;
+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.UpdateBuilder;
+import com.cloud.utils.db.SearchCriteria.Op;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={HostPodDao.class})
+public class HostPodDaoImpl extends GenericDaoBase<HostPodVO, Long> implements HostPodDao {
+ private static final Logger s_logger = Logger.getLogger(HostPodDaoImpl.class);
+
+ protected SearchBuilder<HostPodVO> DataCenterAndNameSearch;
+ protected SearchBuilder<HostPodVO> DataCenterIdSearch;
+ protected SearchBuilder<HostPodVO> UUIDSearch;
+ protected SearchBuilder<HostPodVO> StateChangeSearch;
+
+ protected HostPodDaoImpl() {
+ DataCenterAndNameSearch = createSearchBuilder();
+ DataCenterAndNameSearch.and("dc", DataCenterAndNameSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ DataCenterAndNameSearch.and("name", DataCenterAndNameSearch.entity().getName(), SearchCriteria.Op.EQ);
+ DataCenterAndNameSearch.done();
+
+ DataCenterIdSearch = createSearchBuilder();
+ DataCenterIdSearch.and("dcId", DataCenterIdSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+ DataCenterIdSearch.done();
+
+
+ UUIDSearch = createSearchBuilder();
+ UUIDSearch.and("uuid", UUIDSearch.entity().getUuid(), SearchCriteria.Op.EQ);
+ UUIDSearch.done();
+
+ StateChangeSearch = createSearchBuilder();
+ StateChangeSearch.and("id", StateChangeSearch.entity().getId(), SearchCriteria.Op.EQ);
+ StateChangeSearch.and("state", StateChangeSearch.entity().getState(), SearchCriteria.Op.EQ);
+ StateChangeSearch.done();
+
+ }
+
+ @Override
+ public List<HostPodVO> listByDataCenterId(long id) {
+ SearchCriteria<HostPodVO> sc = DataCenterIdSearch.create();
+ sc.setParameters("dcId", id);
+
+ return listBy(sc);
+ }
+
+ @Override
+ public HostPodVO findByName(String name, long dcId) {
+ SearchCriteria<HostPodVO> sc = DataCenterAndNameSearch.create();
+ sc.setParameters("dc", dcId);
+ sc.setParameters("name", name);
+
+ return findOneBy(sc);
+ }
+
+ @Override
+ public HashMap<Long, List<Object>> getCurrentPodCidrSubnets(long zoneId, long podIdToSkip) {
+ HashMap<Long, List<Object>> currentPodCidrSubnets = new HashMap<Long, List<Object>>();
+
+ String selectSql = "SELECT id, cidr_address, cidr_size FROM host_pod_ref WHERE data_center_id=" + zoneId +" and removed IS NULL";
+ Transaction txn = Transaction.currentTxn();
+ try {
+ PreparedStatement stmt = txn.prepareAutoCloseStatement(selectSql);
+ ResultSet rs = stmt.executeQuery();
+ while (rs.next()) {
+ Long podId = rs.getLong("id");
+ if (podId.longValue() == podIdToSkip) {
+ continue;
+ }
+ String cidrAddress = rs.getString("cidr_address");
+ long cidrSize = rs.getLong("cidr_size");
+ List<Object> cidrPair = new ArrayList<Object>();
+ cidrPair.add(0, cidrAddress);
+ cidrPair.add(1, new Long(cidrSize));
+ currentPodCidrSubnets.put(podId, cidrPair);
+ }
+ } catch (SQLException ex) {
+ s_logger.warn("DB exception " + ex.getMessage(), ex);
+ return null;
+ }
+
+ return currentPodCidrSubnets;
+ }
+
+ @Override
+ public boolean remove(Long id) {
+ Transaction txn = Transaction.currentTxn();
+ txn.start();
+ HostPodVO pod = createForUpdate();
+ pod.setName(null);
+
+ update(id, pod);
+
+ boolean result = super.remove(id);
+ txn.commit();
+ return result;
+ }
+
+ @Override
+ public List<Long> listDisabledPods(long zoneId) {
+ GenericSearchBuilder<HostPodVO, Long> podIdSearch = createSearchBuilder(Long.class);
+ podIdSearch.selectField(podIdSearch.entity().getId());
+ podIdSearch.and("dataCenterId", podIdSearch.entity().getDataCenterId(), Op.EQ);
+ podIdSearch.and("allocationState", podIdSearch.entity().getAllocationState(), Op.EQ);
+ podIdSearch.done();
+
+
+ SearchCriteria<Long> sc = podIdSearch.create();
+ sc.addAnd("dataCenterId", SearchCriteria.Op.EQ, zoneId);
+ sc.addAnd("allocationState", SearchCriteria.Op.EQ, Grouping.AllocationState.Disabled);
+ return customSearch(sc, null);
+ }
+
+ @Override
+ public HostPodVO findByUUID(String uuid) {
+ SearchCriteria<HostPodVO> sc = UUIDSearch.create();
+ sc.setParameters("uuid", uuid);
+ return findOneBy(sc);
+ }
+
+ @Override
+ public boolean updateState(State currentState, Event event, State nextState, DataCenterResourceEntity podEntity, Object data) {
+
+ HostPodVO vo = findById(podEntity.getId());
+
+ Date oldUpdatedTime = vo.getLastUpdated();
+
+ SearchCriteria<HostPodVO> sc = StateChangeSearch.create();
+ sc.setParameters("id", vo.getId());
+ sc.setParameters("state", currentState);
+
+ UpdateBuilder builder = getUpdateBuilder(vo);
+ builder.set(vo, "state", nextState);
+ builder.set(vo, "lastUpdated", new Date());
+
+ int rows = update((HostPodVO) vo, sc);
+
+ if (rows == 0 && s_logger.isDebugEnabled()) {
+ HostPodVO dbDC = findByIdIncludingRemoved(vo.getId());
+ if (dbDC != null) {
+ StringBuilder str = new StringBuilder("Unable to update ").append(vo.toString());
+ str.append(": DB Data={id=").append(dbDC.getId()).append("; state=").append(dbDC.getState()).append(";updatedTime=")
+ .append(dbDC.getLastUpdated());
+ str.append(": New Data={id=").append(vo.getId()).append("; state=").append(nextState).append("; event=").append(event).append("; updatedTime=").append(vo.getLastUpdated());
+ str.append(": stale Data={id=").append(vo.getId()).append("; state=").append(currentState).append("; event=").append(event).append("; updatedTime=").append(oldUpdatedTime);
+ } else {
+ s_logger.debug("Unable to update dataCenter: id=" + vo.getId() + ", as there is no such dataCenter exists in the database anymore");
+ }
+ }
+ return rows > 0;
+
+ }
+
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java b/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
index a6dda3a..2dc652f 100644
--- a/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
+++ b/engine/orchestration/src/org/apache/cloudstack/engine/service/api/ProvisioningServiceImpl.java
@@ -29,6 +29,7 @@ import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntityImpl;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceManager;
import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
@@ -50,6 +51,8 @@ import com.cloud.storage.StoragePool;
@Path("/provisioning")
public class ProvisioningServiceImpl implements ProvisioningService {
+ @Inject
+ DataCenterResourceManager manager;
@Override
public StorageEntity registerStorage(String name, List<String> tags, Map<String, String> details) {
@@ -58,27 +61,31 @@ public class ProvisioningServiceImpl implements ProvisioningService {
}
@Override
- public ZoneEntity registerZone(String zoneUuid, String owner, List<String> tags, Map<String, String> details) {
-
- ZoneEntityImpl zoneEntity = new ZoneEntityImpl(zoneUuid);
+ public ZoneEntity registerZone(String zoneUuid, String name, String owner, List<String> tags, Map<String, String> details) {
+ ZoneEntityImpl zoneEntity = new ZoneEntityImpl(zoneUuid, manager);
+ zoneEntity.setName(name);
zoneEntity.setOwner(owner);
zoneEntity.setDetails(details);
- zoneEntity.setState(State.Disabled);
zoneEntity.persist();
-
return zoneEntity;
}
- // @Override
- // public PodEntity registerPod(String name, List<String> tags, Map<String, String> details) {
- // // TODO Auto-generated method stub
- // return null;
- //}
+ @Override
+ public PodEntity registerPod(String podUuid, String name, String owner, String zoneUuid, List<String> tags, Map<String, String> details) {
+ PodEntityImpl podEntity = new PodEntityImpl(podUuid, manager);
+ podEntity.setOwner(owner);
+ podEntity.setName(name);
+ podEntity.persist();
+ return podEntity;
+ }
@Override
- public ClusterEntity registerCluster(String name, List<String> tags, Map<String, String> details) {
- // TODO Auto-generated method stub
- return null;
+ public ClusterEntity registerCluster(String clusterUuid, String name, String owner, List<String> tags, Map<String, String> details) {
+ ClusterEntityImpl clusterEntity = new ClusterEntityImpl(clusterUuid, manager);
+ clusterEntity.setOwner(owner);
+ clusterEntity.setName(name);
+ clusterEntity.persist();
+ return clusterEntity;
}
@Override
@@ -94,20 +101,21 @@ public class ProvisioningServiceImpl implements ProvisioningService {
}
@Override
- public void deregisterZone() {
- // TODO Auto-generated method stub
-
+ public void deregisterZone(String uuid) {
+ ZoneEntityImpl zoneEntity = new ZoneEntityImpl(uuid, manager);
+ zoneEntity.disable();
}
@Override
- public void deregisterPod() {
- // TODO Auto-generated method stub
-
+ public void deregisterPod(String uuid) {
+ PodEntityImpl podEntity = new PodEntityImpl(uuid, manager);
+ podEntity.disable();
}
@Override
- public void deregisterCluster() {
- // TODO Auto-generated method stub
+ public void deregisterCluster(String uuid) {
+ ClusterEntityImpl clusterEntity = new ClusterEntityImpl(uuid, manager);
+ clusterEntity.disable();
}
@@ -132,16 +140,16 @@ public class ProvisioningServiceImpl implements ProvisioningService {
@Override
public List<PodEntity> listPods() {
List<PodEntity> pods = new ArrayList<PodEntity>();
- pods.add(new PodEntityImpl("pod-uuid-1", "pod1"));
- pods.add(new PodEntityImpl("pod-uuid-2", "pod2"));
+ //pods.add(new PodEntityImpl("pod-uuid-1", "pod1"));
+ //pods.add(new PodEntityImpl("pod-uuid-2", "pod2"));
return null;
}
@Override
public List<ZoneEntity> listZones() {
List<ZoneEntity> zones = new ArrayList<ZoneEntity>();
- zones.add(new ZoneEntityImpl("zone-uuid-1"));
- zones.add(new ZoneEntityImpl("zone-uuid-2"));
+ //zones.add(new ZoneEntityImpl("zone-uuid-1"));
+ //zones.add(new ZoneEntityImpl("zone-uuid-2"));
return zones;
}
@@ -153,18 +161,8 @@ public class ProvisioningServiceImpl implements ProvisioningService {
@Override
public ZoneEntity getZone(String uuid) {
- ZoneEntityImpl impl = new ZoneEntityImpl(uuid);
+ ZoneEntityImpl impl = new ZoneEntityImpl(uuid, manager);
return impl;
}
- @Override
-
- public PodEntity registerPod(String arg0, Long arg1, String arg2,
- String arg3, String arg4, String arg5, List<String> arg6,
- Map<String, String> arg7) {
- // TODO Auto-generated method stub
- return null;
- }
-
-
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java b/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
index a8b2030..13e44ab 100644
--- a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
+++ b/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ChildTestConfiguration.java
@@ -1,7 +1,9 @@
package org.apache.cloudstack.engine.provisioning.test;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
import org.mockito.Mockito;
import org.springframework.context.annotation.Bean;
@@ -14,5 +16,15 @@ public class ChildTestConfiguration {
public DataCenterDao dataCenterDao() {
return Mockito.mock(DataCenterDao.class);
}
+
+ @Bean
+ public HostPodDao hostPodDao() {
+ return Mockito.mock(HostPodDao.class);
+ }
+
+ @Bean
+ public ClusterDao clusterDao() {
+ return Mockito.mock(ClusterDao.class);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/3ff3a47e/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
----------------------------------------------------------------------
diff --git a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java b/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
index a7135fe..72ad834 100644
--- a/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
+++ b/engine/orchestration/test/org/apache/cloudstack/engine/provisioning/test/ProvisioningTest.java
@@ -4,13 +4,19 @@
package org.apache.cloudstack.engine.provisioning.test;
import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.UUID;
import javax.inject.Inject;
+import org.apache.cloudstack.engine.datacenter.entity.api.ClusterEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.DataCenterResourceEntity.State;
+import org.apache.cloudstack.engine.datacenter.entity.api.PodEntity;
import org.apache.cloudstack.engine.datacenter.entity.api.ZoneEntity;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.ClusterDao;
import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.DataCenterDao;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.dao.HostPodDao;
import org.apache.cloudstack.engine.service.api.ProvisioningService;
import org.junit.Before;
import org.junit.Test;
@@ -19,7 +25,10 @@ import org.mockito.Mockito;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.ClusterVO;
import org.apache.cloudstack.engine.datacenter.entity.api.db.DataCenterVO;
+import org.apache.cloudstack.engine.datacenter.entity.api.db.HostPodVO;
+
import com.cloud.dc.DataCenter.NetworkType;
import junit.framework.TestCase;
@@ -34,27 +43,59 @@ public class ProvisioningTest extends TestCase {
@Inject
DataCenterDao dcDao;
+ @Inject
+ HostPodDao _podDao;
+
+ @Inject
+ ClusterDao _clusterDao;
+
+
@Before
public void setUp() {
-
DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24",
null, null, NetworkType.Basic, null, null, true, true);
-
- Mockito.when(dcDao.findById(Mockito.anyLong())).thenReturn(dc);
- Mockito.when(dcDao.persist((DataCenterVO) Mockito.anyObject())).thenReturn(dc);
+ Mockito.when(dcDao.findByUUID(Mockito.anyString())).thenReturn(dc);
+ Mockito.when(dcDao.persist((DataCenterVO) Mockito.anyObject())).thenReturn(dc);
+
+ HostPodVO pod = new HostPodVO("lab", 123, "10.0.0.1", "10.0.0.1", 24, "test");
+ Mockito.when(_podDao.findByUUID(Mockito.anyString())).thenReturn(pod);
+ Mockito.when(_podDao.persist((HostPodVO) Mockito.anyObject())).thenReturn(pod);
+
+ ClusterVO cluster = new ClusterVO();
+ Mockito.when(_clusterDao.findByUUID(Mockito.anyString())).thenReturn(cluster);
+ Mockito.when(_clusterDao.persist((ClusterVO) Mockito.anyObject())).thenReturn(cluster);
}
private void registerAndEnableZone() {
- ZoneEntity zone = service.registerZone("47547648", "owner", null, new HashMap<String, String>());
+ ZoneEntity zone = service.registerZone("47547648", "lab","owner", null, new HashMap<String, String>());
State state = zone.getState();
System.out.println("state:"+state);
boolean result = zone.enable();
- System.out.println("state:"+zone.getState());
+ System.out.println("result:"+result);
+
+ }
+
+ private void registerAndEnablePod() {
+ PodEntity pod = service.registerPod("47547648", "lab","owner", "8709874074", null, new HashMap<String, String>());
+ State state = pod.getState();
+ System.out.println("state:"+state);
+ boolean result = pod.enable();
+ System.out.println("result:"+result);
+ }
+
+ private void registerAndEnableCluster() {
+ ClusterEntity cluster = service.registerCluster("1265476542", "lab","owner", null, new HashMap<String, String>());
+ State state = cluster.getState();
+ System.out.println("state:"+state);
+ boolean result = cluster.enable();
+ System.out.println("result:"+result);
}
@Test
public void testProvisioning() {
registerAndEnableZone();
+ registerAndEnablePod();
+ registerAndEnableCluster();
}