From: Guido Trotter Date: Wed, 21 Jan 2009 10:03:01 +0000 (+0000) Subject: Implement the new live migration backend functions X-Git-Tag: v2.0.0beta1~26 X-Git-Url: https://code.grnet.gr/git/ganeti-local/commitdiff_plain/cd42d0ade48164a80954403fb47e358932724a4d Implement the new live migration backend functions MigrationInfo, AcceptInstance and AbortMigration are implemented as hypervisor specific functions, and by default they do nothing (as they're not always necessary). This patch also converts hv_base.MigrateInstance docstring to epydoc, adds a missing @type to the GetInstanceInfo docstring, and removes an unneeded empty line. Reviewed-by: iustinp --- diff --git a/lib/backend.py b/lib/backend.py index 6147a46..a1bc244 100644 --- a/lib/backend.py +++ b/lib/backend.py @@ -980,7 +980,14 @@ def MigrationInfo(instance): @param instance: the instance definition """ - return (True, '') + hyper = hypervisor.GetHypervisor(instance.hypervisor) + try: + info = hyper.MigrationInfo(instance) + except errors.HypervisorError, err: + msg = "Failed to fetch migration information" + logging.exception(msg) + return (False, '%s: %s' % (msg, err)) + return (True, info) def AcceptInstance(instance, info, target): @@ -994,6 +1001,13 @@ def AcceptInstance(instance, info, target): @param target: target host (usually ip), on this node """ + hyper = hypervisor.GetHypervisor(instance.hypervisor) + try: + hyper.AcceptInstance(instance, info, target) + except errors.HypervisorError, err: + msg = "Failed to accept instance" + logging.exception(msg) + return (False, '%s: %s' % (msg, err)) return (True, "Accept successfull") @@ -1008,6 +1022,13 @@ def FinalizeMigration(instance, info, success): @param success: whether the migration was a success or a failure """ + hyper = hypervisor.GetHypervisor(instance.hypervisor) + try: + hyper.FinalizeMigration(instance, info, success) + except errors.HypervisorError, err: + msg = "Failed to finalize migration" + logging.exception(msg) + return (False, '%s: %s' % (msg, err)) return (True, "Migration Finalized") diff --git a/lib/hypervisor/hv_base.py b/lib/hypervisor/hv_base.py index 0962004..ebae830 100644 --- a/lib/hypervisor/hv_base.py +++ b/lib/hypervisor/hv_base.py @@ -57,6 +57,7 @@ class BaseHypervisor(object): def GetInstanceInfo(self, instance_name): """Get instance properties. + @type instance_name: string @param instance_name: the instance name @return: tuple (name, id, memory, vcpus, state, times) @@ -96,20 +97,63 @@ class BaseHypervisor(object): """ raise NotImplementedError + def MigrationInfo(self, instance): + """Get instance information to perform a migration. + + By default assume no information is needed. + + @type instance: L{objects.Instance} + @param instance: instance to be migrated + @rtype: string/data (opaque) + @return: instance migration information - serialized form + + """ + return '' + + def AcceptInstance(self, instance, info, target): + """Prepare to accept an instance. + + By default assume no preparation is needed. + + @type instance: L{objects.Instance} + @param instance: instance to be accepted + @type info: string/data (opaque) + @param info: migration information, from the source node + @type target: string + @param target: target host (usually ip), on this node + + """ + pass + + def FinalizeMigration(self, instance, info, success): + """Finalized an instance migration. + + Should finalize or revert any preparation done to accept the instance. + Since by default we do no preparation, we also don't have anything to do + + @type instance: L{objects.Instance} + @param instance: instance whose migration is being aborted + @type info: string/data (opaque) + @param info: migration information, from the source node + @type success: boolean + @param success: whether the migration was a success or a failure + + """ + pass + def MigrateInstance(self, name, target, live): """Migrate an instance. - Arguments: - - name: the name of the instance - - target: the target of the migration (usually will be IP and not name) - - live: whether to do live migration or not - - Returns: none, errors will be signaled by exception. + @type name: string + @param name: name of the instance to be migrated + @type target: string + @param target: hostname (usually ip) of the target node + @type live: boolean + @param live: whether to do a live or non-live migration """ raise NotImplementedError - @classmethod def CheckParameterSyntax(cls, hvparams): """Check the given parameters for validity.