> >> The command takes a list of key-value pairs. Looks like this > >> (example stolen from your patch to qmp-commands.hx): > >> > >> { "execute": "migrate-set-parameters", > >> "arguments": { "parameters": > >> [ { "parameter": "compress-level", "value": 1 } > >> ] } } > >> > >> Awkward. I'd very much prefer > >> > >> { "execute": "migrate-set-parameters", > >> "arguments": { "compress-level", 1 } } > >> > >> I.e. the command simply takes the parameters as optional arguments. > >> Simpler, and a natural use of the schema language. > > > > Yes, it seems complicated. Eric suggested to use this type of > > interface, because it can support different type of parameters if some > > new parameters will be added. > > I don't understand. > > Schema for the three parameters we have now: > > { 'command': 'migrate-set-parameters', > 'data': { '*compression-level': 'int', > '*compression-threads': 'int, > '*decompression-threads': 'int' } } > > Let's add a parameter with some other type: > > { 'command': 'migrate-set-parameters', > 'data': { '*compression-level': 'int', > '*compression-threads': 'int, > '*compression-algorithm': 'CompressionAlgorithm', > '*decompression-threads': 'int', } } > > CompressionAlgorithm could be an enum. > > Why wouldn't that work?
To be honest, I know very little about QMP and JSON. What should I do to make the schema as you described? > >> > +## > >> > +# @query-migrate-parameters > >> > +# > >> > +# Returns information about the current migration parameters > >> > +status # # Returns: @MigrationParametersStatus # # Since: 2.3 ## > { 'command': > >> > +'query-migrate-parameters', > >> > + 'returns': ['MigrationParameterStatus'] } ## > >> > ## > >> > # @MouseInfo: > >> > # > >> > >> Produces a list of key-value pairs. Looks like this (stolen from the > >> same > >> place): > >> > >> { > >> "return": [ > >> { > >> "parameter": "compress-level", > >> "value": 1 > >> }, > >> { > >> "parameter": "compress-threads", > >> "value": 8 > >> }, > >> { > >> "parameter": "decompress-threads", > >> "value": 2 > >> } > >> ] > >> } > >> > >> I'd very much prefer a simple object instead: > >> > >> { "return": { "compress-level": 1, > >> "compress-threads": 8, > >> "decompress-threads": 2 } } > >> > > > > The same reason. > > { 'command': 'query-migrate-parameters', > 'returns': 'MigrationParameters' } > > { 'type': 'MigrationParameters', > 'data': { 'compression-level': 'int', > 'compression-threads': 'int, > 'decompression-threads': 'int' } } > > Add one as above: > > { 'type': 'MigrationParameters', > 'data': { 'compression-level': 'int', > 'compression-threads': 'int, > 'compression-algorithm': 'CompressionAlgorithm', > 'decompression-threads': 'int', } } > > Why wouldn't that work? Could you be kind to point out what changes should I make?