
On Fri, Sep 18, 2015 at 18:05:49 +0300, Nikolay Shirokovskiy wrote:
virDomainMigrateUnmanagedParams is not a good candidate for this functionality as it is used by migrate family functions too and its have its own checks that are superset of extracted and we don't need to check twice.
Actually name of the function is slightly misleading as there is also a check for consistensy of flags parameter alone. So it could be refactored further and reused by all migrate functions but for now let it be a matter of a different patchset.
Signed-off-by: Nikolay Shirokovskiy <nshirokovskiy@virtuozzo.com> --- src/libvirt-domain.c | 83 +++++++++++++++++++++++++++----------------------- 1 files changed, 45 insertions(+), 38 deletions(-)
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c index 5c22460..eec45bd 100644 --- a/src/libvirt-domain.c +++ b/src/libvirt-domain.c @@ -4131,6 +4131,39 @@ virDomainMigrate3(virDomainPtr domain, }
+static +int virDomainMigrateUnmanagedCheckCompat(virDomainPtr domain, + unsigned int flags) +{ + int feat; + + VIR_EXCLUSIVE_FLAGS_RET(VIR_MIGRATE_NON_SHARED_DISK, + VIR_MIGRATE_NON_SHARED_INC, + -1); + + if (flags & VIR_MIGRATE_OFFLINE && + !VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, + VIR_DRV_FEATURE_MIGRATION_OFFLINE)) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("offline migration is not supported by " + "the source host")); + return -1; + } + + if (flags & VIR_MIGRATE_PEER2PEER) + feat = VIR_DRV_FEATURE_MIGRATION_P2P; + else + feat = VIR_DRV_FEATURE_MIGRATION_DIRECT; + + if (!VIR_DRV_SUPPORTS_FEATURE(domain->conn->driver, domain->conn, feat)) { + virReportUnsupportedError();
Use virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, ...), virReportUnsupportedError is for unsupported APIs while VIR_ERR_ARGUMENT_UNSUPPORTED says the API is supported but some of its arguments are not. While at it, I think it's better to keep the code a bit verbose and separate checks for p2p and direct migration to be able to provide a usable error message. Jirka