To get rid of implicit filters related workarounds in future let's
deprecate them now.
Deprecation warning breaks some bash iotests output, so fix it here
too: in most of cases just add filter-node-name in test.
In 161 add FIXME and deprecation warning into 161.out.
In 249, the test case is changed, as we don't need to test "default"
filter node name anymore.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov(a)virtuozzo.com>
---
qemu-deprecated.texi | 6 ++++++
qapi/block-core.json | 9 ++++++---
include/block/block_int.h | 10 +++++++++-
blockdev.c | 10 ++++++++++
tests/qemu-iotests/094 | 1 +
tests/qemu-iotests/095 | 6 ++++--
tests/qemu-iotests/109 | 1 +
tests/qemu-iotests/127 | 1 +
tests/qemu-iotests/141 | 5 ++++-
tests/qemu-iotests/144 | 3 ++-
tests/qemu-iotests/156 | 1 +
tests/qemu-iotests/161 | 7 +++++++
tests/qemu-iotests/161.out | 1 +
tests/qemu-iotests/185 | 3 +++
tests/qemu-iotests/191 | 2 ++
tests/qemu-iotests/229 | 1 +
tests/qemu-iotests/247 | 8 +++++---
tests/qemu-iotests/249 | 5 +++--
tests/qemu-iotests/249.out | 2 +-
19 files changed, 68 insertions(+), 14 deletions(-)
diff --git a/qemu-deprecated.texi b/qemu-deprecated.texi
index 296bfc93a3..c969faf55a 100644
--- a/qemu-deprecated.texi
+++ b/qemu-deprecated.texi
@@ -204,6 +204,12 @@ and accurate ``query-qmp-schema'' command.
Character devices creating sockets in client mode should not specify
the 'wait' field, which is only applicable to sockets in server mode
+@subsection implicit filters in mirror and commit (since 4.2)
+
+Mirror and commit jobs insert filters, which becomes implicit if user
+omitted @option(filter-node-name) parameter. So omitting it is deprecated
+in ``blockdev-mirror'', ``drive-mirror'' and ``block-commit'',
set it always.
+
@section Human Monitor Protocol (HMP) commands
@subsection The hub_id parameter of 'hostfwd_add' / 'hostfwd_remove'
(since 3.1)
diff --git a/qapi/block-core.json b/qapi/block-core.json
index 93530d3a13..37caed775f 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -1659,7 +1659,8 @@
# @filter-node-name: the node name that should be assigned to the
# filter driver that the commit job inserts into the graph
# above @top. If this option is not given, a node name is
-# autogenerated. (Since: 2.9)
+# autogenerated. Omitting this option is deprecated, it will
+# be required in future. (Since: 2.9)
#
# @auto-finalize: When false, this job will wait in a PENDING state after it has
# finished its work, waiting for @block-job-finalize before
@@ -1996,7 +1997,8 @@
# @filter-node-name: the node name that should be assigned to the
# filter driver that the mirror job inserts into the graph
# above @device. If this option is not given, a node name is
-# autogenerated. (Since: 4.2)
+# autogenerated. Omitting this option is deprecated, it will
+# be required in future. (Since: 4.2)
#
# @unmap: Whether to try to unmap target sectors where source has
# only zero. If true, and target unallocated sectors will read as zero,
@@ -2311,7 +2313,8 @@
# @filter-node-name: the node name that should be assigned to the
# filter driver that the mirror job inserts into the graph
# above @device. If this option is not given, a node name is
-# autogenerated. (Since: 2.9)
+# autogenerated. Omitting this option is deprecated, it will
+# be required in future. (Since: 2.9)
#
# @copy-mode: when to copy data to the destination; defaults to 'background'
# (Since: 3.0)
diff --git a/include/block/block_int.h b/include/block/block_int.h
index dd033d0b37..48ff3af48d 100644
--- a/include/block/block_int.h
+++ b/include/block/block_int.h
@@ -793,7 +793,15 @@ struct BlockDriverState {
bool sg; /* if true, the device is a /dev/sg* */
bool probed; /* if true, format was probed rather than specified */
bool force_share; /* if true, always allow all shared permissions */
- bool implicit; /* if true, this filter node was automatically inserted */
+
+ /*
+ * @implicit field is deprecated, don't set it to true for new filters.
+ * If true, this filter node was automatically inserted and user don't
+ * know about it and unprepared for any effects of it. So, implicit
+ * filters are workarounded and skipped in many places of the block
+ * layer code.
+ */
+ bool implicit;
BlockDriver *drv; /* NULL means no media */
void *opaque;
diff --git a/blockdev.c b/blockdev.c
index 2ca614c77f..8c3a409c94 100644
--- a/blockdev.c
+++ b/blockdev.c
@@ -3333,6 +3333,11 @@ void qmp_block_commit(bool has_job_id, const char *job_id, const
char *device,
BlockdevOnError on_error = BLOCKDEV_ON_ERROR_REPORT;
int job_flags = JOB_DEFAULT;
+ if (!has_filter_node_name) {
+ warn_report("Omitting filter-node-name parameter is deprecated, it "
+ "will be required in future");
+ }
+
if (!has_speed) {
speed = 0;
}
@@ -3780,6 +3785,11 @@ static void blockdev_mirror_common(const char *job_id,
BlockDriverState *bs,
{
int job_flags = JOB_DEFAULT;
+ if (!has_filter_node_name) {
+ warn_report("Omitting filter-node-name parameter is deprecated, it "
+ "will be required in future");
+ }
+
if (!has_speed) {
speed = 0;
}
diff --git a/tests/qemu-iotests/094 b/tests/qemu-iotests/094
index 9343e09492..07017d5821 100755
--- a/tests/qemu-iotests/094
+++ b/tests/qemu-iotests/094
@@ -61,6 +61,7 @@ _send_qemu_cmd $QEMU_HANDLE \
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'drive-mirror',
'arguments': {'device': 'src',
+ 'filter-node-name': 'filter0',
'target': '$TEST_IMG',
'format': 'nbd',
'sync':'full',
diff --git a/tests/qemu-iotests/095 b/tests/qemu-iotests/095
index 58fe174b5e..3dc206ba9d 100755
--- a/tests/qemu-iotests/095
+++ b/tests/qemu-iotests/095
@@ -69,8 +69,10 @@ h=$QEMU_HANDLE
_send_qemu_cmd $h "{ 'execute': 'qmp_capabilities' }"
"return"
_send_qemu_cmd $h "{ 'execute': 'block-commit',
- 'arguments': { 'device':
'test',
- 'top': '"${TEST_IMG}.snp1"' }
}" '"status": "null"'
+ 'arguments': { 'device': 'test',
+ 'filter-node-name': 'filter0',
+ 'top': '"${TEST_IMG}.snp1"'
} }" \
+ '"status": "null"'
_cleanup_qemu
diff --git a/tests/qemu-iotests/109 b/tests/qemu-iotests/109
index 9897ceb6cd..aa7da57f8c 100755
--- a/tests/qemu-iotests/109
+++ b/tests/qemu-iotests/109
@@ -57,6 +57,7 @@ run_qemu()
_send_qemu_cmd $QEMU_HANDLE \
"{'execute':'drive-mirror', 'arguments':{
+ 'filter-node-name': 'filter0',
'device': 'src', 'target': '$raw_img',
$qmp_format
'mode': 'existing', 'sync': 'full'}}" \
"return"
diff --git a/tests/qemu-iotests/127 b/tests/qemu-iotests/127
index b64926ab31..b2ba9c66cb 100755
--- a/tests/qemu-iotests/127
+++ b/tests/qemu-iotests/127
@@ -70,6 +70,7 @@ _send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'drive-mirror',
'arguments': {
'job-id': 'mirror',
+ 'filter-node-name': 'filter0',
'device': 'source',
'target': '$TEST_IMG.overlay1',
'mode': 'existing',
diff --git a/tests/qemu-iotests/141 b/tests/qemu-iotests/141
index 8c2ae79f2b..178cee460d 100755
--- a/tests/qemu-iotests/141
+++ b/tests/qemu-iotests/141
@@ -123,6 +123,7 @@ echo
test_blockjob \
"{'execute': 'drive-mirror',
'arguments': {'job-id': 'job0',
+ 'filter-node-name': 'filter0',
'device': 'drv0',
'target': '$TEST_DIR/o.$IMGFMT',
'format': '$IMGFMT',
@@ -140,7 +141,8 @@ echo
test_blockjob \
"{'execute': 'block-commit',
- 'arguments': {'job-id': 'job0', 'device':
'drv0'}}" \
+ 'arguments': {'job-id': 'job0', 'filter-node-name':
'filter0',
+ 'device': 'drv0'}}" \
'BLOCK_JOB_READY' \
'"status": "null"'
@@ -157,6 +159,7 @@ $QEMU_IO -c 'write 0 1M' "$TEST_DIR/m.$IMGFMT" |
_filter_qemu_io
test_blockjob \
"{'execute': 'block-commit',
'arguments': {'job-id': 'job0',
+ 'filter-node-name': 'filter0',
'device': 'drv0',
'top': '$TEST_DIR/m.$IMGFMT',
'speed': 1}}" \
diff --git a/tests/qemu-iotests/144 b/tests/qemu-iotests/144
index 011ed4f2bc..de60b0ccba 100755
--- a/tests/qemu-iotests/144
+++ b/tests/qemu-iotests/144
@@ -83,7 +83,8 @@ echo
# Block commit on active layer, push the new overlay into base
_send_qemu_cmd $h "{ 'execute': 'block-commit',
'arguments': {
- 'device': 'virtio0'
+ 'device': 'virtio0',
+ 'filter-node-name':
'filter0'
}
}" "READY"
diff --git a/tests/qemu-iotests/156 b/tests/qemu-iotests/156
index 2ffa3ca942..2dc50444db 100755
--- a/tests/qemu-iotests/156
+++ b/tests/qemu-iotests/156
@@ -87,6 +87,7 @@ TEST_IMG="$TEST_IMG.target.overlay" _make_test_img -u -b
"$TEST_IMG.target" 1M
_send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'drive-mirror',
'arguments': { 'device': 'source',
+ 'filter-node-name': 'filter0',
'target': '$TEST_IMG.target.overlay',
'mode': 'existing',
'sync': 'top' } }" \
diff --git a/tests/qemu-iotests/161 b/tests/qemu-iotests/161
index 456a4bd8c4..9cf3e96c74 100755
--- a/tests/qemu-iotests/161
+++ b/tests/qemu-iotests/161
@@ -120,6 +120,13 @@ _send_qemu_cmd $QEMU_HANDLE \
'top': '${TEST_IMG}.int' } }" \
'return'
+# FIXME
+# Need to use filter-node-name in previous command, as it's omitting is
+# deprecated, as described by warning in test output. But if just put
+# filter-node-name into previous command the following reopen is failed with
+# messasge "Cannot change the option 'backing.detect-zeroes". It's a
bug and
+# shoud be fixed.
+
# Wait for block-commit to finish
sleep 0.5
diff --git a/tests/qemu-iotests/161.out b/tests/qemu-iotests/161.out
index 39951993ee..497f98f3c3 100644
--- a/tests/qemu-iotests/161.out
+++ b/tests/qemu-iotests/161.out
@@ -27,6 +27,7 @@ Formatting 'TEST_DIR/t.IMGFMT.base', fmt=IMGFMT size=1048576
Formatting 'TEST_DIR/t.IMGFMT.int', fmt=IMGFMT size=1048576
backing_file=TEST_DIR/t.IMGFMT.base
Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
backing_file=TEST_DIR/t.IMGFMT.int
{"return": {}}
+warning: Omitting filter-node-name parameter is deprecated, it will be required in
future
{"timestamp": {"seconds": TIMESTAMP, "microseconds":
TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data":
{"status": "created", "id": "none0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds":
TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data":
{"status": "running", "id": "none0"}}
{"return": {}}
diff --git a/tests/qemu-iotests/185 b/tests/qemu-iotests/185
index 454ff600cc..65ef64f0c0 100755
--- a/tests/qemu-iotests/185
+++ b/tests/qemu-iotests/185
@@ -107,6 +107,7 @@ echo
_send_qemu_cmd $h \
"{ 'execute': 'block-commit',
'arguments': { 'device': 'disk',
+ 'filter-node-name': 'filter0',
'base':'$TEST_IMG.base',
'top': '$TEST_IMG.mid',
'speed': 65536 } }" \
@@ -132,6 +133,7 @@ _send_qemu_cmd $h "{ 'execute':
'qmp_capabilities' }" 'return'
_send_qemu_cmd $h \
"{ 'execute': 'block-commit',
'arguments': { 'device': 'disk',
+ 'filter-node-name': 'filter0',
'base':'$TEST_IMG.base',
'speed': 65536 } }" \
"return"
@@ -154,6 +156,7 @@ _send_qemu_cmd $h "{ 'execute':
'qmp_capabilities' }" 'return'
_send_qemu_cmd $h \
"{ 'execute': 'drive-mirror',
'arguments': { 'device': 'disk',
+ 'filter-node-name': 'filter0',
'target': '$TEST_IMG.copy',
'format': '$IMGFMT',
'sync': 'full',
diff --git a/tests/qemu-iotests/191 b/tests/qemu-iotests/191
index 528022e8d8..79d572f6d5 100755
--- a/tests/qemu-iotests/191
+++ b/tests/qemu-iotests/191
@@ -76,6 +76,7 @@ echo
_send_qemu_cmd $h \
"{ 'execute': 'block-commit',
'arguments': { 'job-id': 'commit0',
+ 'filter-node-name': 'filter0',
'device': 'top',
'base':'$TEST_IMG.base',
'top': '$TEST_IMG.mid' } }" \
@@ -124,6 +125,7 @@ echo
_send_qemu_cmd $h \
"{ 'execute': 'block-commit',
'arguments': { 'job-id': 'commit0',
+ 'filter-node-name': 'filter0',
'device': 'top',
'base':'$TEST_IMG.base',
'top': '$TEST_IMG.mid' } }" \
diff --git a/tests/qemu-iotests/229 b/tests/qemu-iotests/229
index e18a464fe0..08a7887e90 100755
--- a/tests/qemu-iotests/229
+++ b/tests/qemu-iotests/229
@@ -69,6 +69,7 @@ echo
_send_qemu_cmd $QEMU_HANDLE \
"{'execute': 'drive-mirror',
'arguments': {'device': 'testdisk',
+ 'filter-node-name': 'filter0',
'format': '$IMGFMT',
'target': '$DEST_IMG',
'sync': 'full',
diff --git a/tests/qemu-iotests/247 b/tests/qemu-iotests/247
index c853b73819..394f4e221c 100755
--- a/tests/qemu-iotests/247
+++ b/tests/qemu-iotests/247
@@ -53,9 +53,11 @@ TEST_IMG="$TEST_IMG.3" _make_test_img $size
TEST_IMG="$TEST_IMG.4" _make_test_img $size
(cat <<EOF
-{"execute":"qmp_capabilities"}
-{"execute":"block-commit",
- "arguments":{"device":"format-4", "top-node":
"format-2", "base-node":"format-0",
"job-id":"job0"}}
+{"execute": "qmp_capabilities"}
+{"execute": "block-commit",
+ "arguments": {"device": "format-4",
"filter-node-name": "filter0",
+ "top-node": "format-2",
"base-node":"format-0",
+ "job-id":"job0"}}
EOF
if [ "${VALGRIND_QEMU}" == "y" ]; then
sleep 10
diff --git a/tests/qemu-iotests/249 b/tests/qemu-iotests/249
index e4650ecf6b..be84b9f961 100755
--- a/tests/qemu-iotests/249
+++ b/tests/qemu-iotests/249
@@ -88,11 +88,12 @@ _send_qemu_cmd $QEMU_HANDLE \
'return'
echo
-echo '=== Run block-commit on base using the default filter node name'
+echo '=== Run block-commit on base using the valid filter node name'
echo
_send_qemu_cmd $QEMU_HANDLE \
"{ 'execute': 'block-commit',
- 'arguments': {'job-id': 'job0', 'device':
'none1', 'top-node': 'int'}}" \
+ 'arguments': {'job-id': 'job0',
'filter-node-name': 'filter0',
+ 'device': 'none1', 'top-node':
'int'}}" \
'return'
# Wait for block-commit to finish
diff --git a/tests/qemu-iotests/249.out b/tests/qemu-iotests/249.out
index 1c93164e84..89092b75d7 100644
--- a/tests/qemu-iotests/249.out
+++ b/tests/qemu-iotests/249.out
@@ -18,7 +18,7 @@ Formatting 'TEST_DIR/t.IMGFMT', fmt=IMGFMT size=1048576
backing_file=TEST_DIR/t.
{"return": "Block node is read-onlyrn"}
-=== Run block-commit on base using the default filter node name
+=== Run block-commit on base using the valid filter node name
{"timestamp": {"seconds": TIMESTAMP, "microseconds":
TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data":
{"status": "created", "id": "job0"}}
{"timestamp": {"seconds": TIMESTAMP, "microseconds":
TIMESTAMP}, "event": "JOB_STATUS_CHANGE", "data":
{"status": "running", "id": "job0"}}
--
2.21.0