On 29.08.2017 18:20, Jiri Denemark wrote: > On Thu, Aug 24, 2017 at 09:56:49 +0300, Nikolay Shirokovskiy wrote: >> This patch shows incorrect info when client request comes >> when migration routine is stopping mirror jobs or mirror >> jobs already stopped. This issue will be addressed in next >> patch. > ... >> diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c >> index 2a8a721..c7af1ac 100644 >> --- a/src/qemu/qemu_migration.c >> +++ b/src/qemu/qemu_migration.c >> @@ -5922,3 +5922,52 @@ qemuMigrationReset(virQEMUDriverPtr driver, >> virFreeError(err); >> } >> } >> + >> + >> +int >> +qemuMigrationFetchMirrorStats(virQEMUDriverPtr driver, >> + virDomainObjPtr vm, >> + qemuDomainAsyncJob asyncJob, >> + qemuMonitorMigrationStatsPtr stats) >> +{ >> + size_t i; >> + qemuDomainObjPrivatePtr priv = vm->privateData; >> + bool nbd = false; >> + virHashTablePtr blockinfo = NULL; >> + >> + for (i = 0; i < vm->def->ndisks; i++) { >> + virDomainDiskDefPtr disk = vm->def->disks[i]; >> + if (QEMU_DOMAIN_DISK_PRIVATE(disk)->migrating) { >> + nbd = true; >> + break; >> + } >> + } >> + >> + if (!nbd) >> + return 0; >> + >> + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) >> + return -1; >> + >> + blockinfo = qemuMonitorGetAllBlockJobInfo(priv->mon); >> + >> + if (qemuDomainObjExitMonitor(driver, vm) < 0 || !blockinfo) >> + return -1; >> + >> + for (i = 0; i < vm->def->ndisks; i++) { >> + virDomainDiskDefPtr disk = vm->def->disks[i]; >> + qemuDomainDiskPrivatePtr diskPriv = QEMU_DOMAIN_DISK_PRIVATE(disk); >> + qemuMonitorBlockJobInfoPtr data; >> + >> + if (!diskPriv->migrating || >> + !(data = virHashLookup(blockinfo, disk->info.alias))) >> + continue; >> + >> + stats->disk_transferred += data->cur; >> + stats->disk_total += data->end; >> + stats->disk_remaining += data->end - data->cur; > > You should not touch qemuMonitorMigrationStatsPtr here. The scructure is > used to store raw data from query_migrate QMP command. Just add another > structure to jobInfo for storing NBD migration statistics. If you do > this, you don't need the hack to conditionally clear > qemuMonitorMigrationStats. Both structs can be combined in > qemuDomainJobInfoTo*. Yep, this simple change makes that quite ugly hack unnessesary. Great! > > Jirka > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list