Daniel P. Berrangé <berra...@redhat.com> writes: > On Wed, Jun 27, 2018 at 10:41:38AM +0200, Markus Armbruster wrote: >> Markus Armbruster <arm...@redhat.com> writes: >> >> > Markus Armbruster <arm...@redhat.com> writes: >> > >> >> I fooled around a bit, and I think there are a few lose ends. >> > [...] >> >> Talking to a QMP monitor that supports OOB: >> >> >> >> $ socat UNIX:test-qmp >> >> READLINE,history=$HOME/.qmp_history,prompt='QMP> ' >> >> {"QMP": {"version": {"qemu": {"micro": 50, "minor": 12, "major": 2}, >> >> "package": "v2.12.0-1703-gb909799463"}, "capabilities": ["oob"]}} >> >> QMP> { "execute": "qmp_capabilities", "arguments": { "oob": true } } >> >> {"error": {"class": "GenericError", "desc": "Parameter 'oob' is >> >> unexpected"}} >> >> QMP> { "execute": "qmp_capabilities", "arguments": { "enable": >> >> ["oob"] } } >> >> {"return": {}} >> >> QMP> { "execute": "query-qmp-schema" } >> >> {"error": {"class": "GenericError", "desc": "Out-Of-Band capability >> >> requires that every command contains an 'id' field"}} >> >> >> >> Why does every command require 'id'? >> > >> > I found one reason: event COMMAND_DROPPED wants it. Any other reason? >> > >> > [...] >> >> Apropos COMMAND_DROPPED: we send an event rather than an error response >> because we may send it out-of-order. Makes sense. >> >> However, broadcasting it to all monitors doesn't make sense. We could >> use a way to send an event to just one monitor. > > Worse than that - broadcasting to all monitors is categorically broken. > Different monitors make use the same "id" formatting scheme, so if you > broadcast COMMAND_DROPPED to a different monitor you might have clashing > "id" and thus incorrectly tell a client its command was dropped when in > fact it was processed. You'd have to be fairly unlucky in timing, but > it could happen.
Right. Must fix bug. I'm glad I went over this one more time, and in public!