Use event to non-block wait and fix inf wait
This commit is contained in:
parent
febef2e406
commit
c2c888d684
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from threading import Thread
|
from threading import Thread, Event
|
||||||
|
|
||||||
import daemon_lib.common as common
|
import daemon_lib.common as common
|
||||||
|
|
||||||
|
@ -86,6 +86,7 @@ class NodeInstance(object):
|
||||||
self.storage_cidrnetmask = None
|
self.storage_cidrnetmask = None
|
||||||
# Threads
|
# Threads
|
||||||
self.flush_thread = None
|
self.flush_thread = None
|
||||||
|
self.flush_event = Event()
|
||||||
# Flags
|
# Flags
|
||||||
self.flush_stopper = False
|
self.flush_stopper = False
|
||||||
|
|
||||||
|
@ -159,8 +160,8 @@ class NodeInstance(object):
|
||||||
if self.flush_thread is not None:
|
if self.flush_thread is not None:
|
||||||
self.logger.out('Waiting for previous migration to complete'.format(self.name), state='i')
|
self.logger.out('Waiting for previous migration to complete'.format(self.name), state='i')
|
||||||
self.flush_stopper = True
|
self.flush_stopper = True
|
||||||
while self.flush_stopper:
|
self.flush_event.wait()
|
||||||
time.sleep(0.1)
|
self.flush_event.clear()
|
||||||
|
|
||||||
# Do flushing in a thread so it doesn't block the migrates out
|
# Do flushing in a thread so it doesn't block the migrates out
|
||||||
if self.domain_state == 'flush':
|
if self.domain_state == 'flush':
|
||||||
|
@ -679,6 +680,7 @@ class NodeInstance(object):
|
||||||
# Allow us to cancel the operation
|
# Allow us to cancel the operation
|
||||||
if self.flush_stopper:
|
if self.flush_stopper:
|
||||||
self.logger.out('Aborting node flush'.format(self.name), state='i')
|
self.logger.out('Aborting node flush'.format(self.name), state='i')
|
||||||
|
self.flush_event.set()
|
||||||
self.flush_thread = None
|
self.flush_thread = None
|
||||||
self.flush_stopper = False
|
self.flush_stopper = False
|
||||||
return
|
return
|
||||||
|
@ -711,6 +713,7 @@ 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)
|
||||||
ticks = 0
|
ticks = 0
|
||||||
|
self.logger.out('Waiting for migration of VM "{}"'.format(dom_uuid), state='i')
|
||||||
while self.zkhandler.read(('domain.state', dom_uuid)) in ['migrate', 'unmigrate', 'shutdown']:
|
while self.zkhandler.read(('domain.state', dom_uuid)) in ['migrate', 'unmigrate', 'shutdown']:
|
||||||
ticks += 1
|
ticks += 1
|
||||||
if ticks > 600:
|
if ticks > 600:
|
||||||
|
@ -733,6 +736,7 @@ class NodeInstance(object):
|
||||||
# Allow us to cancel the operation
|
# Allow us to cancel the operation
|
||||||
if self.flush_stopper:
|
if self.flush_stopper:
|
||||||
self.logger.out('Aborting node unflush'.format(self.name), state='i')
|
self.logger.out('Aborting node unflush'.format(self.name), state='i')
|
||||||
|
self.flush_event.set()
|
||||||
self.flush_thread = None
|
self.flush_thread = None
|
||||||
self.flush_stopper = False
|
self.flush_stopper = False
|
||||||
return
|
return
|
||||||
|
@ -766,8 +770,14 @@ class NodeInstance(object):
|
||||||
])
|
])
|
||||||
|
|
||||||
# Wait for the VM to migrate back
|
# Wait for the VM to migrate back
|
||||||
|
ticks = 0
|
||||||
|
self.logger.out('Waiting for migration of VM "{}"'.format(dom_uuid), state='i')
|
||||||
while self.zkhandler.read(('domain.state', dom_uuid)) in ['migrate', 'unmigrate', 'shutdown']:
|
while self.zkhandler.read(('domain.state', dom_uuid)) in ['migrate', 'unmigrate', 'shutdown']:
|
||||||
time.sleep(0.1)
|
ticks += 1
|
||||||
|
if ticks > 600:
|
||||||
|
# Abort if we've waited for 120 seconds, the VM is messed and just continue
|
||||||
|
break
|
||||||
|
time.sleep(0.2)
|
||||||
|
|
||||||
self.zkhandler.write([
|
self.zkhandler.write([
|
||||||
(('node.state.domain', self.name), 'ready')
|
(('node.state.domain', self.name), 'ready')
|
||||||
|
|
Loading…
Reference in New Issue