You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ah...@apache.org on 2013/06/14 01:34:35 UTC
[2/8] Complete the move of the virtualmachinemanager to cloud-engine
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/VirtualMachinePowerStateSync.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachinePowerStateSync.java b/server/src/com/cloud/vm/VirtualMachinePowerStateSync.java
deleted file mode 100644
index 7a23ddd..0000000
--- a/server/src/com/cloud/vm/VirtualMachinePowerStateSync.java
+++ /dev/null
@@ -1,32 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package com.cloud.vm;
-
-import java.util.Map;
-
-import com.cloud.agent.api.HostVmStateReportEntry;
-import com.cloud.vm.VirtualMachine.PowerState;
-
-public interface VirtualMachinePowerStateSync {
-
- void resetHostSyncState(long hostId);
-
- void processHostVmStateReport(long hostId, Map<String, HostVmStateReportEntry> report);
-
- // to adapt legacy ping report
- void processHostVmStatePingReport(long hostId, Map<String, PowerState> report);
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java b/server/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
deleted file mode 100644
index 9273ed0..0000000
--- a/server/src/com/cloud/vm/VirtualMachinePowerStateSyncImpl.java
+++ /dev/null
@@ -1,132 +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 com.cloud.vm;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.framework.messagebus.MessageBus;
-import org.apache.cloudstack.framework.messagebus.PublishScope;
-import org.apache.cloudstack.messagebus.TopicConstants;
-
-import com.cloud.agent.api.HostVmStateReportEntry;
-import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.dao.VMInstanceDao;
-
-public class VirtualMachinePowerStateSyncImpl implements VirtualMachinePowerStateSync {
- private static final Logger s_logger = Logger.getLogger(VirtualMachinePowerStateSyncImpl.class);
-
- @Inject MessageBus _messageBus;
- @Inject VMInstanceDao _instanceDao;
- @Inject VirtualMachineManager _vmMgr;
-
- public VirtualMachinePowerStateSyncImpl() {
- }
-
- @Override
- public void resetHostSyncState(long hostId) {
- s_logger.info("Reset VM power state sync for host: " + hostId);
- _instanceDao.resetHostPowerStateTracking(hostId);
- }
-
- @Override
- public void processHostVmStateReport(long hostId, Map<String, HostVmStateReportEntry> report) {
- if(s_logger.isDebugEnabled())
- s_logger.debug("Process host VM state report from ping process. host: " + hostId);
-
- Map<Long, VirtualMachine.PowerState> translatedInfo = convertToInfos(report);
- processReport(hostId, translatedInfo);
- }
-
- @Override
- public void processHostVmStatePingReport(long hostId, Map<String, PowerState> report) {
- if(s_logger.isDebugEnabled())
- s_logger.debug("Process host VM state report from ping process. host: " + hostId);
-
- Map<Long, VirtualMachine.PowerState> translatedInfo = convertHostPingInfos(report);
- processReport(hostId, translatedInfo);
- }
-
- private void processReport(long hostId, Map<Long, VirtualMachine.PowerState> translatedInfo) {
-
-
- for(Map.Entry<Long, VirtualMachine.PowerState> entry : translatedInfo.entrySet()) {
-
- if(s_logger.isDebugEnabled())
- s_logger.debug("VM state report. host: " + hostId + ", vm id: " + entry.getKey() + ", power state: " + entry.getValue());
-
- if(_instanceDao.updatePowerState(entry.getKey(), hostId, entry.getValue())) {
-
- if(s_logger.isDebugEnabled())
- s_logger.debug("VM state report is updated. host: " + hostId + ", vm id: " + entry.getKey() + ", power state: " + entry.getValue());
-
- _messageBus.publish(null, TopicConstants.VM_POWER_STATE, PublishScope.GLOBAL, entry.getKey());
- }
- }
-
- //
- // TODO
- // 1) publish missing report (if VM is missing from host report) for KVM/XenServer
- //
- }
-
- private Map<Long, VirtualMachine.PowerState> convertHostPingInfos(Map<String, PowerState> states) {
- final HashMap<Long, VirtualMachine.PowerState> map = new HashMap<Long, VirtualMachine.PowerState>();
- if (states == null) {
- return map;
- }
-
- for (Map.Entry<String, PowerState> entry : states.entrySet()) {
- VMInstanceVO vm = findVM(entry.getKey());
- if(vm != null) {
- map.put(vm.getId(), entry.getValue());
- break;
- } else {
- s_logger.info("Unable to find matched VM in CloudStack DB. name: " + entry.getKey());
- }
- }
-
- return map;
- }
-
- private Map<Long, VirtualMachine.PowerState> convertToInfos(Map<String, HostVmStateReportEntry> states) {
- final HashMap<Long, VirtualMachine.PowerState> map = new HashMap<Long, VirtualMachine.PowerState>();
- if (states == null) {
- return map;
- }
-
- for (Map.Entry<String, HostVmStateReportEntry> entry : states.entrySet()) {
- VMInstanceVO vm = findVM(entry.getKey());
- if(vm != null) {
- map.put(vm.getId(), entry.getValue().getState());
- break;
- } else {
- s_logger.info("Unable to find matched VM in CloudStack DB. name: " + entry.getKey());
- }
- }
-
- return map;
- }
-
- private VMInstanceVO findVM(String vmName) {
- return _instanceDao.findVMByInstanceName(vmName);
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/VmWorkJobDispatcher.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkJobDispatcher.java b/server/src/com/cloud/vm/VmWorkJobDispatcher.java
deleted file mode 100644
index 3e6dc0b..0000000
--- a/server/src/com/cloud/vm/VmWorkJobDispatcher.java
+++ /dev/null
@@ -1,85 +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 com.cloud.vm;
-
-import javax.inject.Inject;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.jobs.AsyncJob;
-import org.apache.cloudstack.framework.jobs.AsyncJobConstants;
-import org.apache.cloudstack.framework.jobs.AsyncJobDispatcher;
-import org.apache.cloudstack.framework.jobs.AsyncJobManager;
-
-import com.cloud.api.ApiSerializerHelper;
-import com.cloud.dao.EntityManager;
-import com.cloud.user.dao.AccountDao;
-import com.cloud.utils.component.AdapterBase;
-import com.cloud.vm.dao.VMInstanceDao;
-
-public class VmWorkJobDispatcher extends AdapterBase implements AsyncJobDispatcher {
- private static final Logger s_logger = Logger.getLogger(VmWorkJobDispatcher.class);
-
- public static final String VM_WORK_QUEUE = "VmWorkJobQueue";
- public static final String VM_WORK_JOB_DISPATCHER = "VmWorkJobDispatcher";
- public static final String VM_WORK_JOB_WAKEUP_DISPATCHER = "VmWorkJobWakeupDispatcher";
- public final static String Start = "start";
- public final static String Stop = "stop";
-
- @Inject
- private VirtualMachineManagerImpl _vmMgr;
- @Inject private AsyncJobManager _asyncJobMgr;
- @Inject private AccountDao _accountDao;
- @Inject private VMInstanceDao _instanceDao;
- @Inject
- private EntityManager _entityMgr;
-
- @Override
- public void runJob(AsyncJob job) {
- VmWork work = null;
- try {
- String cmd = job.getCmd();
- assert(cmd != null);
-
- work = (VmWork)ApiSerializerHelper.fromSerializedString(job.getCmdInfo());
- assert(work != null);
-
- CallContext.register(work.getUserId(), work.getAccountId(), job.getRelated());
-
- VMInstanceVO vm = _instanceDao.findById(work.getVmId());
- if (vm == null) {
- s_logger.info("Unable to find vm " + work.getVmId());
- }
- assert(vm != null);
-
- if (cmd.equals(Start)) {
- VmWorkStart start = (VmWorkStart)work;
- _vmMgr.orchestrateStart(vm.getUuid(), start.getParams(), start.getPlan());
- } else if (cmd.equals(Stop)) {
- VmWorkStop stop = (VmWorkStop)work;
- _vmMgr.orchestrateStop(vm.getUuid(), stop.isForceStop());
- }
- _asyncJobMgr.completeAsyncJob(job.getId(), AsyncJobConstants.STATUS_SUCCEEDED, 0, null);
- } catch(Throwable e) {
- s_logger.error("Unable to complete " + job, e);
- _asyncJobMgr.completeAsyncJob(job.getId(), AsyncJobConstants.STATUS_FAILED, 0, e.getMessage());
- } finally {
- CallContext.unregister();
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/VmWorkStart.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkStart.java b/server/src/com/cloud/vm/VmWorkStart.java
deleted file mode 100644
index 107009e..0000000
--- a/server/src/com/cloud/vm/VmWorkStart.java
+++ /dev/null
@@ -1,120 +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 com.cloud.vm;
-
-import java.io.Serializable;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.apache.cloudstack.context.CallContext;
-import org.apache.cloudstack.framework.jobs.impl.JobSerializerHelper;
-import org.apache.log4j.Logger;
-
-import com.cloud.deploy.DataCenterDeployment;
-import com.cloud.deploy.DeploymentPlan;
-import com.cloud.deploy.DeploymentPlanner.ExcludeList;
-import com.cloud.utils.Journal;
-
-public class VmWorkStart extends VmWork {
- private static final Logger s_logger = Logger.getLogger(VmWorkStart.class);
-
- long dcId;
- Long podId;
- Long clusterId;
- Long hostId;
- Long poolId;
- ExcludeList avoids;
- Long physicalNetworkId;
-
- String reservationId;
- String journalName;
-
- // use serialization friendly map
- private Map<String, String> rawParams;
-
- public VmWorkStart() {
- }
-
- public DeploymentPlan getPlan() {
-
- if(podId != null || clusterId != null || hostId != null || poolId != null || physicalNetworkId != null) {
- // this is ugly, to work with legacy code, we need to re-construct the DeploymentPlan hard-codely
- // this has to be refactored together with migrating legacy code into the new way
- ReservationContext context = null;
- if(reservationId != null) {
- Journal journal = new Journal.LogJournal("VmWorkStart", s_logger);
- context = new ReservationContextImpl(reservationId, journal, CallContext.current().getCallingUser(), CallContext.current().getCallingAccount());
- }
-
- DeploymentPlan plan = new DataCenterDeployment(
- dcId, podId, clusterId, hostId, poolId, physicalNetworkId,
- context);
- return plan;
- }
-
- return null;
- }
-
- public void setPlan(DeploymentPlan plan) {
- if(plan != null) {
- dcId = plan.getDataCenterId();
- podId = plan.getPodId();
- clusterId = plan.getClusterId();
- hostId = plan.getHostId();
- poolId = plan.getPoolId();
- physicalNetworkId = plan.getPhysicalNetworkId();
- avoids = plan.getAvoids();
-
- if(plan.getReservationContext() != null)
- reservationId = plan.getReservationContext().getReservationId();
- }
- }
-
- public Map<String, String> getRawParams() {
- return rawParams;
- }
-
- public void setRawParams(Map<String, String> params) {
- this.rawParams = params;
- }
-
- public Map<VirtualMachineProfile.Param, Object> getParams() {
- Map<VirtualMachineProfile.Param, Object> map = new HashMap<VirtualMachineProfile.Param, Object>();
-
- if(rawParams != null) {
- // Strong-typing for VirtualMachineProfile.Param is really over-kill, have to deal with it anyway
- for(Map.Entry<String, String> entry : rawParams.entrySet()) {
- VirtualMachineProfile.Param key = new VirtualMachineProfile.Param(entry.getKey());
- Object val = JobSerializerHelper.fromObjectSerializedString(entry.getValue());
- map.put(key, val);
- }
- }
-
- return map;
- }
-
- public void setParams( Map<VirtualMachineProfile.Param, Object> params) {
- if(params != null) {
- rawParams = new HashMap<String, String>();
- for(Map.Entry<VirtualMachineProfile.Param, Object> entry : params.entrySet()) {
- rawParams.put(entry.getKey().getName(), JobSerializerHelper.toObjectSerializedString(
- entry.getValue() instanceof Serializable ? (Serializable)entry.getValue() : entry.getValue().toString()));
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/VmWorkStop.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VmWorkStop.java b/server/src/com/cloud/vm/VmWorkStop.java
deleted file mode 100644
index d6d226f..0000000
--- a/server/src/com/cloud/vm/VmWorkStop.java
+++ /dev/null
@@ -1,34 +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 com.cloud.vm;
-
-public class VmWorkStop extends VmWork {
-
- private boolean forceStop;
-
- public VmWorkStop() {
- forceStop = false;
- }
-
- public void setForceStop(boolean value) {
- forceStop = value;
- }
-
- public boolean isForceStop() {
- return forceStop;
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/com/cloud/vm/snapshot/VMSnapshotManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/snapshot/VMSnapshotManager.java b/server/src/com/cloud/vm/snapshot/VMSnapshotManager.java
deleted file mode 100644
index c609005..0000000
--- a/server/src/com/cloud/vm/snapshot/VMSnapshotManager.java
+++ /dev/null
@@ -1,47 +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 com.cloud.vm.snapshot;
-
-import com.cloud.utils.component.Manager;
-import com.cloud.vm.VMInstanceVO;
-
-public interface VMSnapshotManager extends VMSnapshotService, Manager {
- public static final int VMSNAPSHOTMAX = 10;
-
-
- /**
- * Delete all VM snapshots belonging to one VM
- * @param id, VM id
- * @param type,
- * @return true for success, false for failure
- */
- boolean deleteAllVMSnapshots(long id, VMSnapshot.Type type);
-
- /**
- * Sync VM snapshot state when VM snapshot in reverting or snapshoting or expunging state
- * Used for fullsync after agent connects
- *
- * @param vm, the VM in question
- * @param hostId
- * @return true if succeeds, false if fails
- */
- boolean syncVMSnapshot(VMInstanceVO vm, Long hostId);
-
- boolean hasActiveVMSnapshotTasks(Long vmId);
-
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/server/src/org/apache/cloudstack/messagebus/TopicConstants.java
----------------------------------------------------------------------
diff --git a/server/src/org/apache/cloudstack/messagebus/TopicConstants.java b/server/src/org/apache/cloudstack/messagebus/TopicConstants.java
deleted file mode 100644
index 6f465f4..0000000
--- a/server/src/org/apache/cloudstack/messagebus/TopicConstants.java
+++ /dev/null
@@ -1,26 +0,0 @@
-// Licensed to the Apache Software Foundation (ASF) under one
-// or more contributor license agreements. See the NOTICE file
-// distributed with this work for additional information
-// regarding copyright ownership. The ASF licenses this file
-// to you under the Apache License, Version 2.0 (the
-// "License"); you may not use this file except in compliance
-// with the License. You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing,
-// software distributed under the License is distributed on an
-// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-// KIND, either express or implied. See the License for the
-// specific language governing permissions and limitations
-// under the License.
-package org.apache.cloudstack.messagebus;
-
-public interface TopicConstants {
- // VM power state messages on message bus
- public static final String VM_POWER_STATE = "vm.powerstate"; // args <Long> vmid
-
- // job messages on message bus
- public static final String JOB_HEARTBEAT = "job.heartbeat"; // args <Long> jobid
- public static final String JOB_STATE = "job.state"; // args <Long> jobid
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/utils/src/com/cloud/api/StringMapTypeAdapter.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/api/StringMapTypeAdapter.java b/utils/src/com/cloud/api/StringMapTypeAdapter.java
new file mode 100644
index 0000000..55f4ae3
--- /dev/null
+++ b/utils/src/com/cloud/api/StringMapTypeAdapter.java
@@ -0,0 +1,46 @@
+// 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 com.cloud.api;
+
+import java.lang.reflect.Type;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import com.google.gson.JsonDeserializationContext;
+import com.google.gson.JsonDeserializer;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
+
+@SuppressWarnings("rawtypes")
+public class StringMapTypeAdapter implements JsonDeserializer<Map> {
+ @Override
+
+ public Map deserialize(JsonElement src, Type srcType,
+ JsonDeserializationContext context) throws JsonParseException {
+
+ Map<String, String> obj = new HashMap<String, String>();
+ JsonObject json = src.getAsJsonObject();
+
+ for(Entry<String, JsonElement> entry : json.entrySet()) {
+ obj.put(entry.getKey(), entry.getValue().getAsString());
+ }
+
+ return obj;
+ }
+}