You are viewing a plain text version of this content. The canonical link for it is here.
Posted to tashi-commits@incubator.apache.org by st...@apache.org on 2012/05/14 17:31:46 UTC
svn commit: r1338303 - in /incubator/tashi/trunk/src/tashi:
agents/primitive.py clustermanager/clustermanagerservice.py
nodemanager/nodemanagerservice.py nodemanager/vmcontrol/qemu.py
Author: stroucki
Date: Mon May 14 17:31:45 2012
New Revision: 1338303
URL: http://svn.apache.org/viewvc?rev=1338303&view=rev
Log:
clustermanagerservice, qemu, nodemanagerservice, primitive: mark out plan to avoid overscheduling on a host due to old state information
Modified:
incubator/tashi/trunk/src/tashi/agents/primitive.py
incubator/tashi/trunk/src/tashi/clustermanager/clustermanagerservice.py
incubator/tashi/trunk/src/tashi/nodemanager/nodemanagerservice.py
incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py
Modified: incubator/tashi/trunk/src/tashi/agents/primitive.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/agents/primitive.py?rev=1338303&r1=1338302&r2=1338303&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/agents/primitive.py (original)
+++ incubator/tashi/trunk/src/tashi/agents/primitive.py Mon May 14 17:31:45 2012
@@ -76,8 +76,9 @@ class Primitive(object):
# XXXstroucki put held machines behind pending ones
heldInstances = []
for i in instances.itervalues():
+ # Nonrunning VMs will have hostId of None, but
+ # so will Suspended VMs.
if (i.hostId or i.state == InstanceState.Pending):
- # Nonrunning VMs will have hostId of None
load[i.hostId] = load[i.hostId] + [i.id]
elif (i.hostId is None and i.state == InstanceState.Held):
heldInstances = heldInstances + [i.id]
@@ -245,8 +246,21 @@ class Primitive(object):
def start(self):
oldInstances = {}
+ # XXXstroucki: scheduling races have been observed, where
+ # a vm is scheduled on a host that had not updated its
+ # capacity with the clustermanager, leading to overloaded
+ # hosts. I think the place to insure against this happening
+ # is in the nodemanager. This scheduler will keep an
+ # internal state of cluster loading, but that is best
+ # effort and will be refreshed from CM once the buffer
+ # of vms to be scheduled is exhausted.
+
while True:
try:
+ # XXXstroucki: to get a list of vms to be
+ # scheduled, it asks the CM for a full
+ # cluster state, and will look at those
+ # without a host.
self.__getState()
# Check for VMs that have exited and call
Modified: incubator/tashi/trunk/src/tashi/clustermanager/clustermanagerservice.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/clustermanager/clustermanagerservice.py?rev=1338303&r1=1338302&r2=1338303&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/clustermanager/clustermanagerservice.py (original)
+++ incubator/tashi/trunk/src/tashi/clustermanager/clustermanagerservice.py Mon May 14 17:31:45 2012
@@ -675,6 +675,9 @@ class ClusterManagerService(object):
return "success"
def activateVm(self, instanceId, host):
+ # XXXstroucki: check my idea of the host's capacity before
+ # trying.
+
dataHost = self.data.acquireHost(host.id)
if (dataHost.name != host.name):
Modified: incubator/tashi/trunk/src/tashi/nodemanager/nodemanagerservice.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/nodemanager/nodemanagerservice.py?rev=1338303&r1=1338302&r2=1338303&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/nodemanager/nodemanagerservice.py (original)
+++ incubator/tashi/trunk/src/tashi/nodemanager/nodemanagerservice.py Mon May 14 17:31:45 2012
@@ -286,6 +286,8 @@ class NodeManagerService(object):
# remote
def instantiateVm(self, instance):
+ # XXXstroucki: check my capacity before instantiating
+
self.__ACCOUNT("NM VM INSTANTIATE", instance=instance)
try:
vmId = self.vmm.instantiateVm(instance)
Modified: incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py
URL: http://svn.apache.org/viewvc/incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py?rev=1338303&r1=1338302&r2=1338303&view=diff
==============================================================================
--- incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py (original)
+++ incubator/tashi/trunk/src/tashi/nodemanager/vmcontrol/qemu.py Mon May 14 17:31:45 2012
@@ -653,6 +653,8 @@ class Qemu(VmControlInterface):
# extern
def instantiateVm(self, instance):
+ # XXXstroucki: check capacity before instantiating
+
try:
(vmId, cmd) = self.__startVm(instance, None)
child = self.__getChildFromPid(vmId)