forked from uncloud/uncloud
Destination Host of VM during migration now notify Source host of exact socket path
This commit is contained in:
parent
f980cdb464
commit
29e938dc74
4 changed files with 17 additions and 8 deletions
|
@ -19,6 +19,7 @@ class RequestType:
|
|||
class RequestEntry(SpecificEtcdEntryBase):
|
||||
|
||||
def __init__(self, e):
|
||||
self.destination_sock_path = None
|
||||
self.destination_host_key = None
|
||||
self.type = None # type: str
|
||||
self.migration = None # type: bool
|
||||
|
|
|
@ -76,7 +76,8 @@ def main(hostname):
|
|||
elif request_event.type == RequestType.TransferVM:
|
||||
host = host_pool.get(request_event.destination_host_key)
|
||||
if host:
|
||||
vm.migrate(destination=host.hostname)
|
||||
vm.migrate(destination_host=host.hostname,
|
||||
destination_sock_path=request_event.destination_sock_path)
|
||||
else:
|
||||
logger.error('Host %s not found!', request_event.destination_host_key)
|
||||
else:
|
||||
|
|
|
@ -78,6 +78,7 @@ class VM:
|
|||
type=RequestType.TransferVM, # Transfer VM
|
||||
hostname=self.host_key, # Which VM should get this request. It is source host
|
||||
uuid=self.uuid, # uuid of VM
|
||||
destination_sock_path=join_path(self.vmm.socket_dir, self.uuid),
|
||||
destination_host_key=destination_host_key, # Where source host transfer VM
|
||||
request_prefix=settings['etcd']['request_prefix']
|
||||
)
|
||||
|
@ -94,8 +95,9 @@ class VM:
|
|||
declare_stopped(self.vm)
|
||||
self.sync()
|
||||
|
||||
def migrate(self, destination):
|
||||
self.vmm.transfer(src_uuid=self.uuid, dest_uuid=self.uuid, host=destination)
|
||||
def migrate(self, destination_host, destination_sock_path):
|
||||
self.vmm.transfer(src_uuid=self.uuid, destination_sock_path=destination_sock_path,
|
||||
host=destination_host)
|
||||
|
||||
def create_network_dev(self):
|
||||
command = ''
|
||||
|
|
|
@ -42,12 +42,11 @@ class VMQMPHandles:
|
|||
|
||||
|
||||
class TransferVM(Process):
|
||||
def __init__(self, src_uuid, dest_uuid, host, socket_dir):
|
||||
def __init__(self, src_uuid, dest_sock_path, host, socket_dir):
|
||||
self.src_uuid = src_uuid
|
||||
self.dest_uuid = dest_uuid
|
||||
self.host = host
|
||||
self.src_sock_path = os.path.join(socket_dir, self.src_uuid)
|
||||
self.dest_sock_path = os.path.join(socket_dir, self.dest_uuid)
|
||||
self.dest_sock_path = dest_sock_path
|
||||
|
||||
super().__init__()
|
||||
|
||||
|
@ -203,6 +202,12 @@ class VMM:
|
|||
return output['return']['service']
|
||||
return None
|
||||
|
||||
def transfer(self, src_uuid, dest_uuid, host):
|
||||
p = TransferVM(src_uuid, dest_uuid, socket_dir=self.socket_dir, host=host)
|
||||
def transfer(self, src_uuid, destination_sock_path, host):
|
||||
p = TransferVM(src_uuid, destination_sock_path, socket_dir=self.socket_dir, host=host)
|
||||
p.start()
|
||||
|
||||
# TODO: the following method should clean things that went wrong
|
||||
# e.g If VM migration fails or didn't start for long time
|
||||
# i.e 15 minutes we should stop the waiting VM.
|
||||
def maintenace(self):
|
||||
pass
|
Loading…
Reference in a new issue