On Mon, Jun 10, 2019 at 21:49:51 -0500, Eric Blake wrote: > On 6/7/19 2:08 AM, Peter Krempa wrote: > > On Thu, Jun 06, 2019 at 08:41:26 -0500, Eric Blake wrote: > >> On 6/6/19 7:48 AM, Peter Krempa wrote: > >>> On Wed, Jun 05, 2019 at 22:01:09 -0500, Eric Blake wrote: > >>>> The upcoming virDomainBackup() API needs to take advantage of various > >>>> qcow2 bitmap manipulations as the basis to virDomainCheckpoints and > >>>> incremental backups. Add four functions to expose > >>>> block-dirty-bitmap-{add,enable,disable,merge} (this is the > >>>> recently-added QEMU_CAPS_BITMAP_MERGE capability). > >>>> > >>>> Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > >>>> --- > >>>> src/qemu/qemu_monitor.h | 19 ++++++ > >>>> src/qemu/qemu_monitor_json.h | 17 +++++ > >>>> src/qemu/qemu_monitor.c | 51 +++++++++++++++ > >>>> src/qemu/qemu_monitor_json.c | 119 +++++++++++++++++++++++++++++++++++ > >>>> 4 files changed, 206 insertions(+) > >>> > >>> I'd suggest you add GEN_TEST_FUNC/DO_TEST_GEN tests for those. It's > >>> simple to add and gives you checking of the arguments against the QAPI > >>> schema for free. > >> > >> Will do. Do you need to see the amended patch with that added, or should > >> I go ahead and push once I have it working? > > > > ACK if you add those with all the fields excercised. > > Here's what I'm squashing in. The MergeBitmaps test depends on my > cleanup to use TestNewSchema everywhere. Also, I noticed that if we > wanted to use VIR_AUTOPTR(qemuMonitorTest) it might make a lot of the > file easier to read, but that should be a separate patch (including fixing: > qemumonitorjsontest.c:1431:5: error: cleanup argument not a function > VIR_AUTOPTR(qemuMonitorTest) test = NULL; As I've pointed out in the RFC patch you've sent, adding the automatic freeing function is a good idea, but refactoring old code does seem to be a waste of time. You certainly can use the new format in the code you are adding though. > ^~~~~~~~~~~ > ) > > diff --git i/tests/qemumonitorjsontest.c w/tests/qemumonitorjsontest.c > index 2e7e976e9b..c07d8bf548 100644 > --- i/tests/qemumonitorjsontest.c > +++ w/tests/qemumonitorjsontest.c > @@ -1375,6 +1375,9 @@ GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayOpen, > "foodev", true) > GEN_TEST_FUNC(qemuMonitorJSONBlockdevTrayClose, "foodev") > GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumRemove, "foodev") > GEN_TEST_FUNC(qemuMonitorJSONBlockdevMediumInsert, "foodev", "newnode") > +GEN_TEST_FUNC(qemuMonitorJSONAddBitmap, "node", "bitmap", true) > +GEN_TEST_FUNC(qemuMonitorJSONEnableBitmap, "node", "bitmap") > +GEN_TEST_FUNC(qemuMonitorJSONDeleteBitmap, "node", "bitmap") > > static int > testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque) > @@ -1419,6 +1422,44 @@ > testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque) > return ret; > } > > +static int > +testQemuMonitorJSONqemuMonitorJSONMergeBitmaps(const void *opaque) > +{ > + const testGenericData *data = opaque; > + virDomainXMLOptionPtr xmlopt = data->xmlopt; > + qemuMonitorTestPtr test = qemuMonitorTestNewSchema(xmlopt, > data->schema); > + int ret = -1; > + VIR_AUTOPTR(virJSONValue) arr = NULL; > + > + > + if (!test) > + return -1; > + > + if (!(arr = virJSONValueNewArray())) > + goto cleanup; > + > + if (virJSONValueArrayAppendString(arr, "b1") < 0 || > + virJSONValueArrayAppendString(arr, "b2") < 0) > + goto cleanup; > + > + if (qemuMonitorTestAddItem(test, "block-dirty-bitmap-merge", > + "{\"return\":{}}") < 0) > + goto cleanup; > + > + if (qemuMonitorJSONMergeBitmaps(qemuMonitorTestGetMonitor(test), > + "node", "dst", &arr) < 0) > + goto cleanup; > + > + if (arr) > + goto cleanup; > + > + ret = 0; > + > + cleanup: > + qemuMonitorTestFree(test); > + return ret; > +} > + > static bool > testQemuMonitorJSONqemuMonitorJSONQueryCPUsEqual(struct > qemuMonitorQueryCpusEntry *a, > struct > qemuMonitorQueryCpusEntry *b) > @@ -3109,6 +3150,9 @@ mymain(void) > DO_TEST_GEN(qemuMonitorJSONBlockdevTrayClose); > DO_TEST_GEN(qemuMonitorJSONBlockdevMediumRemove); > DO_TEST_GEN(qemuMonitorJSONBlockdevMediumInsert); > + DO_TEST_GEN(qemuMonitorJSONAddBitmap); > + DO_TEST_GEN(qemuMonitorJSONEnableBitmap); > + DO_TEST_GEN(qemuMonitorJSONDeleteBitmap); > DO_TEST(qemuMonitorJSONGetBalloonInfo); > DO_TEST(qemuMonitorJSONGetBlockInfo); > DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo); > @@ -3125,6 +3169,7 @@ mymain(void) > DO_TEST(qemuMonitorJSONSendKeyHoldtime); > DO_TEST(qemuMonitorSupportsActiveCommit); > DO_TEST(qemuMonitorJSONNBDServerStart); > + DO_TEST(qemuMonitorJSONMergeBitmaps); > > DO_TEST_CPU_DATA("host"); > DO_TEST_CPU_DATA("full"); ACK to the squash-in regardless of if you decide to use AUTOPTR for the test monitor in testQemuMonitorJSONqemuMonitorJSONMergeBitmaps.
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list