Skip to content
  • Markus Armbruster's avatar
    97ca0712
    qmp: Get rid of x-oob-test command · 97ca0712
    Markus Armbruster authored
    
    
    tests/qmp-test tests an out-of-band command overtaking a slow in-band
    command.  To do that, it needs:
    
    1. An in-band command that *reliably* takes long enough to be
       overtaken.
    
    2. An out-of-band command to do the overtaking.
    
    3. To avoid delays, a way to make the in-band command complete quickly
       after it was overtaken.
    
    To satisfy these needs, commit 469638f9 provides the rather
    peculiar oob-capable QMP command x-oob-test:
    
    * With "lock": true, it waits for a global semaphore.
    
    * With "lock": false, it signals the global semaphore.
    
    To satisfy 1., the test runs x-oob-test in-band with "lock": true.
    To satisfy 2. and 3., it runs x-oob-test out-of-band with "lock": false.
    
    Note that waiting for a semaphore violates the rules for oob-capable
    commands.  Running x-oob-test with "lock": true hangs the monitor
    until you run x-oob-test with "lock": false on another monitor (which
    you might not have set up).
    
    Having an externally visible QMP command that may hang the monitor is
    not nice.  Let's apply a little more ingenuity to the problem.  Idea:
    have an existing command block on reading a FIFO special file, unblock
    it by opening the FIFO for writing.
    
    For 1., use
    
        {"execute": "blockdev-add",  "id": ID1,
         "arguments": {
            "driver": "blkdebug", "node-name": ID1, "config": FIFO,
            "image": { "driver": "null-co"}}}
    
    where ID1 is an arbitrary string, and FIFO is the name of the FIFO.
    
    For 2., use
    
        {"execute": "migrate-pause", "id": ID2, "control": {"run-oob": true}}
    
    where ID2 is a different arbitrary string.  Since there's no migration
    to pause, the command will fail, but that's fine; instant failure is
    still a test of out-of-band responses overtaking in-band commands.
    
    For 3., open FIFO for writing.
    
    Drop QMP command x-oob-test.
    
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20180703085358.13941-6-armbru@redhat.com>
    [Error checking tweaked]
    97ca0712
    qmp: Get rid of x-oob-test command
    Markus Armbruster authored
    
    
    tests/qmp-test tests an out-of-band command overtaking a slow in-band
    command.  To do that, it needs:
    
    1. An in-band command that *reliably* takes long enough to be
       overtaken.
    
    2. An out-of-band command to do the overtaking.
    
    3. To avoid delays, a way to make the in-band command complete quickly
       after it was overtaken.
    
    To satisfy these needs, commit 469638f9 provides the rather
    peculiar oob-capable QMP command x-oob-test:
    
    * With "lock": true, it waits for a global semaphore.
    
    * With "lock": false, it signals the global semaphore.
    
    To satisfy 1., the test runs x-oob-test in-band with "lock": true.
    To satisfy 2. and 3., it runs x-oob-test out-of-band with "lock": false.
    
    Note that waiting for a semaphore violates the rules for oob-capable
    commands.  Running x-oob-test with "lock": true hangs the monitor
    until you run x-oob-test with "lock": false on another monitor (which
    you might not have set up).
    
    Having an externally visible QMP command that may hang the monitor is
    not nice.  Let's apply a little more ingenuity to the problem.  Idea:
    have an existing command block on reading a FIFO special file, unblock
    it by opening the FIFO for writing.
    
    For 1., use
    
        {"execute": "blockdev-add",  "id": ID1,
         "arguments": {
            "driver": "blkdebug", "node-name": ID1, "config": FIFO,
            "image": { "driver": "null-co"}}}
    
    where ID1 is an arbitrary string, and FIFO is the name of the FIFO.
    
    For 2., use
    
        {"execute": "migrate-pause", "id": ID2, "control": {"run-oob": true}}
    
    where ID2 is a different arbitrary string.  Since there's no migration
    to pause, the command will fail, but that's fine; instant failure is
    still a test of out-of-band responses overtaking in-band commands.
    
    For 3., open FIFO for writing.
    
    Drop QMP command x-oob-test.
    
    Signed-off-by: default avatarMarkus Armbruster <armbru@redhat.com>
    Reviewed-by: default avatarEric Blake <eblake@redhat.com>
    Message-Id: <20180703085358.13941-6-armbru@redhat.com>
    [Error checking tweaked]
Loading