mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-25 07:05:28 +00:00
Fix migration in text mode and shared storage migration in json mode
The patches for shared storage migration were not correctly written for json mode. Thus the 'blk' and 'inc' parameters were never being set. In addition they didn't set the QEMU_MONITOR_MIGRATE_BACKGROUND so migration was synchronous. Due to multiple bugs in QEMU's JSON impl this wasn't noticed because it treated the sync migration requst as asynchronous anyway. Finally 'background' parameter was converted to take arbitrary flags but not renamed, and not all uses were changed to unsigned int. * src/qemu/qemu_driver.c: Set QEMU_MONITOR_MIGRATE_BACKGROUND in doNativeMigrate * src/qemu/qemu_monitor_json.c: Process QEMU_MONITOR_MIGRATE_NON_SHARED_DISK and QEMU_MONITOR_MIGRATE_NON_SHARED_INC flags * src/qemu/qemu_monitor.c, src/qemu/qemu_monitor.h, src/qemu/qemu_monitor_json.h, src/qemu/qemu_monitor_text.c, src/qemu/qemu_monitor_text.h: change 'int background' to 'unsigned int flags' in migration APIs. Add logging of flags parameter
This commit is contained in:
parent
755b53f946
commit
28e96d720b
@ -10590,7 +10590,7 @@ static int doNativeMigrate(struct qemud_driver *driver,
|
||||
int ret = -1;
|
||||
xmlURIPtr uribits = NULL;
|
||||
qemuDomainObjPrivatePtr priv = vm->privateData;
|
||||
unsigned int background_flags = 0;
|
||||
unsigned int background_flags = QEMU_MONITOR_MIGRATE_BACKGROUND;
|
||||
|
||||
/* Issue the migrate command. */
|
||||
if (STRPREFIX(uri, "tcp:") && !STRPREFIX(uri, "tcp://")) {
|
||||
|
@ -1299,13 +1299,13 @@ int qemuMonitorGetMigrationStatus(qemuMonitorPtr mon,
|
||||
|
||||
|
||||
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port)
|
||||
{
|
||||
int ret;
|
||||
DEBUG("mon=%p hostname=%s port=%d",
|
||||
mon, hostname, port);
|
||||
DEBUG("mon=%p hostname=%s port=%d flags=%u",
|
||||
mon, hostname, port, flags);
|
||||
|
||||
if (!mon) {
|
||||
qemuReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
@ -1314,20 +1314,20 @@ int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONMigrateToHost(mon, background, hostname, port);
|
||||
ret = qemuMonitorJSONMigrateToHost(mon, flags, hostname, port);
|
||||
else
|
||||
ret = qemuMonitorTextMigrateToHost(mon, background, hostname, port);
|
||||
ret = qemuMonitorTextMigrateToHost(mon, flags, hostname, port);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv)
|
||||
{
|
||||
int ret;
|
||||
DEBUG("mon=%p argv=%p",
|
||||
mon, argv);
|
||||
DEBUG("mon=%p argv=%p flags=%u",
|
||||
mon, argv, flags);
|
||||
|
||||
if (!mon) {
|
||||
qemuReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
@ -1336,21 +1336,21 @@ int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONMigrateToCommand(mon, background, argv);
|
||||
ret = qemuMonitorJSONMigrateToCommand(mon, flags, argv);
|
||||
else
|
||||
ret = qemuMonitorTextMigrateToCommand(mon, background, argv);
|
||||
ret = qemuMonitorTextMigrateToCommand(mon, flags, argv);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset)
|
||||
{
|
||||
int ret;
|
||||
DEBUG("mon=%p argv=%p target=%s offset=%llu",
|
||||
mon, argv, target, offset);
|
||||
DEBUG("mon=%p argv=%p target=%s offset=%llu flags=%u",
|
||||
mon, argv, target, offset, flags);
|
||||
|
||||
if (!mon) {
|
||||
qemuReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
@ -1366,19 +1366,19 @@ int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONMigrateToFile(mon, background, argv, target, offset);
|
||||
ret = qemuMonitorJSONMigrateToFile(mon, flags, argv, target, offset);
|
||||
else
|
||||
ret = qemuMonitorTextMigrateToFile(mon, background, argv, target, offset);
|
||||
ret = qemuMonitorTextMigrateToFile(mon, flags, argv, target, offset);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile)
|
||||
{
|
||||
int ret;
|
||||
DEBUG("mon=%p, unixfile=%s",
|
||||
mon, unixfile);
|
||||
DEBUG("mon=%p, unixfile=%s flags=%u",
|
||||
mon, unixfile, flags);
|
||||
|
||||
if (!mon) {
|
||||
qemuReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||
@ -1387,9 +1387,9 @@ int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
|
||||
}
|
||||
|
||||
if (mon->json)
|
||||
ret = qemuMonitorJSONMigrateToUnix(mon, background, unixfile);
|
||||
ret = qemuMonitorJSONMigrateToUnix(mon, flags, unixfile);
|
||||
else
|
||||
ret = qemuMonitorTextMigrateToUnix(mon, background, unixfile);
|
||||
ret = qemuMonitorTextMigrateToUnix(mon, flags, unixfile);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -256,12 +256,12 @@ typedef enum {
|
||||
} QEMU_MONITOR_MIGRATE;
|
||||
|
||||
int qemuMonitorMigrateToHost(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port);
|
||||
|
||||
int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv);
|
||||
|
||||
/* In general, BS is the smallest fundamental block size we can use to
|
||||
@ -276,13 +276,13 @@ int qemuMonitorMigrateToCommand(qemuMonitorPtr mon,
|
||||
# define QEMU_MONITOR_MIGRATE_TO_FILE_TRANSFER_SIZE (1024llu * 1024)
|
||||
|
||||
int qemuMonitorMigrateToFile(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset);
|
||||
|
||||
int qemuMonitorMigrateToUnix(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile);
|
||||
|
||||
int qemuMonitorMigrateCancel(qemuMonitorPtr mon);
|
||||
|
@ -1599,12 +1599,15 @@ int qemuMonitorJSONGetMigrationStatus(qemuMonitorPtr mon,
|
||||
|
||||
|
||||
static int qemuMonitorJSONMigrate(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char *uri)
|
||||
{
|
||||
int ret;
|
||||
virJSONValuePtr cmd = qemuMonitorJSONMakeCommand("migrate",
|
||||
"i:detach", background ? 1 : 0,
|
||||
virJSONValuePtr cmd =
|
||||
qemuMonitorJSONMakeCommand("migrate",
|
||||
"i:detach", flags & QEMU_MONITOR_MIGRATE_BACKGROUND ? 1 : 0,
|
||||
"i:blk", flags & QEMU_MONITOR_MIGRATE_NON_SHARED_DISK ? 1 : 0,
|
||||
"i:inc", flags & QEMU_MONITOR_MIGRATE_NON_SHARED_INC ? 1 : 0,
|
||||
"s:uri", uri,
|
||||
NULL);
|
||||
virJSONValuePtr reply = NULL;
|
||||
@ -1624,7 +1627,7 @@ static int qemuMonitorJSONMigrate(qemuMonitorPtr mon,
|
||||
|
||||
|
||||
int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port)
|
||||
{
|
||||
@ -1636,7 +1639,7 @@ int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = qemuMonitorJSONMigrate(mon, background, uri);
|
||||
ret = qemuMonitorJSONMigrate(mon, flags, uri);
|
||||
|
||||
VIR_FREE(uri);
|
||||
|
||||
@ -1645,7 +1648,7 @@ int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
|
||||
|
||||
|
||||
int qemuMonitorJSONMigrateToCommand(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv)
|
||||
{
|
||||
char *argstr;
|
||||
@ -1663,7 +1666,7 @@ int qemuMonitorJSONMigrateToCommand(qemuMonitorPtr mon,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = qemuMonitorJSONMigrate(mon, background, dest);
|
||||
ret = qemuMonitorJSONMigrate(mon, flags, dest);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(argstr);
|
||||
@ -1672,7 +1675,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int qemuMonitorJSONMigrateToFile(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset)
|
||||
@ -1709,7 +1712,7 @@ int qemuMonitorJSONMigrateToFile(qemuMonitorPtr mon,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = qemuMonitorJSONMigrate(mon, background, dest);
|
||||
ret = qemuMonitorJSONMigrate(mon, flags, dest);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(safe_target);
|
||||
@ -1719,7 +1722,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int qemuMonitorJSONMigrateToUnix(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile)
|
||||
{
|
||||
char *dest = NULL;
|
||||
@ -1730,7 +1733,7 @@ int qemuMonitorJSONMigrateToUnix(qemuMonitorPtr mon,
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = qemuMonitorJSONMigrate(mon, background, dest);
|
||||
ret = qemuMonitorJSONMigrate(mon, flags, dest);
|
||||
|
||||
VIR_FREE(dest);
|
||||
|
||||
|
@ -97,22 +97,22 @@ int qemuMonitorJSONGetMigrationStatus(qemuMonitorPtr mon,
|
||||
unsigned long long *total);
|
||||
|
||||
int qemuMonitorJSONMigrateToHost(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port);
|
||||
|
||||
int qemuMonitorJSONMigrateToCommand(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv);
|
||||
|
||||
int qemuMonitorJSONMigrateToFile(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset);
|
||||
|
||||
int qemuMonitorJSONMigrateToUnix(qemuMonitorPtr mon,
|
||||
int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile);
|
||||
|
||||
int qemuMonitorJSONMigrateCancel(qemuMonitorPtr mon);
|
||||
|
@ -1136,7 +1136,7 @@ cleanup:
|
||||
|
||||
|
||||
static int qemuMonitorTextMigrate(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *dest)
|
||||
{
|
||||
char *cmd = NULL;
|
||||
@ -1151,11 +1151,11 @@ static int qemuMonitorTextMigrate(qemuMonitorPtr mon,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (background & QEMU_MONITOR_MIGRATE_BACKGROUND)
|
||||
if (flags & QEMU_MONITOR_MIGRATE_BACKGROUND)
|
||||
virBufferAddLit(&extra, " -d");
|
||||
if (background & QEMU_MONITOR_MIGRATE_NON_SHARED_DISK)
|
||||
if (flags & QEMU_MONITOR_MIGRATE_NON_SHARED_DISK)
|
||||
virBufferAddLit(&extra, " -b");
|
||||
if (background & QEMU_MONITOR_MIGRATE_NON_SHARED_INC)
|
||||
if (flags & QEMU_MONITOR_MIGRATE_NON_SHARED_INC)
|
||||
virBufferAddLit(&extra, " -i");
|
||||
if (virBufferError(&extra)) {
|
||||
virBufferFreeAndReset(&extra);
|
||||
@ -1202,7 +1202,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port)
|
||||
{
|
||||
@ -1214,7 +1214,7 @@ int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = qemuMonitorTextMigrate(mon, background, uri);
|
||||
ret = qemuMonitorTextMigrate(mon, flags, uri);
|
||||
|
||||
VIR_FREE(uri);
|
||||
|
||||
@ -1223,7 +1223,7 @@ int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
|
||||
|
||||
|
||||
int qemuMonitorTextMigrateToCommand(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv)
|
||||
{
|
||||
char *argstr;
|
||||
@ -1241,7 +1241,7 @@ int qemuMonitorTextMigrateToCommand(qemuMonitorPtr mon,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = qemuMonitorTextMigrate(mon, background, dest);
|
||||
ret = qemuMonitorTextMigrate(mon, flags, dest);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(argstr);
|
||||
@ -1250,7 +1250,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int qemuMonitorTextMigrateToFile(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset)
|
||||
@ -1287,7 +1287,7 @@ int qemuMonitorTextMigrateToFile(qemuMonitorPtr mon,
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
ret = qemuMonitorTextMigrate(mon, background, dest);
|
||||
ret = qemuMonitorTextMigrate(mon, flags, dest);
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(safe_target);
|
||||
@ -1297,7 +1297,7 @@ cleanup:
|
||||
}
|
||||
|
||||
int qemuMonitorTextMigrateToUnix(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile)
|
||||
{
|
||||
char *dest = NULL;
|
||||
@ -1308,7 +1308,7 @@ int qemuMonitorTextMigrateToUnix(qemuMonitorPtr mon,
|
||||
return -1;
|
||||
}
|
||||
|
||||
ret = qemuMonitorTextMigrate(mon, background, dest);
|
||||
ret = qemuMonitorTextMigrate(mon, flags, dest);
|
||||
|
||||
VIR_FREE(dest);
|
||||
|
||||
|
@ -95,22 +95,22 @@ int qemuMonitorTextGetMigrationStatus(qemuMonitorPtr mon,
|
||||
unsigned long long *total);
|
||||
|
||||
int qemuMonitorTextMigrateToHost(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *hostname,
|
||||
int port);
|
||||
|
||||
int qemuMonitorTextMigrateToCommand(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv);
|
||||
|
||||
int qemuMonitorTextMigrateToFile(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char * const *argv,
|
||||
const char *target,
|
||||
unsigned long long offset);
|
||||
|
||||
int qemuMonitorTextMigrateToUnix(qemuMonitorPtr mon,
|
||||
unsigned int background,
|
||||
unsigned int flags,
|
||||
const char *unixfile);
|
||||
|
||||
int qemuMonitorTextMigrateCancel(qemuMonitorPtr mon);
|
||||
|
Loading…
Reference in New Issue
Block a user