14.01.2019 17:46, Max Reitz wrote: > On 29.12.18 13:20, Vladimir Sementsov-Ogievskiy wrote: >> After node graph changes, we may not be able to resume_drive by device >> name (backing files are not recursively searched). So, lets allow to >> resume by node-name. Set constant name for breakpoints, to avoid >> introducing extra parameters. > > Hm, I don't quite understand this reason. Is this so you can create > breakpoints on one node (which falls through to the first blkdebug node) > and then remove them from another (falling through to the same blkdebug > node)?
add/remove breakpoint goes through ->file children, but my filter links active disk as ->backing. So, before block-job start we can insert breakpoint by device name. But then, when filter inserted, we can't remove breakpoint, because my filter hides blkdebug with active disk under ->backing link. Maybe, right solution would be support backing links in bdrv_debug_breakpoint() and bdrv_debug_remove_breakpoint() for the case when there is no file child. But being unsure about right behavior, I've decided to adjust the test. What about just do both add/remove breakpoint through blkdebug node-name, to make it less weird? > > Wouldn't it be better to let the user specify the breakpoint name? it's not needed now. with current naming we can have one break-point in device, so we don't need different names. > > Max > >> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@virtuozzo.com> >> --- >> tests/qemu-iotests/iotests.py | 9 +++++---- >> 1 file changed, 5 insertions(+), 4 deletions(-) >> >> diff --git a/tests/qemu-iotests/iotests.py b/tests/qemu-iotests/iotests.py >> index 76877ad584..c9779f432f 100644 >> --- a/tests/qemu-iotests/iotests.py >> +++ b/tests/qemu-iotests/iotests.py >> @@ -415,11 +415,11 @@ class VM(qtest.QEMUQtestMachine): >> self.pause_drive(drive, "write_aio") >> return >> self.qmp('human-monitor-command', >> - command_line='qemu-io %s "break %s bp_%s"' % (drive, >> event, drive)) >> + command_line='qemu-io %s "break %s bp_0"' % (drive, >> event)) >> >> def resume_drive(self, drive): >> self.qmp('human-monitor-command', >> - command_line='qemu-io %s "remove_break bp_%s"' % >> (drive, drive)) >> + command_line='qemu-io %s "remove_break bp_0"' % (drive)) >> >> def hmp_qemu_io(self, drive, cmd): >> '''Write to a given drive using an HMP command''' >> @@ -543,13 +543,14 @@ class QMPTestCase(unittest.TestCase): >> >> self.assertEqual(self.vm.flatten_qmp_object(json.loads(json_filename[5:])), >> self.vm.flatten_qmp_object(reference)) >> >> - def cancel_and_wait(self, drive='drive0', force=False, resume=False): >> + def cancel_and_wait(self, drive='drive0', force=False, resume=False, >> + resume_node=None): >> '''Cancel a block job and wait for it to finish, returning the >> event''' >> result = self.vm.qmp('block-job-cancel', device=drive, force=force) >> self.assert_qmp(result, 'return', {}) >> >> if resume: >> - self.vm.resume_drive(drive) >> + self.vm.resume_drive(resume_node or drive) >> >> cancelled = False >> result = None >> > > -- Best regards, Vladimir