Complete the move of the virtualmachinemanager to cloud-engine

Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3ef77bc8
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3ef77bc8
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3ef77bc8

Branch: refs/heads/vmsync
Commit: 3ef77bc85abef67d99b088301138d87b10636c7e
Parents: fbe76f0
Author: Alex Huang <[email protected]>
Authored: Thu Jun 13 13:48:28 2013 -0700
Committer: Alex Huang <[email protected]>
Committed: Thu Jun 13 13:50:59 2013 -0700

----------------------------------------------------------------------
 .../agent/manager/allocator/HostAllocator.java  |   85 +
 .../src/com/cloud/alert/AlertManager.java       |   58 +
 .../com/cloud/ha/HighAvailabilityManager.java   |  114 +
 .../cloud/hypervisor/HypervisorGuruManager.java |   27 +
 .../com/cloud/network/rules/RulesManager.java   |   66 +
 .../src/com/cloud/resource/Discoverer.java      |   51 +
 .../src/com/cloud/resource/ResourceManager.java |  153 +
 .../cloud/resource/ResourceStateAdapter.java    |   63 +
 .../com/cloud/vm/ReservationContextImpl.java    |   94 +
 .../src/com/cloud/vm/VirtualMachineManager.java |    3 +
 .../cloud/vm/snapshot/VMSnapshotManager.java    |   47 +
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 3570 ++++++++++++++++++
 .../cloud/vm/VirtualMachinePowerStateSync.java  |   32 +
 .../vm/VirtualMachinePowerStateSyncImpl.java    |  131 +
 .../src/com/cloud/vm/VmWorkJobDispatcher.java   |   88 +
 .../src/com/cloud/vm/VmWorkStart.java           |  120 +
 .../src/com/cloud/vm/VmWorkStop.java            |   34 +
 .../cloud/async/AsyncJobExecutionContext.java   |  173 +
 .../manager/allocator/impl/RandomAllocator.java |    7 +-
 .../agent/manager/allocator/HostAllocator.java  |   86 -
 .../allocator/impl/FirstFitAllocator.java       |   48 +-
 .../allocator/impl/TestingAllocator.java        |    5 +-
 server/src/com/cloud/alert/AlertManager.java    |   58 -
 .../src/com/cloud/api/StringMapTypeAdapter.java |   46 -
 .../cloud/async/AsyncJobExecutionContext.java   |  173 -
 .../com/cloud/async/AsyncJobManagerImpl.java    |    5 +-
 .../src/com/cloud/capacity/CapacityManager.java |    5 +-
 .../com/cloud/capacity/CapacityManagerImpl.java |    7 +-
 server/src/com/cloud/configuration/Config.java  |    3 +-
 .../configuration/ConfigurationManager.java     |   17 -
 .../configuration/ConfigurationManagerImpl.java |   29 -
 .../com/cloud/ha/HighAvailabilityManager.java   |  114 -
 .../cloud/hypervisor/HypervisorGuruManager.java |   27 -
 .../com/cloud/network/rules/RulesManager.java   |   66 -
 server/src/com/cloud/resource/Discoverer.java   |   51 -
 .../src/com/cloud/resource/ResourceManager.java |  153 -
 .../cloud/resource/ResourceStateAdapter.java    |   63 -
 .../com/cloud/vm/ReservationContextImpl.java    |   94 -
 .../com/cloud/vm/VirtualMachineManagerImpl.java | 3560 -----------------
 .../cloud/vm/VirtualMachinePowerStateSync.java  |   32 -
 .../vm/VirtualMachinePowerStateSyncImpl.java    |  132 -
 .../src/com/cloud/vm/VmWorkJobDispatcher.java   |   85 -
 server/src/com/cloud/vm/VmWorkStart.java        |  120 -
 server/src/com/cloud/vm/VmWorkStop.java         |   34 -
 .../cloud/vm/snapshot/VMSnapshotManager.java    |   47 -
 .../cloudstack/messagebus/TopicConstants.java   |   26 -
 .../src/com/cloud/api/StringMapTypeAdapter.java |   46 +
 47 files changed, 4994 insertions(+), 5054 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/api/src/com/cloud/agent/manager/allocator/HostAllocator.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/manager/allocator/HostAllocator.java 
b/api/src/com/cloud/agent/manager/allocator/HostAllocator.java
new file mode 100755
index 0000000..dbfe893
--- /dev/null
+++ b/api/src/com/cloud/agent/manager/allocator/HostAllocator.java
@@ -0,0 +1,85 @@
+// 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.agent.manager.allocator;
+
+import java.util.List;
+
+import com.cloud.deploy.DeploymentPlan;
+import com.cloud.deploy.DeploymentPlanner.ExcludeList;
+import com.cloud.host.Host;
+import com.cloud.host.Host.Type;
+import com.cloud.offering.ServiceOffering;
+import com.cloud.utils.component.Adapter;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineProfile;
+
+public interface HostAllocator extends Adapter {
+
+       /**
+        * @param UserVm vm
+        * @param ServiceOffering offering
+        **/
+       boolean isVirtualMachineUpgradable(final VirtualMachine vm, final 
ServiceOffering offering);
+
+       /**
+       * Determines which physical hosts are suitable to
+       * allocate the guest virtual machines on
+       * 
+       * @param VirtualMachineProfile vmProfile
+       * @param DeploymentPlan plan
+       * @param GuestType type
+       * @param ExcludeList avoid
+       * @param int returnUpTo (use -1 to return all possible hosts)
+       * @return List<Host> List of hosts that are suitable for VM allocation
+       **/
+       
+    public List<Host> allocateTo(VirtualMachineProfile vmProfile, 
DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo);
+       
+    /**
+    * Determines which physical hosts are suitable to
+    * allocate the guest virtual machines on
+    * 
+    * @param VirtualMachineProfile vmProfile
+    * @param DeploymentPlan plan
+    * @param GuestType type
+    * @param ExcludeList avoid
+    * @param int returnUpTo (use -1 to return all possible hosts)
+    * @param boolean considerReservedCapacity (default should be true, set to 
false if host capacity calculation should not look at reserved capacity)
+    * @return List<Host> List of hosts that are suitable for VM allocation
+    **/
+    
+    public List<Host> allocateTo(VirtualMachineProfile vmProfile, 
DeploymentPlan plan, Type type, ExcludeList avoid, int returnUpTo, boolean 
considerReservedCapacity);
+
+    /**
+     * Determines which physical hosts are suitable to
+     * allocate the guest virtual machines on
+     *
+     * @param VirtualMachineProfile vmProfile
+     * @param DeploymentPlan plan
+     * @param GuestType type
+     * @param ExcludeList avoid
+     * @param List<HostVO> hosts
+     * @param int returnUpTo (use -1 to return all possible hosts)
+     * @param boolean considerReservedCapacity (default should be true, set to 
false if host capacity calculation should not look at reserved capacity)
+     * @return List<Host> List of hosts that are suitable for VM allocation
+     **/
+    public List<Host> allocateTo(VirtualMachineProfile vmProfile, 
DeploymentPlan plan, Type type, ExcludeList avoid, List<? extends Host> hosts, 
int returnUpTo,
+            boolean considerReservedCapacity);
+
+     public static int RETURN_UPTO_ALL = -1;
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/alert/AlertManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/alert/AlertManager.java 
b/engine/components-api/src/com/cloud/alert/AlertManager.java
new file mode 100755
index 0000000..b6d005a
--- /dev/null
+++ b/engine/components-api/src/com/cloud/alert/AlertManager.java
@@ -0,0 +1,58 @@
+// 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.alert;
+
+import com.cloud.capacity.CapacityVO;
+import com.cloud.utils.component.Manager;
+
+public interface AlertManager extends Manager {
+    public static final short ALERT_TYPE_MEMORY = 
CapacityVO.CAPACITY_TYPE_MEMORY;
+    public static final short ALERT_TYPE_CPU = CapacityVO.CAPACITY_TYPE_CPU;
+    public static final short ALERT_TYPE_STORAGE = 
CapacityVO.CAPACITY_TYPE_STORAGE;
+    public static final short ALERT_TYPE_STORAGE_ALLOCATED = 
CapacityVO.CAPACITY_TYPE_STORAGE_ALLOCATED;
+    public static final short ALERT_TYPE_VIRTUAL_NETWORK_PUBLIC_IP = 
CapacityVO.CAPACITY_TYPE_VIRTUAL_NETWORK_PUBLIC_IP;
+    public static final short ALERT_TYPE_PRIVATE_IP = 
CapacityVO.CAPACITY_TYPE_PRIVATE_IP;
+    public static final short ALERT_TYPE_SECONDARY_STORAGE = 
CapacityVO.CAPACITY_TYPE_SECONDARY_STORAGE;
+    public static final short ALERT_TYPE_HOST = 7;
+    public static final short ALERT_TYPE_USERVM = 8;
+    public static final short ALERT_TYPE_DOMAIN_ROUTER = 9;
+    public static final short ALERT_TYPE_CONSOLE_PROXY = 10;
+    public static final short ALERT_TYPE_ROUTING = 11; // lost connection to 
default route (to the gateway)
+    public static final short ALERT_TYPE_STORAGE_MISC = 12; // lost connection 
to default route (to the gateway)
+    public static final short ALERT_TYPE_USAGE_SERVER = 13; // lost connection 
to default route (to the gateway)
+    public static final short ALERT_TYPE_MANAGMENT_NODE = 14; // lost 
connection to default route (to the gateway)
+    public static final short ALERT_TYPE_DOMAIN_ROUTER_MIGRATE = 15;
+    public static final short ALERT_TYPE_CONSOLE_PROXY_MIGRATE = 16;
+    public static final short ALERT_TYPE_USERVM_MIGRATE = 17;
+    public static final short ALERT_TYPE_VLAN = 18;
+    public static final short ALERT_TYPE_SSVM = 19;
+    public static final short ALERT_TYPE_USAGE_SERVER_RESULT = 20; // Usage 
job result
+    public static final short ALERT_TYPE_STORAGE_DELETE = 21;
+    public static final short ALERT_TYPE_UPDATE_RESOURCE_COUNT = 22; // 
Generated when we fail to update the resource
+    // count
+    public static final short ALERT_TYPE_USAGE_SANITY_RESULT = 23;
+    public static final short ALERT_TYPE_DIRECT_ATTACHED_PUBLIC_IP = 24;
+    public static final short ALERT_TYPE_LOCAL_STORAGE = 25;
+    public static final short ALERT_TYPE_RESOURCE_LIMIT_EXCEEDED = 26; // 
Generated when the resource limit exceeds the limit. Currently used for 
recurring snapshots only
+
+
+    void clearAlert(short alertType, long dataCenterId, long podId);
+
+    void sendAlert(short alertType, long dataCenterId, Long podId, String 
subject, String body);
+
+    void recalculateCapacity();
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java
----------------------------------------------------------------------
diff --git 
a/engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java 
b/engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java
new file mode 100644
index 0000000..dd0b3e6
--- /dev/null
+++ b/engine/components-api/src/com/cloud/ha/HighAvailabilityManager.java
@@ -0,0 +1,114 @@
+// 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.ha;
+
+import java.util.List;
+
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.utils.component.Manager;
+import com.cloud.vm.VMInstanceVO;
+
+/**
+ * HighAvailabilityManager checks to make sure the VMs are running fine.
+ */
+public interface HighAvailabilityManager extends Manager {
+    public enum WorkType {
+        Migration,  // Migrating VMs off of a host.
+        Stop,       // Stops a VM for storage pool migration purposes.  This 
should be obsolete now.
+        CheckStop,  // Checks if a VM has been stopped.
+        ForceStop,  // Force a VM to stop even if the states don't allow it.  
Use this only if you know the VM is stopped on the physical hypervisor.
+        Destroy,    // Destroy a VM.
+        HA;         // Restart a VM.
+    }
+
+    enum Step {
+        Scheduled,
+        Investigating,
+        Fencing,
+        Stopping,
+        Restarting,
+        Migrating,
+        Cancelled,
+        Done,
+        Error,
+    }
+
+    /**
+     * Investigate why a host has disconnected and migrate the VMs on it
+     * if necessary.
+     * 
+     * @param host - the host that has disconnected.
+     */
+    Status investigate(long hostId);
+
+    /**
+     * Restart a vm that has gone away due to various reasons.  Whether a
+     * VM is restarted depends on various reasons.
+     *   1. Is the VM really dead.  This method will try to find out.
+     *   2. Is the VM HA enabled?  If not, the VM is simply stopped.
+     * 
+     * All VMs that enter HA mode is not allowed to be operated on until it
+     * has been determined that the VM is dead.
+     * 
+     * @param vm the vm that has gone away.
+     * @param investigate must be investigated before we do anything with this 
vm.
+     */
+    void scheduleRestart(VMInstanceVO vm, boolean investigate);
+
+    void cancelDestroy(VMInstanceVO vm, Long hostId);
+    
+    void scheduleDestroy(VMInstanceVO vm, long hostId);
+    
+    /**
+     * Schedule restarts for all vms running on the host.
+     * @param host host.
+     * @param investigate TODO
+     */
+    void scheduleRestartForVmsOnHost(HostVO host, boolean investigate);
+
+    /**
+     * Schedule the vm for migration.
+     * 
+     * @param vm
+     * @return true if schedule worked.
+     */
+    boolean scheduleMigration(VMInstanceVO vm);
+    
+    List<VMInstanceVO> findTakenMigrationWork();
+
+    /**
+     * Schedules a work item to stop a VM.  This method schedules a work
+     * item to do one of three things.
+     * 
+     * 1. Perform a regular stop of a VM: WorkType.Stop
+     * 2. Perform a force stop of a VM: WorkType.ForceStop
+     * 3. Check if a VM has been stopped: WorkType.CheckStop
+     * 
+     * @param vm virtual machine to stop.
+     * @param host host the virtual machine is on.
+     * @param type which type of stop is requested. 
+     */
+    void scheduleStop(VMInstanceVO vm, long hostId, WorkType type);
+
+    void cancelScheduledMigrations(HostVO host);
+
+    /**
+     * @return
+     */
+    String getHaTag();
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java
----------------------------------------------------------------------
diff --git 
a/engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java 
b/engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java
new file mode 100644
index 0000000..5249750
--- /dev/null
+++ b/engine/components-api/src/com/cloud/hypervisor/HypervisorGuruManager.java
@@ -0,0 +1,27 @@
+// 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.hypervisor;
+
+import com.cloud.agent.api.Command;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.utils.component.Manager;
+
+public interface HypervisorGuruManager extends Manager {
+       HypervisorGuru getGuru(HypervisorType hypervisorType);
+    long getGuruProcessedCommandTargetHost(long hostId, Command cmd);
+}
+

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/network/rules/RulesManager.java
----------------------------------------------------------------------
diff --git 
a/engine/components-api/src/com/cloud/network/rules/RulesManager.java 
b/engine/components-api/src/com/cloud/network/rules/RulesManager.java
new file mode 100644
index 0000000..201d79d
--- /dev/null
+++ b/engine/components-api/src/com/cloud/network/rules/RulesManager.java
@@ -0,0 +1,66 @@
+// 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.network.rules;
+
+import java.util.List;
+
+import com.cloud.exception.InsufficientAddressCapacityException;
+import com.cloud.exception.NetworkRuleConflictException;
+import com.cloud.exception.ResourceUnavailableException;
+import com.cloud.network.IpAddress;
+import com.cloud.user.Account;
+import com.cloud.uservm.UserVm;
+import com.cloud.vm.Nic;
+import com.cloud.vm.VirtualMachine;
+
+/**
+ * Rules Manager manages the network rules created for different networks.
+ */
+public interface RulesManager extends RulesService {
+
+    boolean applyPortForwardingRulesForNetwork(long networkId, boolean 
continueOnError, Account caller);
+
+    boolean applyStaticNatRulesForNetwork(long networkId, boolean 
continueOnError, Account caller);
+
+    void checkRuleAndUserVm(FirewallRule rule, UserVm userVm, Account caller);
+
+    boolean revokeAllPFAndStaticNatRulesForIp(long ipId, long userId, Account 
caller) throws ResourceUnavailableException;
+
+    boolean revokeAllPFStaticNatRulesForNetwork(long networkId, long userId, 
Account caller) throws ResourceUnavailableException;
+
+    boolean revokePortForwardingRulesForVm(long vmId);
+
+    FirewallRule[] reservePorts(IpAddress ip, String protocol, 
FirewallRule.Purpose purpose, boolean openFirewall, Account caller, int... 
ports) throws NetworkRuleConflictException;
+
+    boolean applyStaticNatsForNetwork(long networkId, boolean continueOnError, 
Account caller);
+
+    void getSystemIpAndEnableStaticNatForVm(VirtualMachine vm, boolean 
getNewIp) throws InsufficientAddressCapacityException;
+
+    boolean disableStaticNat(long ipAddressId, Account caller, long 
callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException;
+
+    /**
+     * @param networkId
+     * @param continueOnError
+     * @param caller
+     * @param forRevoke
+     * @return
+     */
+    boolean applyStaticNatForNetwork(long networkId, boolean continueOnError, 
Account caller, boolean forRevoke);
+
+    List<FirewallRuleVO> listAssociatedRulesForGuestNic(Nic nic);
+
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/resource/Discoverer.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/resource/Discoverer.java 
b/engine/components-api/src/com/cloud/resource/Discoverer.java
new file mode 100755
index 0000000..9af7363
--- /dev/null
+++ b/engine/components-api/src/com/cloud/resource/Discoverer.java
@@ -0,0 +1,51 @@
+// 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.resource;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import com.cloud.exception.DiscoveryException;
+import com.cloud.host.HostVO;
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.utils.component.Adapter;
+
+/**
+ * Discoverer encapsulates interfaces that will discover resources.
+ *
+ */
+public interface Discoverer extends Adapter {
+    /**
+     * Given an accessible ip address, find out what it is.
+     * 
+     * @param url
+     * @param username
+     * @param password
+     * @return ServerResource
+     */
+    Map<? extends ServerResource, Map<String, String>> find(long dcId, Long 
podId, Long clusterId, URI uri, String username, String password, List<String> 
hostTags) throws DiscoveryException;
+
+       void postDiscovery(List<HostVO> hosts, long msId)  throws 
DiscoveryException;
+       
+       boolean matchHypervisor(String hypervisor);
+       Hypervisor.HypervisorType getHypervisorType();
+       public void putParam(Map<String, String> params);
+       
+       ServerResource reloadResource(HostVO host);
+       
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/resource/ResourceManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/resource/ResourceManager.java 
b/engine/components-api/src/com/cloud/resource/ResourceManager.java
new file mode 100755
index 0000000..b0ab926
--- /dev/null
+++ b/engine/components-api/src/com/cloud/resource/ResourceManager.java
@@ -0,0 +1,153 @@
+// 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.resource;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.dc.DataCenterVO;
+import com.cloud.dc.HostPodVO;
+import com.cloud.dc.PodCluster;
+import com.cloud.exception.AgentUnavailableException;
+import com.cloud.host.Host;
+import com.cloud.host.Host.Type;
+import com.cloud.host.HostStats;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.resource.ResourceState.Event;
+import com.cloud.service.ServiceOfferingVO;
+import com.cloud.template.VirtualMachineTemplate;
+import com.cloud.utils.Pair;
+import com.cloud.utils.fsm.NoTransitionException;
+
+/**
+ * ResourceManager manages how physical resources are organized within the
+ * CloudStack. It also manages the life cycle of the physical resources.
+ */
+public interface ResourceManager extends ResourceService{
+    /**
+     * Register a listener for different types of resource life cycle events.
+     * There can only be one type of listener per type of host.
+     * 
+     * @param Event type see ResourceListener.java, allow combination of 
multiple events.
+     * @param listener the listener to notify.
+     */
+    public void registerResourceEvent(Integer event, ResourceListener 
listener);
+    
+    public void unregisterResourceEvent(ResourceListener listener);
+    
+    /**
+     * 
+     * @param name of adapter
+     * @param adapter
+     * @param hates, a list of names which will be eliminated by this adapter. 
Especially for the case where 
+     * can be only one adapter responds to an event, e.g. startupCommand
+     */
+    public void registerResourceStateAdapter(String name, ResourceStateAdapter 
adapter);
+    
+    public void unregisterResourceStateAdapter(String name);
+    
+       public Host createHostAndAgent(Long hostId, ServerResource resource, 
Map<String, String> details, boolean old, List<String> hostTags,
+               boolean forRebalance);
+       
+       public Host addHost(long zoneId, ServerResource resource, Type 
hostType, Map<String, String> hostDetails);
+       
+       public HostVO createHostVOForConnectedAgent(StartupCommand[] cmds);
+       
+       public void checkCIDR(HostPodVO pod, DataCenterVO dc, String 
serverPrivateIP, String serverPrivateNetmask);
+       
+       public HostVO fillRoutingHostVO(HostVO host, StartupRoutingCommand 
ssCmd, HypervisorType hyType, Map<String, String> details, List<String> 
hostTags);
+       
+       public void deleteRoutingHost(HostVO host, boolean isForced, boolean 
forceDestroyStorage) throws UnableDeleteHostException;
+       
+    public boolean executeUserRequest(long hostId, ResourceState.Event event) 
throws AgentUnavailableException;
+
+       boolean resourceStateTransitTo(Host host, Event event, long msId) 
throws NoTransitionException;
+
+       boolean umanageHost(long hostId);
+
+       boolean maintenanceFailed(long hostId);
+       
+       public boolean maintain(final long hostId) throws 
AgentUnavailableException;
+       
+    @Override
+    public boolean deleteHost(long hostId, boolean isForced, boolean 
isForceDeleteStorage);
+    
+    public List<HostVO> findDirectlyConnectedHosts();
+    
+    public List<HostVO> listAllUpAndEnabledHosts(Host.Type type, Long 
clusterId, Long podId, long dcId);
+    
+    public List<HostVO> listAllHostsInCluster(long clusterId);
+    
+    public List<HostVO> listHostsInClusterByStatus(long clusterId, Status 
status);
+    
+    public List<HostVO> listAllUpAndEnabledHostsInOneZoneByType(Host.Type 
type, long dcId);
+    public List<HostVO> 
listAllUpAndEnabledHostsInOneZoneByHypervisor(HypervisorType type, long dcId);
+    
+    public List<HostVO> listAllHostsInOneZoneByType(Host.Type type, long dcId);
+    
+    public List<HostVO> listAllHostsInAllZonesByType(Type type);
+    
+    public List<HypervisorType> listAvailHypervisorInZone(Long hostId, Long 
zoneId);
+    
+    public HostVO findHostByGuid(String guid);
+    
+    public HostVO findHostByName(String name);
+    
+    public List<HostVO> listHostsByNameLike(String name);
+    
+    /**
+     * Find a pod based on the user id, template, and data center.
+     * 
+     * @param template
+     * @param dc
+     * @param userId
+     * @return
+     */
+    Pair<HostPodVO, Long> findPod(VirtualMachineTemplate template, 
ServiceOfferingVO offering, DataCenterVO dc, long accountId, Set<Long> avoids);
+    
+    HostStats getHostStatistics(long hostId);
+    
+    Long getGuestOSCategoryId(long hostId);
+    
+    String getHostTags(long hostId);
+    
+    List<PodCluster> listByDataCenter(long dcId);
+
+       List<HostVO> listAllNotInMaintenanceHostsInOneZone(Type type, Long 
dcId);
+
+       HypervisorType getDefaultHypervisor(long zoneId);
+
+       HypervisorType getAvailableHypervisor(long zoneId);
+
+    Discoverer getMatchingDiscover(HypervisorType hypervisorType);
+
+       List<HostVO> findHostByGuid(long dcId, String guid);
+
+    /**
+     * @param type
+     * @param clusterId
+     * @param podId
+     * @param dcId
+     * @return
+     */
+    List<HostVO> listAllUpAndEnabledNonHAHosts(Type type, Long clusterId, Long 
podId, long dcId);
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java
----------------------------------------------------------------------
diff --git 
a/engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java 
b/engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java
new file mode 100755
index 0000000..68e43f3
--- /dev/null
+++ b/engine/components-api/src/com/cloud/resource/ResourceStateAdapter.java
@@ -0,0 +1,63 @@
+// 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.resource;
+
+import java.util.List;
+import java.util.Map;
+
+import com.cloud.agent.api.StartupAnswer;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.exception.ConnectionException;
+import com.cloud.host.HostVO;
+import com.cloud.utils.component.Adapter;
+
+public interface ResourceStateAdapter extends Adapter {
+    static public enum Event {
+        CREATE_HOST_VO_FOR_CONNECTED,
+        CREATE_HOST_VO_FOR_DIRECT_CONNECT,
+        DELETE_HOST,
+    }
+    
+    static public class DeleteHostAnswer {
+        private boolean isContinue;
+        private boolean isException;
+        
+        public DeleteHostAnswer(boolean isContinue) {
+            this.isContinue = isContinue;
+            this.isException = false;
+        }
+        
+        public DeleteHostAnswer(boolean isContinue, boolean isException) {
+            this.isContinue = isContinue;
+            this.isException = isException;
+        }
+        
+        public boolean getIsContinue() {
+            return this.isContinue;
+        }
+        
+        public boolean getIsException() {
+            return this.isException;
+        }
+    }
+    
+    public HostVO createHostVOForConnectedAgent(HostVO host, StartupCommand[] 
cmd);
+    
+    public HostVO createHostVOForDirectConnectAgent(HostVO host, final 
StartupCommand[] startup, ServerResource resource, Map<String, String> details, 
List<String> hostTags);
+    
+    public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean 
isForceDeleteStorage) throws UnableDeleteHostException;
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java 
b/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java
new file mode 100644
index 0000000..cab93b4
--- /dev/null
+++ b/engine/components-api/src/com/cloud/vm/ReservationContextImpl.java
@@ -0,0 +1,94 @@
+// 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 com.cloud.dao.EntityManager;
+import com.cloud.domain.Domain;
+import com.cloud.domain.DomainVO;
+import com.cloud.user.Account;
+import com.cloud.user.User;
+import com.cloud.utils.Journal;
+
+public class ReservationContextImpl implements ReservationContext {
+    User _caller;
+    Account _account;
+    Domain _domain;
+    Journal _journal;
+    String _reservationId;
+    
+    public ReservationContextImpl(String reservationId, Journal journal, User 
caller) {
+        this(reservationId, journal, caller, null, null);
+    }
+    
+    public ReservationContextImpl(String reservationId, Journal journal, User 
caller, Account account) {
+        this(reservationId, journal, caller, account, null);
+        
+    }
+    
+    public ReservationContextImpl(String reservationId, Journal journal, User 
caller, Account account, Domain domain) {
+        _caller = caller;
+        _account = account;
+        _domain = domain;
+        _journal = journal;
+        _reservationId = reservationId;
+    }
+    
+    @Override
+    public long getDomainId() {
+        return 0;
+    }
+
+    @Override
+    public long getAccountId() {
+        return _caller.getAccountId();
+    }
+
+    @Override
+    public User getCaller() {
+        return _caller;
+    }
+
+    @Override
+    public Account getAccount() {
+        return _account;
+    }
+
+    @Override
+    public Domain getDomain() {
+        if (_domain == null) {
+            getAccount();
+            _domain = s_entityMgr.findById(DomainVO.class, 
_account.getDomainId());
+        }
+        return _domain;
+    }
+
+    @Override
+    public Journal getJournal() {
+        return _journal;
+    }
+
+    @Override
+    public String getReservationId() {
+        return _reservationId;
+    }
+    
+    static EntityManager s_entityMgr;
+    
+    static public void setComponents(EntityManager entityMgr) {
+        s_entityMgr = entityMgr;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
----------------------------------------------------------------------
diff --git a/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java 
b/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
index 83ec485..f1ace6c 100644
--- a/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
+++ b/engine/components-api/src/com/cloud/vm/VirtualMachineManager.java
@@ -65,6 +65,9 @@ import com.cloud.utils.fsm.NoTransitionException;
  * 
  */
 public interface VirtualMachineManager extends Manager {
+    public interface Topics {
+        public static final String VM_POWER_STATE = "vm.powerstate";
+    }
 
     boolean allocate(String vmInstanceName,
             VMTemplateVO template,

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3ef77bc8/engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java
----------------------------------------------------------------------
diff --git 
a/engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java 
b/engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java
new file mode 100644
index 0000000..c609005
--- /dev/null
+++ b/engine/components-api/src/com/cloud/vm/snapshot/VMSnapshotManager.java
@@ -0,0 +1,47 @@
+// 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);
+
+}

Reply via email to