diff mbox

[02/11] iotests: add transactional incremental backup test

Message ID 1425528911-10300-3-git-send-email-jsnow@redhat.com
State New
Headers show

Commit Message

John Snow March 5, 2015, 4:15 a.m. UTC
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
---
 tests/qemu-iotests/124     | 49 ++++++++++++++++++++++++++++++++++++++++++++++
 tests/qemu-iotests/124.out |  4 ++--
 2 files changed, 51 insertions(+), 2 deletions(-)

Comments

Kashyap Chamarthy March 11, 2015, 12:11 p.m. UTC | #1
On Wed, Mar 04, 2015 at 11:15:02PM -0500, John Snow wrote:
> Reviewed-by: Max Reitz <mreitz@redhat.com>
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  tests/qemu-iotests/124     | 49 ++++++++++++++++++++++++++++++++++++++++++++++
>  tests/qemu-iotests/124.out |  4 ++--
>  2 files changed, 51 insertions(+), 2 deletions(-)

This tests seems to fail locally:

  . . .
  +======================================================================
  +FAIL: test_incremental_failure (__main__.TestIncrementalBackup)
  +Test: Verify backups made after a failure are correct.
  +----------------------------------------------------------------------
  +Traceback (most recent call last):
  +  File "124", line 331, in test_incremental_failure
  +    self.create_incremental()
  +  File "124", line 167, in create_incremental
  +    return self.wait_incremental(bitmap, validate)
  +  File "124", line 179, in wait_incremental
  +    self.assert_qmp_absent(event, 'data/error')
  +  File "/home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/iotests.py", line 282, in assert_qmp_absent
  +    self.fail('path "%s" has value "%s"' % (path, str(result)))
  +AssertionError: path "data/error" has value "Input/output error"
  +
  +======================================================================
  +FAIL: test_transaction_failure (__main__.TestIncrementalBackup)
  +Test: Verify backups made from a transaction that partially fails.
  +----------------------------------------------------------------------
  +Traceback (most recent call last):
  +  File "124", line 448, in test_transaction_failure
  +    self.wait_incremental(dr1bm0, 'drive1')
  +  File "124", line 179, in wait_incremental
  +    self.assert_qmp_absent(event, 'data/error')
  +  File "/home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/iotests.py", line 282, in assert_qmp_absent
  +    self.fail('path "%s" has value "%s"' % (path, str(result)))
  +AssertionError: path "data/error" has value "Input/output error"
  +
   ----------------------------------------------------------------------
  . . .

Complete stderr of `./check -qcow2` here:

    https://kashyapc.fedorapeople.org/virt/qemu-incremental-backup-tests/stderr-qemu-io-tests-qcow2-11MAR2015.txt

And, as per the other two failures of tests 051 and 061 (that you
mentioned on #qemu yesterday), Kevin Wolf on IRC said:

    051 was fixed, but the output has changed _again_. That change is from
    armbru_'s commit 7ee6c1e18. We need to update the reference output.

    As for 061, Max sent a patch, but I think we need to fix qemu rather
    than updating the reference output there
    Because the error message has become considerably worse


To test, I applied these two series to yesterday's QEMU git master:

    [PATCH 00/11] block: incremental backup transactions
    [PATCH v2 00/17] block: transactionless incremental backup

So, I'm here (28 commits ahead of commit 3539bbb on master) after
applying the patch series:

    $ git describe
    v2.2.0-1190-g41b7f5f

I need to try w/ today's git though, yet.
John Snow March 11, 2015, 2:25 p.m. UTC | #2
On 03/11/2015 08:11 AM, Kashyap Chamarthy wrote:
> On Wed, Mar 04, 2015 at 11:15:02PM -0500, John Snow wrote:
>> Reviewed-by: Max Reitz <mreitz@redhat.com>
>> Signed-off-by: John Snow <jsnow@redhat.com>
>> ---
>>   tests/qemu-iotests/124     | 49 ++++++++++++++++++++++++++++++++++++++++++++++
>>   tests/qemu-iotests/124.out |  4 ++--
>>   2 files changed, 51 insertions(+), 2 deletions(-)
>
> This tests seems to fail locally:
>
>    . . .
>    +======================================================================
>    +FAIL: test_incremental_failure (__main__.TestIncrementalBackup)
>    +Test: Verify backups made after a failure are correct.
>    +----------------------------------------------------------------------
>    +Traceback (most recent call last):
>    +  File "124", line 331, in test_incremental_failure
>    +    self.create_incremental()
>    +  File "124", line 167, in create_incremental
>    +    return self.wait_incremental(bitmap, validate)
>    +  File "124", line 179, in wait_incremental
>    +    self.assert_qmp_absent(event, 'data/error')
>    +  File "/home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/iotests.py", line 282, in assert_qmp_absent
>    +    self.fail('path "%s" has value "%s"' % (path, str(result)))
>    +AssertionError: path "data/error" has value "Input/output error"
>    +
>    +======================================================================
>    +FAIL: test_transaction_failure (__main__.TestIncrementalBackup)
>    +Test: Verify backups made from a transaction that partially fails.
>    +----------------------------------------------------------------------
>    +Traceback (most recent call last):
>    +  File "124", line 448, in test_transaction_failure
>    +    self.wait_incremental(dr1bm0, 'drive1')
>    +  File "124", line 179, in wait_incremental
>    +    self.assert_qmp_absent(event, 'data/error')
>    +  File "/home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/iotests.py", line 282, in assert_qmp_absent
>    +    self.fail('path "%s" has value "%s"' % (path, str(result)))
>    +AssertionError: path "data/error" has value "Input/output error"
>    +
>     ----------------------------------------------------------------------
>    . . .
>
> Complete stderr of `./check -qcow2` here:
>
>      https://kashyapc.fedorapeople.org/virt/qemu-incremental-backup-tests/stderr-qemu-io-tests-qcow2-11MAR2015.txt
>
> And, as per the other two failures of tests 051 and 061 (that you
> mentioned on #qemu yesterday), Kevin Wolf on IRC said:
>
>      051 was fixed, but the output has changed _again_. That change is from
>      armbru_'s commit 7ee6c1e18. We need to update the reference output.
>
>      As for 061, Max sent a patch, but I think we need to fix qemu rather
>      than updating the reference output there
>      Because the error message has become considerably worse
>
>
> To test, I applied these two series to yesterday's QEMU git master:
>
>      [PATCH 00/11] block: incremental backup transactions
>      [PATCH v2 00/17] block: transactionless incremental backup
>
> So, I'm here (28 commits ahead of commit 3539bbb on master) after
> applying the patch series:
>
>      $ git describe
>      v2.2.0-1190-g41b7f5f
>
> I need to try w/ today's git though, yet.
>

OK, I'll check this again after I make my changes to the base series 
this is based on. I promise I wasn't seeing a failure then ;)

If I can't reproduce I will be in touch to help diagnose what's going wrong.

Thanks,
--js
Kashyap Chamarthy March 11, 2015, 4:18 p.m. UTC | #3
On Wed, Mar 11, 2015 at 10:25:13AM -0400, John Snow wrote:
> 
> 
> On 03/11/2015 08:11 AM, Kashyap Chamarthy wrote:

[. . .]

> >To test, I applied these two series to yesterday's QEMU git master:
> >
> >     [PATCH 00/11] block: incremental backup transactions
> >     [PATCH v2 00/17] block: transactionless incremental backup
> >
> >So, I'm here (28 commits ahead of commit 3539bbb on master) after
> >applying the patch series:
> >
> >     $ git describe
> >     v2.2.0-1190-g41b7f5f
> >
> >I need to try w/ today's git though, yet.
> >
> 
> OK, I'll check this again after I make my changes to the base series this is
> based on. I promise I wasn't seeing a failure then ;)
> 
> If I can't reproduce I will be in touch to help diagnose what's going wrong.

Following up from our IRC conversation (thanks!), testing from your 'git
remote' (from github) works. Below is what I did, for completeness'
sake:

     $ git remote add jsnow https://github.com/jnsnow/qemu.git
     $ git fetch jsnow transactionless-incremental
     $ git checkout -b 3-inc-backup-testing jsnow/transactionless-incremental
     $ git pull jsnow incremental-transactions
     $ git describe
     v2.2.0-1553-ged69392

Test:

     $ make clean
     $ ./configure --target-list=x86_64-softmmu --enable-debug
     $ make -j4
     $ cd tests/qemu-iotests
     $ ./check -v -qcow2 124
     QEMU          -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/../../x86_64-softmmu/qemu-system-x86_64
     QEMU_IMG      -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/../../qemu-img
     QEMU_IO       -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/../../qemu-io
     QEMU_NBD      -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/../../qemu-nbd
     IMGFMT        -- qcow2 (compat=1.1)
     IMGPROTO      -- file
     PLATFORM      -- Linux/x86_64 tesla 3.18.3-201.fc21.x86_64
     TEST_DIR      -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/scratch
     SOCKET_SCM_HELPER -- /home/kashyapc/tinker-space/qemu-upstream/tests/qemu-iotests/socket_scm_helper
 
     124 2s ...
     Passed all 1 tests
diff mbox

Patch

diff --git a/tests/qemu-iotests/124 b/tests/qemu-iotests/124
index 1c07387..da0bf6d 100644
--- a/tests/qemu-iotests/124
+++ b/tests/qemu-iotests/124
@@ -184,6 +184,55 @@  class TestIncrementalBackup(iotests.QMPTestCase):
         return True
 
 
+    def test_incremental_transaction(self):
+        '''Test: Verify backups made from transactionally created bitmaps.
+
+        Create a bitmap "before" VM execution begins, then create a second
+        bitmap AFTER writes have already occurred. Use transactions to create
+        a full backup and synchronize both bitmaps to this backup.
+        Create an incremental backup through both bitmaps and verify that
+        both backups match the full backup.
+        '''
+        bitmap0 = self.add_bitmap('bitmap0', 'drive0')
+        self.hmp_io_writes('drive0', (('0xab', 0, 512),
+                                      ('0xfe', '16M', '256k'),
+                                      ('0x64', '32736k', '64k')))
+        bitmap1 = self.add_bitmap('bitmap1', 'drive0')
+
+        result = self.vm.qmp('transaction', actions=[
+            {
+                'type': 'block-dirty-bitmap-clear',
+                'data': { 'node': 'drive0',
+                          'name': 'bitmap0' },
+            },
+            {
+                'type': 'block-dirty-bitmap-clear',
+                'data': { 'node': 'drive0',
+                          'name': 'bitmap1' },
+            },
+            {
+                'type': 'drive-backup',
+                'data': { 'device': 'drive0',
+                          'sync': 'full',
+                          'format': iotests.imgfmt,
+                          'target': self.full_bak },
+            }
+        ])
+        self.assert_qmp(result, 'return', {})
+        self.wait_until_completed()
+        self.files.append(self.full_bak)
+        self.check_full_backup()
+
+        self.hmp_io_writes('drive0', (('0x9a', 0, 512),
+                                      ('0x55', '8M', '352k'),
+                                      ('0x78', '15872k', '1M')))
+        # Both bitmaps should be in sync and create fully valid
+        # incremental backups
+        res1 = self.create_incremental(bitmap0)
+        res2 = self.create_incremental(bitmap1)
+        self.assertTrue(res1 and res2)
+
+
     def test_incremental_failure(self):
         '''Test: Verify backups made after a failure are correct.
 
diff --git a/tests/qemu-iotests/124.out b/tests/qemu-iotests/124.out
index 89968f3..914e373 100644
--- a/tests/qemu-iotests/124.out
+++ b/tests/qemu-iotests/124.out
@@ -1,5 +1,5 @@ 
-....
+.....
 ----------------------------------------------------------------------
-Ran 4 tests
+Ran 5 tests
 
 OK