You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by al...@apache.org on 2012/07/27 23:01:31 UTC
[12/50] [abbrv] git commit: bug CS-15389: Added prepareStop to
Virtualmachine manager and moved network usage collection into prepareStop of
VR manager
bug CS-15389: Added prepareStop to Virtualmachine manager and moved network usage collection into prepareStop of VR manager
Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/468f2720
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/468f2720
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/468f2720
Branch: refs/heads/vpc
Commit: 468f2720eb3897a98ed33b5194218c4b89a8e7db
Parents: 2a95258
Author: kishan <ki...@cloud.com>
Authored: Thu Jun 28 18:06:30 2012 -0700
Committer: kishan <ki...@cloud.com>
Committed: Fri Jul 27 23:13:18 2012 +0530
----------------------------------------------------------------------
.../com/cloud/agent/manager/MockVmManagerImpl.java | 4 +-
.../com/cloud/resource/AgentRoutingResource.java | 4 +-
.../resource/computing/FakeComputingResource.java | 11 +-
.../computing/LibvirtComputingResource.java | 25 +---
api/src/com/cloud/agent/api/RebootAnswer.java | 33 +----
api/src/com/cloud/agent/api/StopAnswer.java | 8 +-
api/src/com/cloud/agent/api/StopCommand.java | 10 --
.../com/cloud/ovm/hypervisor/OvmResourceBase.java | 10 +-
.../hypervisor/vmware/resource/VmwareResource.java | 40 ++----
.../xen/resource/CitrixResourceBase.java | 44 ++----
.../network/lb/ElasticLoadBalancerManagerImpl.java | 5 +
.../com/cloud/baremetal/BareMetalResourceBase.java | 6 +-
.../AgentBasedConsoleProxyManager.java | 4 +
.../consoleproxy/ConsoleProxyManagerImpl.java | 4 +
.../router/VirtualNetworkApplianceManagerImpl.java | 126 ++++++++++++---
.../secondary/SecondaryStorageManagerImpl.java | 5 +
server/src/com/cloud/vm/UserVmManagerImpl.java | 3 +
server/src/com/cloud/vm/VirtualMachineGuru.java | 7 +
.../com/cloud/vm/VirtualMachineManagerImpl.java | 9 +-
19 files changed, 183 insertions(+), 175 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
index dca44c4..5e66464 100644
--- a/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
+++ b/agent-simulator/src/com/cloud/agent/manager/MockVmManagerImpl.java
@@ -352,12 +352,12 @@ public class MockVmManagerImpl implements MockVmManager {
_mockAgentMgr.handleSystemVMStop(vm.getId());
}
- return new StopAnswer(cmd, null, new Integer(0), new Long(100), new Long(200));
+ return new StopAnswer(cmd, null, new Integer(0), true);
}
@Override
public Answer rebootVM(RebootCommand cmd) {
- return new RebootAnswer(cmd, "Rebooted "+cmd.getVmName());
+ return new RebootAnswer(cmd, "Rebooted "+cmd.getVmName(), false);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/agent-simulator/src/com/cloud/resource/AgentRoutingResource.java
----------------------------------------------------------------------
diff --git a/agent-simulator/src/com/cloud/resource/AgentRoutingResource.java b/agent-simulator/src/com/cloud/resource/AgentRoutingResource.java
index e259c39..291e46a 100644
--- a/agent-simulator/src/com/cloud/resource/AgentRoutingResource.java
+++ b/agent-simulator/src/com/cloud/resource/AgentRoutingResource.java
@@ -233,10 +233,10 @@ public class AgentRoutingResource extends AgentStorageResource {
Answer result = _simMgr.simulate(cmd, hostGuid);
if (!result.getResult()) {
- return new StopAnswer(cmd, result.getDetails());
+ return new StopAnswer(cmd, result.getDetails(), false);
}
- answer = new StopAnswer(cmd, null, 0, new Long(100), new Long(200));
+ answer = new StopAnswer(cmd, null, 0, true);
Pair<Long, Long> data = _runningVms.get(vmName);
if (data != null) {
this.usedCpu -= data.first();
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java b/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
index d9b5d94..abfa478 100644
--- a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
+++ b/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java
@@ -443,8 +443,6 @@ public class FakeComputingResource extends ServerResourceBase implements
String vmName = cmd.getVmName();
Integer port = vmMgr.getVncPort(vmName);
- Long bytesReceived = null;
- Long bytesSent = null;
State state = null;
synchronized (_vms) {
@@ -462,17 +460,16 @@ public class FakeComputingResource extends ServerResourceBase implements
s_logger.warn("Couldn't stop " + vmName);
if (result != null) {
- return new StopAnswer(cmd, result);
+ return new StopAnswer(cmd, result, false);
}
}
- answer = new StopAnswer(cmd, null, port, bytesSent, bytesReceived);
+ answer = new StopAnswer(cmd, null, port, true);
String result2 = vmMgr.cleanupVnet(cmd.getVnet());
if (result2 != null) {
result = result2 + (result != null ? ("\n" + result) : "");
- answer = new StopAnswer(cmd, result, port, bytesSent,
- bytesReceived);
+ answer = new StopAnswer(cmd, result, port, true);
}
_dhcpSnooper.cleanup(vmName, null);
@@ -498,7 +495,7 @@ public class FakeComputingResource extends ServerResourceBase implements
protected Answer execute(RebootCommand cmd) {
VmMgr vmMgr = getVmManager();
vmMgr.rebootVM(cmd.getVmName());
- return new RebootAnswer(cmd, "success", 0L, 0L);
+ return new RebootAnswer(cmd, "success", true);
}
private Answer execute(PingTestCommand cmd) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
----------------------------------------------------------------------
diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
index 347ff87..a4854be 100755
--- a/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
+++ b/agent/src/com/cloud/agent/resource/computing/LibvirtComputingResource.java
@@ -2270,8 +2270,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements
}
private Answer execute(RebootCommand cmd) {
- Long bytesReceived = null;
- Long bytesSent = null;
synchronized (_vms) {
_vms.put(cmd.getVmName(), State.Starting);
@@ -2288,13 +2286,12 @@ public class LibvirtComputingResource extends ServerResourceBase implements
}
get_rule_logs_for_vms();
- return new RebootAnswer(cmd, null, bytesSent, bytesReceived,
- vncPort);
+ return new RebootAnswer(cmd, null, vncPort);
} else {
- return new RebootAnswer(cmd, result);
+ return new RebootAnswer(cmd, result, false);
}
} catch (LibvirtException e) {
- return new RebootAnswer(cmd, e.getMessage());
+ return new RebootAnswer(cmd, e.getMessage(), false);
} finally {
synchronized (_vms) {
_vms.put(cmd.getVmName(), State.Running);
@@ -2303,16 +2300,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements
}
protected Answer execute(RebootRouterCommand cmd) {
- Long bytesSent = 0L;
- Long bytesRcvd = 0L;
- if (VirtualMachineName.isValidRouterName(cmd.getVmName())) {
- long[] stats = getNetworkStats(cmd.getPrivateIpAddress());
- bytesSent = stats[0];
- bytesRcvd = stats[1];
- }
RebootAnswer answer = (RebootAnswer) execute((RebootCommand) cmd);
- answer.setBytesSent(bytesSent);
- answer.setBytesReceived(bytesRcvd);
String result = _virtRouterResource.connect(cmd.getPrivateIpAddress());
if (result == null) {
networkUsage(cmd.getPrivateIpAddress(), "create", null);
@@ -2345,9 +2333,6 @@ public class LibvirtComputingResource extends ServerResourceBase implements
protected Answer execute(StopCommand cmd) {
final String vmName = cmd.getVmName();
- Long bytesReceived = new Long(0);
- Long bytesSent = new Long(0);
-
State state = null;
synchronized (_vms) {
state = _vms.get(vmName);
@@ -2373,9 +2358,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements
result = result2 + result;
}
state = State.Stopped;
- return new StopAnswer(cmd, result, 0, bytesSent, bytesReceived);
+ return new StopAnswer(cmd, result, 0, true);
} catch (LibvirtException e) {
- return new StopAnswer(cmd, e.getMessage());
+ return new StopAnswer(cmd, e.getMessage(), false);
} finally {
synchronized (_vms) {
if (state != null) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/api/src/com/cloud/agent/api/RebootAnswer.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/RebootAnswer.java b/api/src/com/cloud/agent/api/RebootAnswer.java
index b69afb2..da53b4f 100644
--- a/api/src/com/cloud/agent/api/RebootAnswer.java
+++ b/api/src/com/cloud/agent/api/RebootAnswer.java
@@ -17,52 +17,25 @@
package com.cloud.agent.api;
public class RebootAnswer extends Answer {
- Long bytesSent;
- Long bytesReceived;
Integer vncPort;
protected RebootAnswer() {
}
- public RebootAnswer(RebootCommand cmd, String details, Long bytesSent, Long bytesReceived, Integer vncport) {
+ public RebootAnswer(RebootCommand cmd, String details, Integer vncport) {
super(cmd, true, details);
- this.bytesReceived = bytesReceived;
- this.bytesSent = bytesSent;
this.vncPort = vncport;
}
- public RebootAnswer(RebootCommand cmd, String details, Long bytesSent, Long bytesReceived) {
- super(cmd, true, details);
- this.bytesReceived = bytesReceived;
- this.bytesSent = bytesSent;
+ public RebootAnswer(RebootCommand cmd, String details, boolean success) {
+ super(cmd, success, details);
this.vncPort = null;
}
- public RebootAnswer(RebootCommand cmd, String details) {
- super(cmd, false, details);
- bytesSent = null;
- bytesReceived = null;
- }
-
public RebootAnswer(RebootCommand cmd, Exception e) {
super(cmd, e);
}
- public void setBytesReceived(Long bytesReceived) {
- this.bytesReceived = bytesReceived;
- }
-
- public Long getBytesReceived() {
- return bytesReceived;
- }
-
- public void setBytesSent(Long bytesSent) {
- this.bytesSent = bytesSent;
- }
-
- public Long getBytesSent() {
- return bytesSent;
- }
public Integer getVncPort() {
return vncPort;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/api/src/com/cloud/agent/api/StopAnswer.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/StopAnswer.java b/api/src/com/cloud/agent/api/StopAnswer.java
index 4050cd3..52f28f1 100755
--- a/api/src/com/cloud/agent/api/StopAnswer.java
+++ b/api/src/com/cloud/agent/api/StopAnswer.java
@@ -22,13 +22,13 @@ public class StopAnswer extends RebootAnswer {
protected StopAnswer() {
}
- public StopAnswer(StopCommand cmd, String details, Integer vncPort, Long bytesSent, Long bytesReceived) {
- super(cmd, details, bytesSent, bytesReceived);
+ public StopAnswer(StopCommand cmd, String details, Integer vncPort, boolean success) {
+ super(cmd, details, success);
this.vncPort = vncPort;
}
- public StopAnswer(StopCommand cmd, String details) {
- super(cmd, details);
+ public StopAnswer(StopCommand cmd, String details, boolean success) {
+ super(cmd, details, success);
vncPort = null;
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/api/src/com/cloud/agent/api/StopCommand.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/agent/api/StopCommand.java b/api/src/com/cloud/agent/api/StopCommand.java
index 734da84..176a7fb 100755
--- a/api/src/com/cloud/agent/api/StopCommand.java
+++ b/api/src/com/cloud/agent/api/StopCommand.java
@@ -23,7 +23,6 @@ public class StopCommand extends RebootCommand {
private boolean isProxy=false;
private String urlPort=null;
private String publicConsoleProxyIpAddress=null;
- private String privateRouterIpAddress=null;
protected StopCommand() {
}
@@ -45,12 +44,6 @@ public class StopCommand extends RebootCommand {
this.vnet = vnet;
}
- public StopCommand(VirtualMachine vm, String vmName, String vnet, String privateRouterIpAddress) {
- super(vmName);
- this.vnet = vnet;
- this.privateRouterIpAddress = privateRouterIpAddress;
- }
-
public StopCommand(String vmName) {
super(vmName);
}
@@ -76,7 +69,4 @@ public class StopCommand extends RebootCommand {
return this.publicConsoleProxyIpAddress;
}
- public String getPrivateRouterIpAddress() {
- return privateRouterIpAddress;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
index c48b13f..c5cb586 100755
--- a/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
+++ b/plugins/hypervisors/ovm/src/com/cloud/ovm/hypervisor/OvmResourceBase.java
@@ -716,7 +716,7 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
vm = OvmVm.getDetails(_conn, vmName);
} catch (XmlRpcException e) {
s_logger.debug("Unable to get details of vm: " + vmName + ", treating it as stopped", e);
- return new StopAnswer(cmd, "success", 0, 0L, 0L);
+ return new StopAnswer(cmd, "success", 0, true);
}
deleteAllNetworkRulesForVm(vmName);
@@ -724,10 +724,10 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
cleanup(vm);
state = State.Stopped;
- return new StopAnswer(cmd, "success", 0, 0L, 0L);
+ return new StopAnswer(cmd, "success", 0, true);
} catch (Exception e) {
s_logger.debug("Stop " + vmName + "failed", e);
- return new StopAnswer(cmd, e.getMessage());
+ return new StopAnswer(cmd, e.getMessage(), false);
} finally {
synchronized(_vms) {
if (state != null) {
@@ -749,10 +749,10 @@ public class OvmResourceBase implements ServerResource, HypervisorResource {
try {
Map<String, String> res = OvmVm.reboot(_conn, vmName);
Integer vncPort = Integer.parseInt(res.get("vncPort"));
- return new RebootAnswer(cmd, null, null, null, vncPort);
+ return new RebootAnswer(cmd, null, vncPort);
} catch (Exception e) {
s_logger.debug("Reboot " + vmName + " failed", e);
- return new RebootAnswer(cmd, e.getMessage());
+ return new RebootAnswer(cmd, e.getMessage(), false);
} finally {
synchronized(_vms) {
_vms.put(cmd.getVmName(), State.Running);
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
index 208cbbe..e837dbd 100755
--- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
+++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/resource/VmwareResource.java
@@ -2027,16 +2027,6 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
vmMo.setCustomFieldValue(CustomFieldConstants.CLOUD_NIC_MASK, "0");
if (getVmState(vmMo) != State.Stopped) {
- Long bytesSent = 0L;
- Long bytesRcvd = 0L;
-
- if (VirtualMachineName.isValidRouterName(cmd.getVmName())) {
- if (cmd.getPrivateRouterIpAddress() != null) {
- long[] stats = getNetworkStats(cmd.getPrivateRouterIpAddress());
- bytesSent = stats[0];
- bytesRcvd = stats[1];
- }
- }
// before we stop VM, remove all possible snapshots on the VM to let
// disk chain be collapsed
@@ -2044,11 +2034,11 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
vmMo.removeAllSnapshots();
if (vmMo.safePowerOff(_shutdown_waitMs)) {
state = State.Stopped;
- return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", 0, bytesSent, bytesRcvd);
+ return new StopAnswer(cmd, "Stop VM " + cmd.getVmName() + " Succeed", 0, true);
} else {
String msg = "Have problem in powering off VM " + cmd.getVmName() + ", let the process continue";
s_logger.warn(msg);
- return new StopAnswer(cmd, msg, 0, 0L, 0L);
+ return new StopAnswer(cmd, msg, 0, true);
}
} else {
state = State.Stopped;
@@ -2056,7 +2046,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
String msg = "VM " + cmd.getVmName() + " is already in stopped state";
s_logger.info(msg);
- return new StopAnswer(cmd, msg, 0, 0L, 0L);
+ return new StopAnswer(cmd, msg, 0, true);
} finally {
synchronized (_vms) {
_vms.put(cmd.getVmName(), state);
@@ -2069,7 +2059,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
String msg = "VM " + cmd.getVmName() + " is no longer in vSphere";
s_logger.info(msg);
- return new StopAnswer(cmd, msg, 0, 0L, 0L);
+ return new StopAnswer(cmd, msg, 0, true);
}
} catch (Exception e) {
if (e instanceof RemoteException) {
@@ -2079,7 +2069,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
String msg = "StopCommand failed due to " + VmwareHelper.getExceptionMessage(e);
s_logger.error(msg);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
}
}
@@ -2088,17 +2078,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
s_logger.info("Executing resource RebootRouterCommand: " + _gson.toJson(cmd));
}
- Long bytesSent = 0L;
- Long bytesRcvd = 0L;
- if (VirtualMachineName.isValidRouterName(cmd.getVmName())) {
- long[] stats = getNetworkStats(cmd.getPrivateIpAddress());
- bytesSent = stats[0];
- bytesRcvd = stats[1];
- }
-
RebootAnswer answer = (RebootAnswer) execute((RebootCommand) cmd);
- answer.setBytesSent(bytesSent);
- answer.setBytesReceived(bytesRcvd);
if (answer.getResult()) {
String connectResult = connect(cmd.getVmName(), cmd.getPrivateIpAddress());
@@ -2124,7 +2104,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
if (vmMo != null) {
try {
vmMo.rebootGuest();
- return new RebootAnswer(cmd, "reboot succeeded", null, null);
+ return new RebootAnswer(cmd, "reboot succeeded", true);
} catch(ToolsUnavailable e) {
s_logger.warn("VMware tools is not installed at guest OS, we will perform hard reset for reboot");
} catch(Exception e) {
@@ -2133,16 +2113,16 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
// continue to try with hard-reset
if (vmMo.reset()) {
- return new RebootAnswer(cmd, "reboot succeeded", null, null);
+ return new RebootAnswer(cmd, "reboot succeeded", true);
}
String msg = "Reboot failed in vSphere. vm: " + cmd.getVmName();
s_logger.warn(msg);
- return new RebootAnswer(cmd, msg);
+ return new RebootAnswer(cmd, msg, false);
} else {
String msg = "Unable to find the VM in vSphere to reboot. vm: " + cmd.getVmName();
s_logger.warn(msg);
- return new RebootAnswer(cmd, msg);
+ return new RebootAnswer(cmd, msg, false);
}
} catch (Exception e) {
if (e instanceof RemoteException) {
@@ -2152,7 +2132,7 @@ public class VmwareResource implements StoragePoolResource, ServerResource, Vmwa
String msg = "RebootCommand failed due to " + VmwareHelper.getExceptionMessage(e);
s_logger.error(msg);
- return new RebootAnswer(cmd, msg);
+ return new RebootAnswer(cmd, msg, false);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
index c81d461..19cb796 100644
--- a/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xen/src/com/cloud/hypervisor/xen/resource/CitrixResourceBase.java
@@ -201,7 +201,6 @@ import com.cloud.utils.net.NetUtils;
import com.cloud.vm.DiskProfile;
import com.cloud.vm.VirtualMachine;
import com.cloud.vm.VirtualMachine.State;
-import com.cloud.vm.VirtualMachineName;
import com.trilead.ssh2.SCPClient;
import com.xensource.xenapi.Bond;
import com.xensource.xenapi.Connection;
@@ -2823,10 +2822,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
vms = VM.getByNameLabel(conn, cmd.getVmName());
} catch (XenAPIException e0) {
s_logger.debug("getByNameLabel failed " + e0.toString());
- return new RebootAnswer(cmd, "getByNameLabel failed " + e0.toString());
+ return new RebootAnswer(cmd, "getByNameLabel failed " + e0.toString(), false);
} catch (Exception e0) {
s_logger.debug("getByNameLabel failed " + e0.getMessage());
- return new RebootAnswer(cmd, "getByNameLabel failed");
+ return new RebootAnswer(cmd, "getByNameLabel failed", false);
}
for (VM vm : vms) {
try {
@@ -2834,10 +2833,10 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} catch (Exception e) {
String msg = e.toString();
s_logger.warn(msg, e);
- return new RebootAnswer(cmd, msg);
+ return new RebootAnswer(cmd, msg, false);
}
}
- return new RebootAnswer(cmd, "reboot succeeded", null, null);
+ return new RebootAnswer(cmd, "reboot succeeded", true);
} finally {
synchronized (_cluster.intern()) {
s_vms.put(_cluster, _name, cmd.getVmName(), State.Running);
@@ -2848,16 +2847,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
protected Answer execute(RebootRouterCommand cmd) {
Connection conn = getConnection();
- Long bytesSent = 0L;
- Long bytesRcvd = 0L;
- if (VirtualMachineName.isValidRouterName(cmd.getVmName())) {
- long[] stats = getNetworkStats(conn, cmd.getPrivateIpAddress());
- bytesSent = stats[0];
- bytesRcvd = stats[1];
- }
RebootAnswer answer = execute((RebootCommand) cmd);
- answer.setBytesSent(bytesSent);
- answer.setBytesReceived(bytesRcvd);
if (answer.getResult()) {
String cnct = connect(conn, cmd.getVmName(), cmd.getPrivateIpAddress());
networkUsage(conn, cmd.getPrivateIpAddress(), "create", null);
@@ -3320,23 +3310,21 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
s_logger.info("VM does not exist on XenServer" + _host.uuid);
s_vms.remove(_cluster, _name, vmName);
}
- return new StopAnswer(cmd, "VM does not exist", 0 , 0L, 0L);
+ return new StopAnswer(cmd, "VM does not exist", 0 , true);
}
- Long bytesSent = 0L;
- Long bytesRcvd = 0L;
for (VM vm : vms) {
VM.Record vmr = vm.getRecord(conn);
if (vmr.isControlDomain) {
String msg = "Tring to Shutdown control domain";
s_logger.warn(msg);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
}
if (vmr.powerState == VmPowerState.RUNNING && !isRefNull(vmr.residentOn) && !vmr.residentOn.getUuid(conn).equals(_host.uuid)) {
String msg = "Stop Vm " + vmName + " failed due to this vm is not running on this host: " + _host.uuid + " but host:" + vmr.residentOn.getUuid(conn);
s_logger.warn(msg);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
}
State state = s_vms.getState(_cluster, vmName);
@@ -3350,13 +3338,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (vmr.powerState == VmPowerState.RUNNING) {
/* when stop a vm, set affinity to current xenserver */
vm.setAffinity(conn, vm.getResidentOn(conn));
- if (VirtualMachineName.isValidRouterName(vmName)) {
- if (cmd.getPrivateRouterIpAddress() != null) {
- long[] stats = getNetworkStats(conn, cmd.getPrivateRouterIpAddress());
- bytesSent = stats[0];
- bytesRcvd = stats[1];
- }
- }
+
if (_canBridgeFirewall) {
String result = callHostPlugin(conn, "vmops", "destroy_network_rules_for_vm", "vmName", cmd
.getVmName());
@@ -3371,7 +3353,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} catch (Exception e) {
String msg = "Catch exception " + e.getClass().getName() + " when stop VM:" + cmd.getVmName() + " due to " + e.toString();
s_logger.debug(msg);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
} finally {
try {
@@ -3396,7 +3378,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
disableVlanNetwork(conn, network);
}
}
- return new StopAnswer(cmd, "Stop VM " + vmName + " Succeed", 0, bytesSent, bytesRcvd);
+ return new StopAnswer(cmd, "Stop VM " + vmName + " Succeed", 0, true);
}
} catch (XenAPIException e) {
String msg = "VM destroy failed in Stop " + vmName + " Command due to " + e.toString();
@@ -3416,16 +3398,16 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
} catch (XenAPIException e) {
String msg = "Stop Vm " + vmName + " fail due to " + e.toString();
s_logger.warn(msg, e);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
} catch (XmlRpcException e) {
String msg = "Stop Vm " + vmName + " fail due to " + e.getMessage();
s_logger.warn(msg, e);
- return new StopAnswer(cmd, msg);
+ return new StopAnswer(cmd, msg, false);
} catch (Exception e) {
s_logger.warn("Unable to stop " + vmName + " due to ", e);
return new StopAnswer(cmd, e);
}
- return new StopAnswer(cmd, "Stop VM failed");
+ return new StopAnswer(cmd, "Stop VM failed", false);
}
private List<VDI> getVdis(Connection conn, VM vm) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
index 8d1963d..272c357 100644
--- a/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
+++ b/plugins/network-elements/elastic-loadbalancer/src/com/cloud/network/lb/ElasticLoadBalancerManagerImpl.java
@@ -996,4 +996,9 @@ public class ElasticLoadBalancerManagerImpl implements
// TODO Auto-generated method stub
return false;
}
+
+ @Override
+ public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile) {
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/baremetal/BareMetalResourceBase.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/baremetal/BareMetalResourceBase.java b/server/src/com/cloud/baremetal/BareMetalResourceBase.java
index 4835bd4..24f8002 100755
--- a/server/src/com/cloud/baremetal/BareMetalResourceBase.java
+++ b/server/src/com/cloud/baremetal/BareMetalResourceBase.java
@@ -428,10 +428,10 @@ public class BareMetalResourceBase implements ServerResource {
protected RebootAnswer execute(final RebootCommand cmd) {
if (!doScript(_rebootCommand)) {
- return new RebootAnswer(cmd, "IPMI reboot failed");
+ return new RebootAnswer(cmd, "IPMI reboot failed", false);
}
- return new RebootAnswer(cmd, "reboot succeeded", null, null);
+ return new RebootAnswer(cmd, "reboot succeeded", true);
}
protected StopAnswer execute(final StopCommand cmd) {
@@ -466,7 +466,7 @@ public class BareMetalResourceBase implements ServerResource {
count++;
}
- return success ? new StopAnswer(cmd, "Success", null, Long.valueOf(0), Long.valueOf(0)) : new StopAnswer(cmd, "IPMI power off failed");
+ return success ? new StopAnswer(cmd, "Success", null, true) : new StopAnswer(cmd, "IPMI power off failed", false);
}
protected StartAnswer execute(StartCommand cmd) {
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
index 6d20fb2..a7e457c 100755
--- a/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
+++ b/server/src/com/cloud/consoleproxy/AgentBasedConsoleProxyManager.java
@@ -353,4 +353,8 @@ public class AgentBasedConsoleProxyManager implements ConsoleProxyManager, Virtu
// TODO Auto-generated method stub
return false;
}
+
+ @Override
+ public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
index ec4f685..7101375 100755
--- a/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
+++ b/server/src/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java
@@ -2014,4 +2014,8 @@ public class ConsoleProxyManagerImpl implements ConsoleProxyManager, ConsoleProx
// TODO Auto-generated method stub
return false;
}
+
+ @Override
+ public void prepareStop(VirtualMachineProfile<ConsoleProxyVO> profile) {
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 766c769..82f7231 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -506,34 +506,13 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
txn.start();
final UserStatisticsVO userStats = _userStatsDao.lock(router.getAccountId(), router.getDataCenterIdToDeployIn(), router.getNetworkId(), null, router.getId(), router.getType().toString());
if (userStats != null) {
- final RebootAnswer sa = (RebootAnswer) answer;
- final Long received = sa.getBytesReceived();
- long netBytes = 0;
- if (received != null) {
- if (received.longValue() >= userStats.getCurrentBytesReceived()) {
- netBytes = received.longValue();
- } else {
- netBytes = userStats.getCurrentBytesReceived() + received;
- }
- } else {
- netBytes = userStats.getCurrentBytesReceived();
- }
+ final long currentBytesRcvd = userStats.getCurrentBytesReceived();
userStats.setCurrentBytesReceived(0);
- userStats.setNetBytesReceived(userStats.getNetBytesReceived() + netBytes);
-
- final Long sent = sa.getBytesSent();
+ userStats.setNetBytesReceived(userStats.getNetBytesReceived() + currentBytesRcvd);
- if (sent != null) {
- if (sent.longValue() >= userStats.getCurrentBytesSent()) {
- netBytes = sent.longValue();
- } else {
- netBytes = userStats.getCurrentBytesSent() + sent;
- }
- } else {
- netBytes = userStats.getCurrentBytesSent();
- }
- userStats.setNetBytesSent(userStats.getNetBytesSent() + netBytes);
+ final long currentBytesSent = userStats.getCurrentBytesSent();
userStats.setCurrentBytesSent(0);
+ userStats.setNetBytesSent(userStats.getNetBytesSent() + currentBytesSent);
_userStatsDao.update(userStats.getId(), userStats);
s_logger.debug("Successfully updated user statistics as a part of domR " + router + " reboot/stop");
} else {
@@ -542,7 +521,7 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
txn.commit();
} catch (final Exception e) {
txn.rollback();
- throw new CloudRuntimeException("Problem getting stats after reboot/stop ", e);
+ throw new CloudRuntimeException("Problem updating stats after reboot/stop ", e);
}
}
@@ -2985,4 +2964,99 @@ public class VirtualNetworkApplianceManagerImpl implements VirtualNetworkApplian
return false;
}
+
+ @Override
+ public void prepareStop(VirtualMachineProfile<DomainRouterVO> profile){
+ //Collect network usage before stopping Vm
+ VMInstanceVO vm = profile.getVirtualMachine();
+ DomainRouterVO router = _routerDao.findById(vm.getId());
+ if(router == null){
+ return;
+ }
+ /*String privateIP = router.getPrivateIpAddress();
+
+ if (privateIP != null) {
+ List<Long> routerGuestNtwkIds = _routerDao.getRouterNetworks(router.getId());
+
+ for (Long guestNtwkId : routerGuestNtwkIds) {
+ boolean forVpc = router.getVpcId() != null;
+ Network guestNtwk = _networkMgr.getNetwork(guestNtwkId);
+ Nic guestNic = _nicDao.findByInstanceIdAndNetworkId(guestNtwk.getId(), router.getId());
+ NicProfile guestNicProfile = new NicProfile(guestNic, guestNtwk, guestNic.getBroadcastUri(),
+ guestNic.getIsolationUri(), _networkMgr.getNetworkRate(guestNtwk.getId(), router.getId()),
+ _networkMgr.isSecurityGroupSupportedInNetwork(guestNtwk),
+ _networkMgr.getNetworkTag(router.getHypervisorType(), guestNtwk));
+ final NetworkUsageCommand usageCmd = new NetworkUsageCommand(privateIP, router.getHostName(),
+ forVpc, _itMgr.toNicTO(guestNicProfile, router.getHypervisorType()));
+ UserStatisticsVO previousStats = _statsDao.findBy(router.getAccountId(),
+ router.getDataCenterIdToDeployIn(), guestNtwkId, null, router.getId(), router.getType().toString());
+ NetworkUsageAnswer answer = null;
+ try {
+ answer = (NetworkUsageAnswer) _agentMgr.easySend(router.getHostId(), usageCmd);
+ } catch (Exception e) {
+ s_logger.warn("Error while collecting network stats from router: "+router.getInstanceName()+" from host: "+router.getHostId(), e);
+ continue;
+ }
+
+ if (answer != null) {
+ if (!answer.getResult()) {
+ s_logger.warn("Error while collecting network stats from router: "+router.getInstanceName()+" from host: "+router.getHostId() + "; details: " + answer.getDetails());
+ continue;
+ }
+ Transaction txn = Transaction.open(Transaction.CLOUD_DB);
+ try {
+ if ((answer.getBytesReceived() == 0) && (answer.getBytesSent() == 0)) {
+ s_logger.debug("Recieved and Sent bytes are both 0. Not updating user_statistics");
+ continue;
+ }
+ txn.start();
+ UserStatisticsVO stats = _statsDao.lock(router.getAccountId(),
+ router.getDataCenterIdToDeployIn(), guestNtwkId, null, router.getId(), router.getType().toString());
+ if (stats == null) {
+ s_logger.warn("unable to find stats for account: " + router.getAccountId());
+ continue;
+ }
+
+ if(previousStats != null
+ && ((previousStats.getCurrentBytesReceived() != stats.getCurrentBytesReceived())
+ || (previousStats.getCurrentBytesSent() != stats.getCurrentBytesSent()))){
+ s_logger.debug("Router stats changed from the time NetworkUsageCommand was sent. " +
+ "Ignoring current answer. Router: "+answer.getRouterName()+" Rcvd: " +
+ answer.getBytesReceived()+ "Sent: " +answer.getBytesSent());
+ continue;
+ }
+
+ if (stats.getCurrentBytesReceived() > answer.getBytesReceived()) {
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Received # of bytes that's less than the last one. " +
+ "Assuming something went wrong and persisting it. Router: " +
+ answer.getRouterName()+" Reported: " + answer.getBytesReceived()
+ + " Stored: " + stats.getCurrentBytesReceived());
+ }
+ stats.setNetBytesReceived(stats.getNetBytesReceived() + stats.getCurrentBytesReceived());
+ }
+ stats.setCurrentBytesReceived(answer.getBytesReceived());
+ if (stats.getCurrentBytesSent() > answer.getBytesSent()) {
+ if (s_logger.isDebugEnabled()) {
+ s_logger.debug("Received # of bytes that's less than the last one. " +
+ "Assuming something went wrong and persisting it. Router: " +
+ answer.getRouterName()+" Reported: " + answer.getBytesSent()
+ + " Stored: " + stats.getCurrentBytesSent());
+ }
+ stats.setNetBytesSent(stats.getNetBytesSent() + stats.getCurrentBytesSent());
+ }
+ stats.setCurrentBytesSent(answer.getBytesSent());
+ _statsDao.update(stats.getId(), stats);
+ txn.commit();
+ } catch (Exception e) {
+ txn.rollback();
+ s_logger.warn("Unable to update user statistics for account: " + router.getAccountId()
+ + " Rx: " + answer.getBytesReceived() + "; Tx: " + answer.getBytesSent());
+ } finally {
+ txn.close();
+ }
+ }
+ }
+ }*/
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
index 1121bb1..3ef055d 100755
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
+++ b/server/src/com/cloud/storage/secondary/SecondaryStorageManagerImpl.java
@@ -1457,5 +1457,10 @@ public class SecondaryStorageManagerImpl implements SecondaryStorageVmManager, V
Commands cmds, ReservationContext context) {
// TODO Auto-generated method stub
return false;
+ }
+
+ @Override
+ public void prepareStop(VirtualMachineProfile<SecondaryStorageVmVO> profile) {
+
}
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/vm/UserVmManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/UserVmManagerImpl.java b/server/src/com/cloud/vm/UserVmManagerImpl.java
index 649e215..b221ef1 100755
--- a/server/src/com/cloud/vm/UserVmManagerImpl.java
+++ b/server/src/com/cloud/vm/UserVmManagerImpl.java
@@ -3630,5 +3630,8 @@ public class UserVmManagerImpl implements UserVmManager, UserVmService, Manager
return vm;
}
+ @Override
+ public void prepareStop(VirtualMachineProfile<UserVmVO> profile) {
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/vm/VirtualMachineGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineGuru.java b/server/src/com/cloud/vm/VirtualMachineGuru.java
index b92982c..26c3944 100644
--- a/server/src/com/cloud/vm/VirtualMachineGuru.java
+++ b/server/src/com/cloud/vm/VirtualMachineGuru.java
@@ -74,4 +74,11 @@ public interface VirtualMachineGuru<T extends VirtualMachine> {
* @return id if the handler works for this vm and can parse id. null if not.
*/
Long convertToId(String vmName);
+
+ /**
+ * Prepare Vm for Stop
+ * @param profile
+ * @return
+ */
+ void prepareStop(VirtualMachineProfile<T> profile);
}
http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/468f2720/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
index ac8fd2a..3f7cab9 100755
--- a/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
+++ b/server/src/com/cloud/vm/VirtualMachineManagerImpl.java
@@ -1070,11 +1070,10 @@ public class VirtualMachineManagerImpl implements VirtualMachineManager, Listene
if (vm.getState() != State.Stopping) {
throw new CloudRuntimeException("We cannot proceed with stop VM " + vm + " since it is not in 'Stopping' state, current state: " + vm.getState());
}
- String routerPrivateIp = null;
- if (vm.getType() == VirtualMachine.Type.DomainRouter) {
- routerPrivateIp = vm.getPrivateIpAddress();
- }
- StopCommand stop = new StopCommand(vm, vm.getInstanceName(), null, routerPrivateIp);
+
+ vmGuru.prepareStop(profile);
+
+ StopCommand stop = new StopCommand(vm, vm.getInstanceName(), null);
boolean stopped = false;
StopAnswer answer = null;
try {