On 04.02.26 15:26, Markus Armbruster wrote:
Vladimir Sementsov-Ogievskiy <[email protected]> writes:

Add a command that can replace bs in following BdrvChild structures:

  - qdev blk root child
  - block-export blk root child
  - any child of BlockDriverState selected by child-name

Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>

[...]

diff --git a/qapi/block-core.json b/qapi/block-core.json
index b82af74256..9cc7c3d140 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -6334,3 +6334,27 @@
  ##
  { 'struct': 'DummyBlockCoreForceArrays',
    'data': { 'unused-block-graph-info': ['BlockGraphInfo'] } }
+
+##
+# @blockdev-replace:
+#
+# Replace a block-node associated with device (@parent should be
+# QOM path, and @child should be "root") or with block-export (@parent
+# should be export name, and @child should be "root") or any child
+# of block-node (@parent should be node-name, and @child should be any
+# if its children names) with @new-child block-node.

of its

+#
+# @parent: QOM path or block-export or node-name, which @child should
+#     be repalced.  If several matching parents exist, the command

replaced

+#     will fail

End the sentence with a period, please.

+#
+# @child: child to replace.  Must be "root" when parent is QOM path or
+#     block-export

Likewise.

+#
+# @new-child: node-name of the block-node, which should become a
+#    replacement for @child's current block-node

Likewise.

Indent one more, please.

+#
+# Since 11.0
+##

Let's see whether I understand...

@parent determines which of the three cases mentioned in the commit
message it ids:

* If @parent is a QOM path, case 1.

* If @parent is a block export name (@id in BlockExportOptions and
   BlockExportInfo), case 2.

* If @parent is a block node name (@node-name in BlockdevOptions and
   BlockDeviceInfo), case 3.

Correct?

Problem: this is ambiguous.  A @parent "foo" could in fact be any of the
three cases.

Yes. And we return an error in case of any ambiguity.


3. If a block node named "foo" exists, it's case 3.

2. If a block export named "foo" exists, it's also case 2.

1. If exactly one QOM object named "foo" exists, it's also case 1.  Why?
    "foo" is a syntactically valid partial QOM path.  Partial QOM paths
    are a convenience feature that is virtually unknown (and possibly
    ill-advised): you can omit leading path components as long as there's
    no ambiguity.

Peeking ahead in the series...  PATCH 8 appears to deprecate the
ambiguity between case 2. and 3.

I think we need to do better.

More questions...

In case 1 and 2, @child "should be root".  What happens when it's
something else?

Error returned. s/should/must/ ?


In case 3, @child "should be any if its children names".  I figure the
command fails when it isn't.

And here.


+{ 'command': 'blockdev-replace',
+  'data': { 'parent': 'str', 'child': 'str', 'new-child': 'str' } }

[...]



--
Best regards,
Vladimir

Reply via email to