diff mbox series

[v2,09/31] qapi/qom: Add ObjectOptions for throttle-group

Message ID 20210224135255.253837-10-kwolf@redhat.com (mailing list archive)
State New, archived
Headers show
Series qapi/qom: QAPIfy --object and object-add | expand

Commit Message

Kevin Wolf Feb. 24, 2021, 1:52 p.m. UTC
This adds a QAPI schema for the properties of the throttle-group object.

The only purpose of the x-* properties is to make the nested options in
'limits' available for a command line parser that doesn't support
structs. Any parser that will use the QAPI schema will supports structs,
though, so they will not be needed in the schema in the future.

To keep the conversion straightforward, add them to the schema anyway.
We can then remove the options and adjust documentation, test cases etc.
in a separate patch.

Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
 qapi/block-core.json | 27 +++++++++++++++++++++++++++
 qapi/qom.json        |  7 +++++--
 2 files changed, 32 insertions(+), 2 deletions(-)

Comments

Eric Blake Feb. 26, 2021, 5:26 p.m. UTC | #1
On 2/24/21 7:52 AM, Kevin Wolf wrote:
> This adds a QAPI schema for the properties of the throttle-group object.
> 
> The only purpose of the x-* properties is to make the nested options in
> 'limits' available for a command line parser that doesn't support
> structs. Any parser that will use the QAPI schema will supports structs,
> though, so they will not be needed in the schema in the future.
> 
> To keep the conversion straightforward, add them to the schema anyway.
> We can then remove the options and adjust documentation, test cases etc.
> in a separate patch.
> 
> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> ---
>  qapi/block-core.json | 27 +++++++++++++++++++++++++++
>  qapi/qom.json        |  7 +++++--
>  2 files changed, 32 insertions(+), 2 deletions(-)
> 
> diff --git a/qapi/block-core.json b/qapi/block-core.json
> index 9f555d5c1d..a67fa0cc59 100644
> --- a/qapi/block-core.json
> +++ b/qapi/block-core.json
> @@ -2504,6 +2504,33 @@
>              '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
>              '*iops-size' : 'int' } }
>  
> +##
> +# @ThrottleGroupProperties:
> +#
> +# Properties for throttle-group objects.

Corresponds to block/throttle-groups.c:throttle_group_obj_class_init()
with its ThrottleParamInfo struct for the x- fields, and limits as-is.

> +#
> +# The options starting with x- are aliases for the same key without x- in
> +# the @limits object. As indicated by the x- prefix, this is not a stable
> +# interface and may be removed or changed incompatibly in the future. Use
> +# @limits for a supported stable interface.
> +#
> +# @limits: limits to apply for this throttle group

And I did check that qapi/block-core.json:ThrottleLimits has the same
fields as the ThrottleParamInfo x- fields.  All this duplication!  But
we're getting to a state where it will be easier to clean up the cruft.

> +#
> +# Since: 2.11
> +##
> +{ 'struct': 'ThrottleGroupProperties',
> +  'data': { '*limits': 'ThrottleLimits',
> +            '*x-iops-total' : 'int', '*x-iops-total-max' : 'int',
> +            '*x-iops-total-max-length' : 'int', '*x-iops-read' : 'int',
> +            '*x-iops-read-max' : 'int', '*x-iops-read-max-length' : 'int',
> +            '*x-iops-write' : 'int', '*x-iops-write-max' : 'int',
> +            '*x-iops-write-max-length' : 'int', '*x-bps-total' : 'int',
> +            '*x-bps-total-max' : 'int', '*x-bps-total-max-length' : 'int',
> +            '*x-bps-read' : 'int', '*x-bps-read-max' : 'int',
> +            '*x-bps-read-max-length' : 'int', '*x-bps-write' : 'int',
> +            '*x-bps-write-max' : 'int', '*x-bps-write-max-length' : 'int',
> +            '*x-iops-size' : 'int' } }
> +
>  ##
>  # @block-stream:
>  #
> diff --git a/qapi/qom.json b/qapi/qom.json
> index 73f28f9608..449dca8ec5 100644
> --- a/qapi/qom.json
> +++ b/qapi/qom.json
> @@ -5,6 +5,7 @@
>  # See the COPYING file in the top-level directory.
>  
>  { 'include': 'authz.json' }
> +{ 'include': 'block-core.json' }
>  { 'include': 'common.json' }
>  
>  ##
> @@ -447,7 +448,8 @@
>      'memory-backend-ram',
>      'rng-builtin',
>      'rng-egd',
> -    'rng-random'
> +    'rng-random',
> +    'throttle-group'
>    ] }
>  
>  ##
> @@ -480,7 +482,8 @@
>        'memory-backend-ram':         'MemoryBackendProperties',
>        'rng-builtin':                'RngProperties',
>        'rng-egd':                    'RngEgdProperties',
> -      'rng-random':                 'RngRandomProperties'
> +      'rng-random':                 'RngRandomProperties',
> +      'throttle-group':             'ThrottleGroupProperties'
>    } }
>  
>  ##
> 

Reviewed-by: Eric Blake <eblake@redhat.com>
Kevin Wolf March 2, 2021, 6:18 p.m. UTC | #2
Am 26.02.2021 um 18:26 hat Eric Blake geschrieben:
> On 2/24/21 7:52 AM, Kevin Wolf wrote:
> > This adds a QAPI schema for the properties of the throttle-group object.
> > 
> > The only purpose of the x-* properties is to make the nested options in
> > 'limits' available for a command line parser that doesn't support
> > structs. Any parser that will use the QAPI schema will supports structs,
> > though, so they will not be needed in the schema in the future.
> > 
> > To keep the conversion straightforward, add them to the schema anyway.
> > We can then remove the options and adjust documentation, test cases etc.
> > in a separate patch.
> > 
> > Signed-off-by: Kevin Wolf <kwolf@redhat.com>
> > ---
> >  qapi/block-core.json | 27 +++++++++++++++++++++++++++
> >  qapi/qom.json        |  7 +++++--
> >  2 files changed, 32 insertions(+), 2 deletions(-)
> > 
> > diff --git a/qapi/block-core.json b/qapi/block-core.json
> > index 9f555d5c1d..a67fa0cc59 100644
> > --- a/qapi/block-core.json
> > +++ b/qapi/block-core.json
> > @@ -2504,6 +2504,33 @@
> >              '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
> >              '*iops-size' : 'int' } }
> >  
> > +##
> > +# @ThrottleGroupProperties:
> > +#
> > +# Properties for throttle-group objects.
> 
> Corresponds to block/throttle-groups.c:throttle_group_obj_class_init()
> with its ThrottleParamInfo struct for the x- fields, and limits as-is.
> 
> > +#
> > +# The options starting with x- are aliases for the same key without x- in
> > +# the @limits object. As indicated by the x- prefix, this is not a stable
> > +# interface and may be removed or changed incompatibly in the future. Use
> > +# @limits for a supported stable interface.
> > +#
> > +# @limits: limits to apply for this throttle group
> 
> And I did check that qapi/block-core.json:ThrottleLimits has the same
> fields as the ThrottleParamInfo x- fields.  All this duplication!  But
> we're getting to a state where it will be easier to clean up the cruft.

Indeed, after this series you can use 'limit' everywhere, so there is no
real reason for the x- fields to stay. I almost included the removal in
this series, but then it turned out that some more test cases depend on
it than I wanted to fix up on the side. But it's an obvious follow-up
series.

Kevin
diff mbox series

Patch

diff --git a/qapi/block-core.json b/qapi/block-core.json
index 9f555d5c1d..a67fa0cc59 100644
--- a/qapi/block-core.json
+++ b/qapi/block-core.json
@@ -2504,6 +2504,33 @@ 
             '*bps-write-max' : 'int', '*bps-write-max-length' : 'int',
             '*iops-size' : 'int' } }
 
+##
+# @ThrottleGroupProperties:
+#
+# Properties for throttle-group objects.
+#
+# The options starting with x- are aliases for the same key without x- in
+# the @limits object. As indicated by the x- prefix, this is not a stable
+# interface and may be removed or changed incompatibly in the future. Use
+# @limits for a supported stable interface.
+#
+# @limits: limits to apply for this throttle group
+#
+# Since: 2.11
+##
+{ 'struct': 'ThrottleGroupProperties',
+  'data': { '*limits': 'ThrottleLimits',
+            '*x-iops-total' : 'int', '*x-iops-total-max' : 'int',
+            '*x-iops-total-max-length' : 'int', '*x-iops-read' : 'int',
+            '*x-iops-read-max' : 'int', '*x-iops-read-max-length' : 'int',
+            '*x-iops-write' : 'int', '*x-iops-write-max' : 'int',
+            '*x-iops-write-max-length' : 'int', '*x-bps-total' : 'int',
+            '*x-bps-total-max' : 'int', '*x-bps-total-max-length' : 'int',
+            '*x-bps-read' : 'int', '*x-bps-read-max' : 'int',
+            '*x-bps-read-max-length' : 'int', '*x-bps-write' : 'int',
+            '*x-bps-write-max' : 'int', '*x-bps-write-max-length' : 'int',
+            '*x-iops-size' : 'int' } }
+
 ##
 # @block-stream:
 #
diff --git a/qapi/qom.json b/qapi/qom.json
index 73f28f9608..449dca8ec5 100644
--- a/qapi/qom.json
+++ b/qapi/qom.json
@@ -5,6 +5,7 @@ 
 # See the COPYING file in the top-level directory.
 
 { 'include': 'authz.json' }
+{ 'include': 'block-core.json' }
 { 'include': 'common.json' }
 
 ##
@@ -447,7 +448,8 @@ 
     'memory-backend-ram',
     'rng-builtin',
     'rng-egd',
-    'rng-random'
+    'rng-random',
+    'throttle-group'
   ] }
 
 ##
@@ -480,7 +482,8 @@ 
       'memory-backend-ram':         'MemoryBackendProperties',
       'rng-builtin':                'RngProperties',
       'rng-egd':                    'RngEgdProperties',
-      'rng-random':                 'RngRandomProperties'
+      'rng-random':                 'RngRandomProperties',
+      'throttle-group':             'ThrottleGroupProperties'
   } }
 
 ##