Handle unflushes like flushes squentially
Makes an unflush a controlled event like flushing, rather than a free-for-all. This does slow down unflushing somewhat (disallowing parallelism from multiple hosts to the current host), but allows the locking to actually be effective.
This commit is contained in:
parent
91ea96b772
commit
516ea1b57c
|
@ -140,7 +140,9 @@ class NodeInstance(object):
|
||||||
flush_thread = threading.Thread(target=self.flush, args=(), kwargs={})
|
flush_thread = threading.Thread(target=self.flush, args=(), kwargs={})
|
||||||
flush_thread.start()
|
flush_thread.start()
|
||||||
if self.domain_state == 'unflush' and self.inflush == False:
|
if self.domain_state == 'unflush' and self.inflush == False:
|
||||||
self.unflush()
|
# Do unflushing in a thread so it doesn't block the migrates in
|
||||||
|
flush_thread = threading.Thread(target=self.unflush, args=(), kwargs={})
|
||||||
|
flush_thread.start()
|
||||||
|
|
||||||
@self.zk_conn.DataWatch('/nodes/{}/memfree'.format(self.name))
|
@self.zk_conn.DataWatch('/nodes/{}/memfree'.format(self.name))
|
||||||
def watch_node_memfree(data, stat, event=''):
|
def watch_node_memfree(data, stat, event=''):
|
||||||
|
@ -348,11 +350,8 @@ class NodeInstance(object):
|
||||||
})
|
})
|
||||||
|
|
||||||
# Wait for the VM to migrate so the next VM's free RAM count is accurate (they migrate in serial anyways)
|
# Wait for the VM to migrate so the next VM's free RAM count is accurate (they migrate in serial anyways)
|
||||||
while True:
|
while zkhandler.readdata(self.zk_conn, '/domains/{}/state'.format(dom_uuid)) != 'start':
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
vm_current_state = zkhandler.readdata(self.zk_conn, '/domains/{}/state'.format(dom_uuid))
|
|
||||||
if vm_current_state == "start":
|
|
||||||
break
|
|
||||||
|
|
||||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/runningdomains'.format(self.name): '' })
|
zkhandler.writedata(self.zk_conn, { '/nodes/{}/runningdomains'.format(self.name): '' })
|
||||||
zkhandler.writedata(self.zk_conn, { '/nodes/{}/domainstate'.format(self.name): 'flushed' })
|
zkhandler.writedata(self.zk_conn, { '/nodes/{}/domainstate'.format(self.name): 'flushed' })
|
||||||
|
@ -394,6 +393,10 @@ class NodeInstance(object):
|
||||||
'/domains/{}/lastnode'.format(dom_uuid): ''
|
'/domains/{}/lastnode'.format(dom_uuid): ''
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# Wait for the VM to migrate back
|
||||||
|
while zkhandler.readdata(self.zk_conn, '/domains/{}/state'.format(dom_uuid)) != 'start':
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
self.inflush = False
|
self.inflush = False
|
||||||
|
|
||||||
# Release the flush lock
|
# Release the flush lock
|
||||||
|
|
Loading…
Reference in New Issue