diff mbox series

[ovs-dev] Shutdown SSL connection before closing socket

Message ID 1562774836-27253-1-git-send-email-twilson@redhat.com
State Superseded
Headers show
Series [ovs-dev] Shutdown SSL connection before closing socket | expand

Commit Message

Terry Wilson July 10, 2019, 4:07 p.m. UTC
Without shutting down the SSL connection, log messages like:

stream_ssl|WARN|SSL_read: unexpected SSL connection close
jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)

would occur whenever the socket is closed. This just adds an
SSLStream.close() that calls shutdown() and ignores read/write
errors.

Signed-off-by: Terry Wilson <twilson@redhat.com>
---
 python/ovs/stream.py | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Terry Wilson July 10, 2019, 4:11 p.m. UTC | #1
An example of a reproducer script attached. If you enable SSL and OVN w/
the sandbox and run it, looking in the sandbox/nb1.log you'll see the
disconnect errors that the patch makes go away.

On Wed, Jul 10, 2019 at 11:07 AM Terry Wilson <twilson@redhat.com> wrote:

> Without shutting down the SSL connection, log messages like:
>
> stream_ssl|WARN|SSL_read: unexpected SSL connection close
> jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
> reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)
>
> would occur whenever the socket is closed. This just adds an
> SSLStream.close() that calls shutdown() and ignores read/write
> errors.
>
> Signed-off-by: Terry Wilson <twilson@redhat.com>
> ---
>  python/ovs/stream.py | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/python/ovs/stream.py b/python/ovs/stream.py
> index c15be4b..fd1045e 100644
> --- a/python/ovs/stream.py
> +++ b/python/ovs/stream.py
> @@ -825,6 +825,14 @@ class SSLStream(Stream):
>          except SSL.SysCallError as e:
>              return -ovs.socket_util.get_exception_errno(e)
>
> +    def close(self):
> +        if self.socket:
> +            try:
> +                self.socket.shutdown()
> +            except (SSL.WantReadError, SSL.WantWriteError):
> +                pass
> +        return super(SSLStream, self).close()
> +
>
>  if SSL:
>      # Register SSL only if the OpenSSL module is available
> --
> 1.8.3.1
>
>
Mark Michelson July 10, 2019, 5:17 p.m. UTC | #2
On 7/10/19 12:11 PM, Terry Wilson wrote:
> An example of a reproducer script attached. If you enable SSL and OVN w/
> the sandbox and run it, looking in the sandbox/nb1.log you'll see the
> disconnect errors that the patch makes go away.
> 

Hi Terry. It looks like the mailing list has eaten your attachment. If 
possible, can you include it in-line?

> On Wed, Jul 10, 2019 at 11:07 AM Terry Wilson <twilson@redhat.com> wrote:
> 
>> Without shutting down the SSL connection, log messages like:
>>
>> stream_ssl|WARN|SSL_read: unexpected SSL connection close
>> jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
>> reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)
>>
>> would occur whenever the socket is closed. This just adds an
>> SSLStream.close() that calls shutdown() and ignores read/write
>> errors.
>>
>> Signed-off-by: Terry Wilson <twilson@redhat.com>
>> ---
>>   python/ovs/stream.py | 8 ++++++++
>>   1 file changed, 8 insertions(+)
>>
>> diff --git a/python/ovs/stream.py b/python/ovs/stream.py
>> index c15be4b..fd1045e 100644
>> --- a/python/ovs/stream.py
>> +++ b/python/ovs/stream.py
>> @@ -825,6 +825,14 @@ class SSLStream(Stream):
>>           except SSL.SysCallError as e:
>>               return -ovs.socket_util.get_exception_errno(e)
>>
>> +    def close(self):
>> +        if self.socket:
>> +            try:
>> +                self.socket.shutdown()
>> +            except (SSL.WantReadError, SSL.WantWriteError):
>> +                pass
>> +        return super(SSLStream, self).close()
>> +
>>
>>   if SSL:
>>       # Register SSL only if the OpenSSL module is available
>> --
>> 1.8.3.1
>>
>>
>>
>> _______________________________________________
>> dev mailing list
>> dev@openvswitch.org
>> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
Terry Wilson July 10, 2019, 6:24 p.m. UTC | #3
from __future__ import print_function
import sys

from ovs import jsonrpc
from ovs import stream
from ovs.unixctl import client


URI='ssl:127.0.0.1:6641'
PRIV='sandbox/ovnnb-privkey.pem'
CERT='sandbox/ovnnb-cert.pem'
CACERT='sandbox/pki/switchca/cacert.pem'
stream.Stream.ssl_set_private_key_file(PRIV)
stream.Stream.ssl_set_certificate_file(CERT)
stream.Stream.ssl_set_ca_cert_file(CACERT)


class SSLClient(client.UnixctlClient):
    @classmethod
    def create(cls, uri):
        error, _stream = stream.Stream.open_block(
                stream.Stream.open(uri))
        if error:
            client.vlog.warn("failed to connect to %s" % path)
            return error, None
        return 0, cls(jsonrpc.Connection(_stream))


_, c = SSLClient.create(URI)
print(c.transact("echo", ["hello world"]))
c.close()

On Wed, Jul 10, 2019 at 12:17 PM Mark Michelson <mmichels@redhat.com> wrote:

> On 7/10/19 12:11 PM, Terry Wilson wrote:
> > An example of a reproducer script attached. If you enable SSL and OVN w/
> > the sandbox and run it, looking in the sandbox/nb1.log you'll see the
> > disconnect errors that the patch makes go away.
> >
>
> Hi Terry. It looks like the mailing list has eaten your attachment. If
> possible, can you include it in-line?
>
> > On Wed, Jul 10, 2019 at 11:07 AM Terry Wilson <twilson@redhat.com>
> wrote:
> >
> >> Without shutting down the SSL connection, log messages like:
> >>
> >> stream_ssl|WARN|SSL_read: unexpected SSL connection close
> >> jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
> >> reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)
> >>
> >> would occur whenever the socket is closed. This just adds an
> >> SSLStream.close() that calls shutdown() and ignores read/write
> >> errors.
> >>
> >> Signed-off-by: Terry Wilson <twilson@redhat.com>
> >> ---
> >>   python/ovs/stream.py | 8 ++++++++
> >>   1 file changed, 8 insertions(+)
> >>
> >> diff --git a/python/ovs/stream.py b/python/ovs/stream.py
> >> index c15be4b..fd1045e 100644
> >> --- a/python/ovs/stream.py
> >> +++ b/python/ovs/stream.py
> >> @@ -825,6 +825,14 @@ class SSLStream(Stream):
> >>           except SSL.SysCallError as e:
> >>               return -ovs.socket_util.get_exception_errno(e)
> >>
> >> +    def close(self):
> >> +        if self.socket:
> >> +            try:
> >> +                self.socket.shutdown()
> >> +            except (SSL.WantReadError, SSL.WantWriteError):
> >> +                pass
> >> +        return super(SSLStream, self).close()
> >> +
> >>
> >>   if SSL:
> >>       # Register SSL only if the OpenSSL module is available
> >> --
> >> 1.8.3.1
> >>
> >>
> >>
> >> _______________________________________________
> >> dev mailing list
> >> dev@openvswitch.org
> >> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
>
>
Ben Pfaff July 10, 2019, 7:58 p.m. UTC | #4
On Wed, Jul 10, 2019 at 11:07:16AM -0500, Terry Wilson wrote:
> Without shutting down the SSL connection, log messages like:
> 
> stream_ssl|WARN|SSL_read: unexpected SSL connection close
> jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
> reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)
> 
> would occur whenever the socket is closed. This just adds an
> SSLStream.close() that calls shutdown() and ignores read/write
> errors.
> 
> Signed-off-by: Terry Wilson <twilson@redhat.com>

Thanks for the patch.

With this applied, I get two test failures, details below.

## ------------------------ ##
## Summary of the failures. ##
## ------------------------ ##
Failed tests:
openvswitch 2.11.90 test suite test groups:

 NUM: FILE-NAME:LINE     TEST-GROUP-NAME
      KEYWORDS

 2108: ovsdb-idl.at:351   simple idl, initially empty, various ops - Python2 - SSL
      ovsdb server idl positive python with ssl socket
 2439: ovsdb-idl.at:1452  simple idl verify notify - Python2 - SSL
      ovsdb server idl positive python with ssl socket notify

## ---------------------- ##
## Detailed failed tests. ##
## ---------------------- ##

#                             -*- compilation -*-
2108. ovsdb-idl.at:351: testing simple idl, initially empty, various ops - Python2 - SSL ...
../../tests/ovsdb-idl.at:351: ovsdb-tool create db $abs_srcdir/idltest.ovsschema
stderr:
stdout:
../../tests/ovsdb-idl.at:351: ovsdb-server -vconsole:warn --log-file --detach --no-chdir \
             --pidfile \
             --private-key=$PKIDIR/testpki-privkey2.pem \
             --certificate=$PKIDIR/testpki-cert2.pem \
             --ca-cert=$PKIDIR/testpki-cacert.pem \
             --remote=pssl:0:127.0.0.1 db
ovsdb-idl.at:351: waiting until TCP_PORT=`sed -n 's/.*0:.*: listening on port \([0-9]*\)$/\1/p' "ovsdb-server.log"` && test X != X"$TCP_PORT"...
ovsdb-idl.at:351: wait succeeded immediately
../../tests/ovsdb-idl.at:351: $PYTHON $srcdir/test-ovsdb.py  -t10 idl $srcdir/idltest.ovsschema \
             ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \
             $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem '["idltest",
      {"op": "insert",
       "table": "simple",
       "row": {"i": 1,
               "r": 2.0,
               "b": true,
               "s": "mystring",
               "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
               "ia": ["set", [1, 2, 3]],
               "ra": ["set", [-0.5]],
               "ba": ["set", [true]],
               "sa": ["set", ["abc", "def"]],
               "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
                              ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
      {"op": "insert",
       "table": "simple",
       "row": {}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [],
       "row": {"b": true}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [],
       "row": {"r": 123.5}}]' \
    '["idltest",
      {"op": "insert",
       "table": "simple",
       "row": {"i": -1,
               "r": 125,
               "b": false,
               "s": "",
               "ia": ["set", [1]],
               "ra": ["set", [1.5]],
               "ba": ["set", [false]],
               "sa": ["set", []],
               "ua": ["set", []]}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [["i", "<", 1]],
       "row": {"s": "newstring"}}]' \
    '["idltest",
      {"op": "delete",
       "table": "simple",
       "where": [["i", "==", 0]]}]' \
    'reconnect'
stderr:
2019-07-10T19:57:50Z |  0  | reconnect | DBG | ssl:127.0.0.1:38627: entering BACKOFF
2019-07-10T19:57:50Z |  1  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  2  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  3  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  4  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  5  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  6  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  7  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  8  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  9  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  10 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  11 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  12 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  13 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  14 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:50Z |  15 | reconnect | INFO | ssl:127.0.0.1:38627: connecting...
2019-07-10T19:57:50Z |  16 | reconnect | DBG | ssl:127.0.0.1:38627: entering CONNECTING
2019-07-10T19:57:50Z |  17 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  18 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  19 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  20 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  21 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  22 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  23 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  24 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  25 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  26 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:50Z |  27 | reconnect | INFO | ssl:127.0.0.1:38627: connected
2019-07-10T19:57:50Z |  28 | reconnect | DBG | ssl:127.0.0.1:38627: entering ACTIVE
2019-07-10T19:57:50Z |  29 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="get_schema", params=["_Server","ff61df02-a34c-11e9-9ea0-34e12ddfbbd2"], id=0
2019-07-10T19:57:50Z |  30 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:50Z |  31 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:50Z |  32 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result={"cksum":"3236486585 698","name":"_Server","tables":{"Database":{"columns":{"cid":{"type":{"key":"uuid","min":0}},"connected":{"type":"boolean"},"index":{"type":{"key":"integer","min":0}},"leader":{"type":"boolean"},"model":{"type":{"key":{"enum":["set",["clustered","standalone"]],"type":"string"}}},"name":{"type":"string"},"schema":{"type":{"key":"string","min":0}},"sid":{"type":{"key":"uuid","min":0}}}}},"version":"1.1.0"}, id=0
2019-07-10T19:57:50Z |  33 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="monitor", params=["_Server","ff61df03-a34c-11e9-9ea0-34e12ddfbbd2",{"Database":[{"columns":["index","name","cid","connected","sid","model","leader","schema"]}]}], id=1
2019-07-10T19:57:50Z |  34 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:50Z |  35 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result={"Database":{"869cda25-6f0d-42db-b423-fca0b2f2c0f3":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"idltest","schema":"{\"name\":\"idltest\",\"tables\":{\"link1\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"k\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"}}},\"ka\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"l2\":{\"type\":{\"key\":{\"refTable\":\"link2\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"link2\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"l1\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"simple\":{\"columns\":{\"b\":{\"type\":\"boolean\"},\"ba\":{\"type\":{\"key\":\"boolean\",\"min\":0}},\"i\":{\"type\":\"integer\"},\"ia\":{\"type\":{\"key\":\"integer\",\"max\":\"unlimited\",\"min\":0}},\"r\":{\"t
 ype\":\"real\"},\"ra\":{\"type\":{\"key\":\"real\",\"max\":\"unlimited\",\"min\":0}},\"s\":{\"type\":\"string\"},\"sa\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0}},\"u\":{\"type\":\"uuid\"},\"ua\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple2\":{\"columns\":{\"imap\":{\"type\":{\"key\":{\"maxInteger\":4095,\"minInteger\":0,\"type\":\"integer\"},\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}},\"name\":{\"type\":\"string\"},\"smap\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}}},\"isRoot\":true},\"simple3\":{\"columns\":{\"name\":{\"type\":\"string\"},\"uref\":{\"type\":{\"key\":{\"refTable\":\"simple4\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"uset\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple4\":{\"columns\":{\"name\":{\"type\":\"string\"}}},\"singleton\":{\"columns\":{\"name\":{\"type\":\"string\"}},\"isRoot
 \":true,\"maxRows\":1}},\"version\":\"1.2.3\"}","sid":["set",[]]}},"8b4cbe1b-4468-4fee-abde-3b7d47768609":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"_Server","schema":"{\"cksum\":\"3236486585 698\",\"name\":\"_Server\",\"tables\":{\"Database\":{\"columns\":{\"cid\":{\"type\":{\"key\":\"uuid\",\"min\":0}},\"connected\":{\"type\":\"boolean\"},\"index\":{\"type\":{\"key\":\"integer\",\"min\":0}},\"leader\":{\"type\":\"boolean\"},\"model\":{\"type\":{\"key\":{\"enum\":[\"set\",[\"clustered\",\"standalone\"]],\"type\":\"string\"}}},\"name\":{\"type\":\"string\"},\"schema\":{\"type\":{\"key\":\"string\",\"min\":0}},\"sid\":{\"type\":{\"key\":\"uuid\",\"min\":0}}}}},\"version\":\"1.1.0\"}","sid":["set",[]]}}}}, id=1
2019-07-10T19:57:50Z |  36 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="monitor_cond", params=["idltest","ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"link1":[{"columns":["i","k","l2","ka"]}],"link2":[{"columns":["i","l1"]}],"simple":[{"columns":["b","ba","i","s","r","u","ra","ia","sa","ua"]}],"simple2":[{"columns":["smap","name","imap"]}],"simple3":[{"columns":["uset","uref","name"]}],"simple4":[{"columns":["name"]}],"singleton":[{"columns":["name"]}]}], id=2
2019-07-10T19:57:50Z |  37 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="set_db_change_aware", params=[true], id=3
2019-07-10T19:57:50Z |  38 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result={}, id=2
2019-07-10T19:57:50Z |  39 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result={}, id=3
2019-07-10T19:57:50Z |  40 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"insert","row":{"b":true,"ba":["set",[true]],"i":1,"ia":["set",[1,2,3]],"r":2,"ra":["set",[-0.5]],"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]},"table":"simple"},{"op":"insert","row":{},"table":"simple"}], id=4
2019-07-10T19:57:50Z |  41 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  42 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"uuid":["uuid","27465769-398f-41ef-b1c0-c95e7097c56f"]},{"uuid":["uuid","44f32e1a-3e90-4af1-99df-ea62d4105087"]}], id=4
#0# = 27465769-398f-41ef-b1c0-c95e7097c56f
#1# = 44f32e1a-3e90-4af1-99df-ea62d4105087
2019-07-10T19:57:50Z |  43 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"27465769-398f-41ef-b1c0-c95e7097c56f":{"insert":{"b":true,"ba":true,"i":1,"ia":["set",[1,2,3]],"r":2,"ra":-0.5,"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},"44f32e1a-3e90-4af1-99df-ea62d4105087":{"insert":{}}}}]
2019-07-10T19:57:50Z |  44 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"update","row":{"b":true},"table":"simple","where":[]}], id=5
2019-07-10T19:57:50Z |  45 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  46 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"count":2}], id=5
2019-07-10T19:57:50Z |  47 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"b":true}}}}]
2019-07-10T19:57:50Z |  48 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"update","row":{"r":123.5},"table":"simple","where":[]}], id=6
2019-07-10T19:57:50Z |  49 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  50 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"count":2}], id=6
2019-07-10T19:57:50Z |  51 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"27465769-398f-41ef-b1c0-c95e7097c56f":{"modify":{"r":123.5}},"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"r":123.5}}}}]
2019-07-10T19:57:50Z |  52 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"insert","row":{"b":false,"ba":["set",[false]],"i":-1,"ia":["set",[1]],"r":125,"ra":["set",[1.5]],"s":"","sa":["set",[]],"ua":["set",[]]},"table":"simple"}], id=7
2019-07-10T19:57:50Z |  53 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  54 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"uuid":["uuid","9a543c13-2b92-4be1-89e2-60fdb1171566"]}], id=7
#2# = 9a543c13-2b92-4be1-89e2-60fdb1171566
2019-07-10T19:57:50Z |  55 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"9a543c13-2b92-4be1-89e2-60fdb1171566":{"insert":{"ba":false,"i":-1,"ia":1,"r":125,"ra":1.5}}}}]
2019-07-10T19:57:50Z |  56 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"update","row":{"s":"newstring"},"table":"simple","where":[["i","<",1]]}], id=8
2019-07-10T19:57:50Z |  57 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  58 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"count":2}], id=8
2019-07-10T19:57:50Z |  59 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"s":"newstring"}},"9a543c13-2b92-4be1-89e2-60fdb1171566":{"modify":{"s":"newstring"}}}}]
2019-07-10T19:57:50Z |  60 | jsonrpc | DBG | ssl:127.0.0.1:38627: send request, method="transact", params=["idltest",{"op":"delete","table":"simple","where":[["i","==",0]]}], id=9
2019-07-10T19:57:50Z |  61 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:50Z |  62 | jsonrpc | DBG | ssl:127.0.0.1:38627: received reply, result=[{"count":1}], id=9
2019-07-10T19:57:50Z |  63 | jsonrpc | DBG | ssl:127.0.0.1:38627: received notification, method="update2", params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"delete":null}}}]
2019-07-10T19:57:50Z |  64 | reconnect | DBG | ssl:127.0.0.1:38627: entering RECONNECT
2019-07-10T19:57:50Z |  65 | reconnect | INFO | ssl:127.0.0.1:38627: connection closed by client
2019-07-10T19:57:50Z |  66 | reconnect | DBG | ssl:127.0.0.1:38627: entering BACKOFF
Traceback (most recent call last):
  File "../../../../tests/test-ovsdb.py", line 962, in <module>
    main(sys.argv)
  File "../../../../tests/test-ovsdb.py", line 957, in main
    func(*args)
  File "../../../../tests/test-ovsdb.py", line 706, in do_idl
    while idl.change_seqno == seqno and not idl.run():
  File "/home/blp/nicira/ovs/python/ovs/db/idl.py", line 242, in run
    self._session.run()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 538, in run
    self.__disconnect()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 454, in __disconnect
    self.rpc.close()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 196, in close
    self.stream.close()
  File "/home/blp/nicira/ovs/python/ovs/stream.py", line 831, in close
    self.socket.shutdown()
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1993, in shutdown
    self._raise_ssl_error(self._ssl, result)
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1631, in _raise_ssl_error
    raise SysCallError(errno, errorcode.get(errno))
OpenSSL.SSL.SysCallError: (9, 'EBADF')
stdout:
000: empty
001: {"error":null,"result":[{"uuid":["uuid","27465769-398f-41ef-b1c0-c95e7097c56f"]},{"uuid":["uuid","44f32e1a-3e90-4af1-99df-ea62d4105087"]}]}
002: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
002: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
003: {"error":null,"result":[{"count":2}]}
004: i=0 r=0 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
004: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
005: {"error":null,"result":[{"count":2}]}
006: i=0 r=123.5 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
006: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
007: {"error":null,"result":[{"uuid":["uuid","9a543c13-2b92-4be1-89e2-60fdb1171566"]}]}
008: i=0 r=123.5 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
008: i=-1 r=125 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
008: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
009: {"error":null,"result":[{"count":2}]}
010: i=0 r=123.5 b=true s=newstring u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
010: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
010: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
011: {"error":null,"result":[{"count":1}]}
012: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
012: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=27465769-398f-41ef-b1c0-c95e7097c56f
013: reconnect
../../tests/ovsdb-idl.at:351: exit code was 1, expected 0
2108. ovsdb-idl.at:351: 2108. simple idl, initially empty, various ops - Python2 - SSL (ovsdb-idl.at:351): FAILED (ovsdb-idl.at:351)

#                             -*- compilation -*-
2439. ovsdb-idl.at:1452: testing simple idl verify notify - Python2 - SSL ...
../../tests/ovsdb-idl.at:1452: ovsdb-tool create db $abs_srcdir/idltest.ovsschema
stderr:
stdout:
../../tests/ovsdb-idl.at:1452: ovsdb-server -vconsole:warn --log-file --detach --no-chdir \
             --pidfile \
             --private-key=$PKIDIR/testpki-privkey2.pem \
             --certificate=$PKIDIR/testpki-cert2.pem \
             --ca-cert=$PKIDIR/testpki-cacert.pem \
             --remote=pssl:0:127.0.0.1 db
ovsdb-idl.at:1452: waiting until TCP_PORT=`sed -n 's/.*0:.*: listening on port \([0-9]*\)$/\1/p' "ovsdb-server.log"` && test X != X"$TCP_PORT"...
ovsdb-idl.at:1452: wait succeeded immediately
../../tests/ovsdb-idl.at:1452: $PYTHON2 $srcdir/test-ovsdb.py  -t10 idl $srcdir/idltest.ovsschema \
             ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \
             $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem 'track-notify' \
    '["idltest",
      {"op": "insert",
       "table": "simple",
       "row": {"i": 1,
               "r": 2.0,
               "b": true,
               "s": "mystring",
               "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
               "ia": ["set", [1, 2, 3]],
               "ra": ["set", [-0.5]],
               "ba": ["set", [true]],
               "sa": ["set", ["abc", "def"]],
               "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
                              ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
      {"op": "insert",
       "table": "simple",
       "row": {}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [],
       "row": {"b": false}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [],
       "row": {"r": 123.5}}]' \
    '["idltest",
      {"op": "insert",
       "table": "simple",
       "row": {"i": -1,
               "r": 125,
               "b": false,
               "s": "",
               "ia": ["set", [1]],
               "ra": ["set", [1.5]],
               "ba": ["set", [false]],
               "sa": ["set", []],
               "ua": ["set", []]}}]' \
    '["idltest",
      {"op": "update",
       "table": "simple",
       "where": [["i", "<", 1]],
       "row": {"s": "newstring"}}]' \
    '["idltest",
      {"op": "delete",
       "table": "simple",
       "where": [["i", "==", 0]]}]' \
    'reconnect'
stderr:
2019-07-10T19:57:51Z |  0  | reconnect | DBG | ssl:127.0.0.1:41187: entering BACKOFF
2019-07-10T19:57:51Z |  1  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  2  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  3  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  4  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  5  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  6  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  7  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  8  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  9  | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  10 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  11 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  12 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  13 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  14 | poller | DBG | [POLLOUT] on fd 3
2019-07-10T19:57:51Z |  15 | reconnect | INFO | ssl:127.0.0.1:41187: connecting...
2019-07-10T19:57:51Z |  16 | reconnect | DBG | ssl:127.0.0.1:41187: entering CONNECTING
2019-07-10T19:57:51Z |  17 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  18 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  19 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  20 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  21 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  22 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  23 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  24 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  25 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  26 | poller | DBG | [POLLOUT] on fd 4
2019-07-10T19:57:51Z |  27 | reconnect | INFO | ssl:127.0.0.1:41187: connected
2019-07-10T19:57:51Z |  28 | reconnect | DBG | ssl:127.0.0.1:41187: entering ACTIVE
2019-07-10T19:57:51Z |  29 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="get_schema", params=["_Server","ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2"], id=0
2019-07-10T19:57:51Z |  30 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:51Z |  31 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:51Z |  32 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result={"cksum":"3236486585 698","name":"_Server","tables":{"Database":{"columns":{"cid":{"type":{"key":"uuid","min":0}},"connected":{"type":"boolean"},"index":{"type":{"key":"integer","min":0}},"leader":{"type":"boolean"},"model":{"type":{"key":{"enum":["set",["clustered","standalone"]],"type":"string"}}},"name":{"type":"string"},"schema":{"type":{"key":"string","min":0}},"sid":{"type":{"key":"uuid","min":0}}}}},"version":"1.1.0"}, id=0
2019-07-10T19:57:51Z |  33 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="monitor", params=["_Server","ff8c3ded-a34c-11e9-9ea0-34e12ddfbbd2",{"Database":[{"columns":["index","name","cid","connected","sid","model","leader","schema"]}]}], id=1
2019-07-10T19:57:51Z |  34 | poller | DBG | [POLLIN] on fd 4
2019-07-10T19:57:51Z |  35 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result={"Database":{"239e9f59-7b01-4a90-a4a6-843016603201":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"_Server","schema":"{\"cksum\":\"3236486585 698\",\"name\":\"_Server\",\"tables\":{\"Database\":{\"columns\":{\"cid\":{\"type\":{\"key\":\"uuid\",\"min\":0}},\"connected\":{\"type\":\"boolean\"},\"index\":{\"type\":{\"key\":\"integer\",\"min\":0}},\"leader\":{\"type\":\"boolean\"},\"model\":{\"type\":{\"key\":{\"enum\":[\"set\",[\"clustered\",\"standalone\"]],\"type\":\"string\"}}},\"name\":{\"type\":\"string\"},\"schema\":{\"type\":{\"key\":\"string\",\"min\":0}},\"sid\":{\"type\":{\"key\":\"uuid\",\"min\":0}}}}},\"version\":\"1.1.0\"}","sid":["set",[]]}},"9211a231-3a07-4cd6-9e1f-687dc969cc36":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"idltest","schema":"{\"name\":\"idltest\"
 ,\"tables\":{\"link1\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"k\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"}}},\"ka\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"l2\":{\"type\":{\"key\":{\"refTable\":\"link2\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"link2\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"l1\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"simple\":{\"columns\":{\"b\":{\"type\":\"boolean\"},\"ba\":{\"type\":{\"key\":\"boolean\",\"min\":0}},\"i\":{\"type\":\"integer\"},\"ia\":{\"type\":{\"key\":\"integer\",\"max\":\"unlimited\",\"min\":0}},\"r\":{\"type\":\"real\"},\"ra\":{\"type\":{\"key\":\"real\",\"max\":\"unlimited\",\"min\":0}},\"s\":{\"type\":\"string\"},\"sa\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0}},\"u\":{\"type\":\"uuid\"},\"ua\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"is
 Root\":true},\"simple2\":{\"columns\":{\"imap\":{\"type\":{\"key\":{\"maxInteger\":4095,\"minInteger\":0,\"type\":\"integer\"},\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}},\"name\":{\"type\":\"string\"},\"smap\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}}},\"isRoot\":true},\"simple3\":{\"columns\":{\"name\":{\"type\":\"string\"},\"uref\":{\"type\":{\"key\":{\"refTable\":\"simple4\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"uset\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple4\":{\"columns\":{\"name\":{\"type\":\"string\"}}},\"singleton\":{\"columns\":{\"name\":{\"type\":\"string\"}},\"isRoot\":true,\"maxRows\":1}},\"version\":\"1.2.3\"}","sid":["set",[]]}}}}, id=1
2019-07-10T19:57:51Z |  36 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="monitor_cond", params=["idltest","ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"link1":[{"columns":["i","k","l2","ka"]}],"link2":[{"columns":["i","l1"]}],"simple":[{"columns":["b","ba","i","s","r","u","ra","ia","sa","ua"]}],"simple2":[{"columns":["smap","name","imap"]}],"simple3":[{"columns":["uset","uref","name"]}],"simple4":[{"columns":["name"]}],"singleton":[{"columns":["name"]}]}], id=2
2019-07-10T19:57:51Z |  37 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="set_db_change_aware", params=[true], id=3
2019-07-10T19:57:51Z |  38 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result={}, id=2
2019-07-10T19:57:51Z |  39 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result={}, id=3
2019-07-10T19:57:51Z |  40 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"insert","row":{"b":true,"ba":["set",[true]],"i":1,"ia":["set",[1,2,3]],"r":2,"ra":["set",[-0.5]],"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]},"table":"simple"},{"op":"insert","row":{},"table":"simple"}], id=4
2019-07-10T19:57:51Z |  41 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  42 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"uuid":["uuid","a4f6fb38-66b3-43e4-b581-ecb2a64e6649"]},{"uuid":["uuid","8af7b362-7d87-4e5a-bdee-7daaebff2f3e"]}], id=4
#0# = a4f6fb38-66b3-43e4-b581-ecb2a64e6649
#1# = 8af7b362-7d87-4e5a-bdee-7daaebff2f3e
2019-07-10T19:57:51Z |  43 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"insert":{}},"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"insert":{"b":true,"ba":true,"i":1,"ia":["set",[1,2,3]],"r":2,"ra":-0.5,"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}}}}]
2019-07-10T19:57:51Z |  44 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"update","row":{"b":false},"table":"simple","where":[]}], id=5
2019-07-10T19:57:51Z |  45 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  46 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"count":2}], id=5
2019-07-10T19:57:51Z |  47 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"modify":{"b":false}}}}]
2019-07-10T19:57:51Z |  48 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"update","row":{"r":123.5},"table":"simple","where":[]}], id=6
2019-07-10T19:57:51Z |  49 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  50 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"count":2}], id=6
2019-07-10T19:57:51Z |  51 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"modify":{"r":123.5}},"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"modify":{"r":123.5}}}}]
2019-07-10T19:57:51Z |  52 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"insert","row":{"b":false,"ba":["set",[false]],"i":-1,"ia":["set",[1]],"r":125,"ra":["set",[1.5]],"s":"","sa":["set",[]],"ua":["set",[]]},"table":"simple"}], id=7
2019-07-10T19:57:51Z |  53 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  54 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"uuid":["uuid","eff44ed3-4002-4da4-9877-d41b3364a894"]}], id=7
#2# = eff44ed3-4002-4da4-9877-d41b3364a894
2019-07-10T19:57:51Z |  55 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"eff44ed3-4002-4da4-9877-d41b3364a894":{"insert":{"ba":false,"i":-1,"ia":1,"r":125,"ra":1.5}}}}]
2019-07-10T19:57:51Z |  56 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"update","row":{"s":"newstring"},"table":"simple","where":[["i","<",1]]}], id=8
2019-07-10T19:57:51Z |  57 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  58 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"count":2}], id=8
2019-07-10T19:57:51Z |  59 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"modify":{"s":"newstring"}},"eff44ed3-4002-4da4-9877-d41b3364a894":{"modify":{"s":"newstring"}}}}]
2019-07-10T19:57:51Z |  60 | jsonrpc | DBG | ssl:127.0.0.1:41187: send request, method="transact", params=["idltest",{"op":"delete","table":"simple","where":[["i","==",0]]}], id=9
2019-07-10T19:57:51Z |  61 | poller | DBG | [POLLIN] on fd 3
2019-07-10T19:57:51Z |  62 | jsonrpc | DBG | ssl:127.0.0.1:41187: received reply, result=[{"count":1}], id=9
2019-07-10T19:57:51Z |  63 | jsonrpc | DBG | ssl:127.0.0.1:41187: received notification, method="update2", params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"delete":null}}}]
2019-07-10T19:57:51Z |  64 | reconnect | DBG | ssl:127.0.0.1:41187: entering RECONNECT
2019-07-10T19:57:51Z |  65 | reconnect | INFO | ssl:127.0.0.1:41187: connection closed by client
2019-07-10T19:57:51Z |  66 | reconnect | DBG | ssl:127.0.0.1:41187: entering BACKOFF
Traceback (most recent call last):
  File "../../../../tests/test-ovsdb.py", line 962, in <module>
    main(sys.argv)
  File "../../../../tests/test-ovsdb.py", line 957, in main
    func(*args)
  File "../../../../tests/test-ovsdb.py", line 706, in do_idl
    while idl.change_seqno == seqno and not idl.run():
  File "/home/blp/nicira/ovs/python/ovs/db/idl.py", line 242, in run
    self._session.run()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 538, in run
    self.__disconnect()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 454, in __disconnect
    self.rpc.close()
  File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 196, in close
    self.stream.close()
  File "/home/blp/nicira/ovs/python/ovs/stream.py", line 831, in close
    self.socket.shutdown()
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1993, in shutdown
    self._raise_ssl_error(self._ssl, result)
  File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1631, in _raise_ssl_error
    raise SysCallError(errno, errorcode.get(errno))
OpenSSL.SSL.SysCallError: (9, 'EBADF')
stdout:
000: event:create, row={uuid=239e9f59-7b01-4a90-a4a6-843016603201}, updates=None
000: event:create, row={uuid=9211a231-3a07-4cd6-9e1f-687dc969cc36}, updates=None
000: empty
001: {"error":null,"result":[{"uuid":["uuid","a4f6fb38-66b3-43e4-b581-ecb2a64e6649"]},{"uuid":["uuid","8af7b362-7d87-4e5a-bdee-7daaebff2f3e"]}]}
002: event:create, row={i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates=None
002: event:create, row={i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates=None
002: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
002: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
003: {"error":null,"result":[{"count":2}]}
004: event:update, row={i=1 r=2 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates={b=true uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}
004: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
004: i=1 r=2 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
005: {"error":null,"result":[{"count":2}]}
006: event:update, row={i=0 r=123.5 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates={r=0 uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}
006: event:update, row={i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates={r=2 uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}
006: i=0 r=123.5 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
006: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
007: {"error":null,"result":[{"uuid":["uuid","eff44ed3-4002-4da4-9877-d41b3364a894"]}]}
008: event:create, row={i=-1 r=125 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894}, updates=None
008: i=0 r=123.5 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
008: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
008: i=-1 r=125 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894
009: {"error":null,"result":[{"count":2}]}
010: event:update, row={i=0 r=123.5 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates={s= uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}
010: event:update, row={i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894}, updates={s= uuid=eff44ed3-4002-4da4-9877-d41b3364a894}
010: i=0 r=123.5 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
010: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
010: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894
011: {"error":null,"result":[{"count":1}]}
012: event:delete, row={i=0 r=123.5 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates=None
012: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9 aad11ef0-816a-4b01-93e6-03b8b4256b98] uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
012: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894
013: reconnect
../../tests/ovsdb-idl.at:1452: exit code was 1, expected 0
2439. ovsdb-idl.at:1452: 2439. simple idl verify notify - Python2 - SSL (ovsdb-idl.at:1452): FAILED (ovsdb-idl.at:1452)
Terry Wilson July 11, 2019, 1:16 p.m. UTC | #5
Sorry about that. The dangers of multiple windows and multiple ovs
directories. "Why is this passing for me?!" Oh... The new patch just
ignores all SSL errors like lib/stream-ssl.c's ssl_close() instead of just
the want read/write.

On Wed, Jul 10, 2019 at 2:59 PM Ben Pfaff <blp@ovn.org> wrote:

> On Wed, Jul 10, 2019 at 11:07:16AM -0500, Terry Wilson wrote:
> > Without shutting down the SSL connection, log messages like:
> >
> > stream_ssl|WARN|SSL_read: unexpected SSL connection close
> > jsonrpc|WARN|ssl:127.0.0.1:47052: receive error: Protocol error
> > reconnect|WARN|ssl:127.0.0.1:47052: connection dropped (Protocol error)
> >
> > would occur whenever the socket is closed. This just adds an
> > SSLStream.close() that calls shutdown() and ignores read/write
> > errors.
> >
> > Signed-off-by: Terry Wilson <twilson@redhat.com>
>
> Thanks for the patch.
>
> With this applied, I get two test failures, details below.
>
> ## ------------------------ ##
> ## Summary of the failures. ##
> ## ------------------------ ##
> Failed tests:
> openvswitch 2.11.90 test suite test groups:
>
>  NUM: FILE-NAME:LINE     TEST-GROUP-NAME
>       KEYWORDS
>
>  2108: ovsdb-idl.at:351   simple idl, initially empty, various ops -
> Python2 - SSL
>       ovsdb server idl positive python with ssl socket
>  2439: ovsdb-idl.at:1452  simple idl verify notify - Python2 - SSL
>       ovsdb server idl positive python with ssl socket notify
>
> ## ---------------------- ##
> ## Detailed failed tests. ##
> ## ---------------------- ##
>
> #                             -*- compilation -*-
> 2108. ovsdb-idl.at:351: testing simple idl, initially empty, various ops
> - Python2 - SSL ...
> ../../tests/ovsdb-idl.at:351: ovsdb-tool create db
> $abs_srcdir/idltest.ovsschema
> stderr:
> stdout:
> ../../tests/ovsdb-idl.at:351: ovsdb-server -vconsole:warn --log-file
> --detach --no-chdir \
>              --pidfile \
>              --private-key=$PKIDIR/testpki-privkey2.pem \
>              --certificate=$PKIDIR/testpki-cert2.pem \
>              --ca-cert=$PKIDIR/testpki-cacert.pem \
>              --remote=pssl:0:127.0.0.1 db
> ovsdb-idl.at:351: waiting until TCP_PORT=`sed -n 's/.*0:.*: listening on
> port \([0-9]*\)$/\1/p' "ovsdb-server.log"` && test X != X"$TCP_PORT"...
> ovsdb-idl.at:351: wait succeeded immediately
> ../../tests/ovsdb-idl.at:351: $PYTHON $srcdir/test-ovsdb.py  -t10 idl
> $srcdir/idltest.ovsschema \
>              ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \
>              $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem
> '["idltest",
>       {"op": "insert",
>        "table": "simple",
>        "row": {"i": 1,
>                "r": 2.0,
>                "b": true,
>                "s": "mystring",
>                "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
>                "ia": ["set", [1, 2, 3]],
>                "ra": ["set", [-0.5]],
>                "ba": ["set", [true]],
>                "sa": ["set", ["abc", "def"]],
>                "ua": ["set", [["uuid",
> "69443985-7806-45e2-b35f-574a04e720f9"],
>                               ["uuid",
> "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
>       {"op": "insert",
>        "table": "simple",
>        "row": {}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [],
>        "row": {"b": true}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [],
>        "row": {"r": 123.5}}]' \
>     '["idltest",
>       {"op": "insert",
>        "table": "simple",
>        "row": {"i": -1,
>                "r": 125,
>                "b": false,
>                "s": "",
>                "ia": ["set", [1]],
>                "ra": ["set", [1.5]],
>                "ba": ["set", [false]],
>                "sa": ["set", []],
>                "ua": ["set", []]}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [["i", "<", 1]],
>        "row": {"s": "newstring"}}]' \
>     '["idltest",
>       {"op": "delete",
>        "table": "simple",
>        "where": [["i", "==", 0]]}]' \
>     'reconnect'
> stderr:
> 2019-07-10T19:57:50Z |  0  | reconnect | DBG | ssl:127.0.0.1:38627:
> entering BACKOFF
> 2019-07-10T19:57:50Z |  1  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  2  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  3  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  4  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  5  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  6  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  7  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  8  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  9  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  10 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  11 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  12 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  13 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  14 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:50Z |  15 | reconnect | INFO | ssl:127.0.0.1:38627:
> connecting...
> 2019-07-10T19:57:50Z |  16 | reconnect | DBG | ssl:127.0.0.1:38627:
> entering CONNECTING
> 2019-07-10T19:57:50Z |  17 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  18 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  19 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  20 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  21 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  22 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  23 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  24 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  25 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  26 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:50Z |  27 | reconnect | INFO | ssl:127.0.0.1:38627:
> connected
> 2019-07-10T19:57:50Z |  28 | reconnect | DBG | ssl:127.0.0.1:38627:
> entering ACTIVE
> 2019-07-10T19:57:50Z |  29 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="get_schema",
> params=["_Server","ff61df02-a34c-11e9-9ea0-34e12ddfbbd2"], id=0
> 2019-07-10T19:57:50Z |  30 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:50Z |  31 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:50Z |  32 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result={"cksum":"3236486585
> 698","name":"_Server","tables":{"Database":{"columns":{"cid":{"type":{"key":"uuid","min":0}},"connected":{"type":"boolean"},"index":{"type":{"key":"integer","min":0}},"leader":{"type":"boolean"},"model":{"type":{"key":{"enum":["set",["clustered","standalone"]],"type":"string"}}},"name":{"type":"string"},"schema":{"type":{"key":"string","min":0}},"sid":{"type":{"key":"uuid","min":0}}}}},"version":"1.1.0"},
> id=0
> 2019-07-10T19:57:50Z |  33 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="monitor",
> params=["_Server","ff61df03-a34c-11e9-9ea0-34e12ddfbbd2",{"Database":[{"columns":["index","name","cid","connected","sid","model","leader","schema"]}]}],
> id=1
> 2019-07-10T19:57:50Z |  34 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:50Z |  35 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply,
> result={"Database":{"869cda25-6f0d-42db-b423-fca0b2f2c0f3":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"idltest","schema":"{\"name\":\"idltest\",\"tables\":{\"link1\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"k\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"}}},\"ka\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"l2\":{\"type\":{\"key\":{\"refTable\":\"link2\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"link2\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"l1\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"simple\":{\"columns\":{\"b\":{\"type\":\"boolean\"},\"ba\":{\"type\":{\"key\":\"boolean\",\"min\":0}},\"i\":{\"type\":\"integer\"},\"ia\":{\"type\":{\"key\":\"integer\",\"max\":\"unlimited\",\"min\":0}},\"r\":{\"type\":\"real\"},\"ra\":{\"type\":{\"key\":\"real\",\"max\":\"unlimited\",\"min\"
 :0}},\"s\":{\"type\":\"string\"},\"sa\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0}},\"u\":{\"type\":\"uuid\"},\"ua\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple2\":{\"columns\":{\"imap\":{\"type\":{\"key\":{\"maxInteger\":4095,\"minInteger\":0,\"type\":\"integer\"},\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}},\"name\":{\"type\":\"string\"},\"smap\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}}},\"isRoot\":true},\"simple3\":{\"columns\":{\"name\":{\"type\":\"string\"},\"uref\":{\"type\":{\"key\":{\"refTable\":\"simple4\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"uset\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple4\":{\"columns\":{\"name\":{\"type\":\"string\"}}},\"singleton\":{\"columns\":{\"name\":{\"type\":\"string\"}},\"isRoot\":true,\"maxRows\":1}},\"version\":\"1.2.3\"}","sid":["set",[]]}},"8b4cbe1b-446
 8-4fee-abde-3b7d47768609":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"_Server","schema":"{\"cksum\":\"3236486585
> 698\",\"name\":\"_Server\",\"tables\":{\"Database\":{\"columns\":{\"cid\":{\"type\":{\"key\":\"uuid\",\"min\":0}},\"connected\":{\"type\":\"boolean\"},\"index\":{\"type\":{\"key\":\"integer\",\"min\":0}},\"leader\":{\"type\":\"boolean\"},\"model\":{\"type\":{\"key\":{\"enum\":[\"set\",[\"clustered\",\"standalone\"]],\"type\":\"string\"}}},\"name\":{\"type\":\"string\"},\"schema\":{\"type\":{\"key\":\"string\",\"min\":0}},\"sid\":{\"type\":{\"key\":\"uuid\",\"min\":0}}}}},\"version\":\"1.1.0\"}","sid":["set",[]]}}}},
> id=1
> 2019-07-10T19:57:50Z |  36 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="monitor_cond",
> params=["idltest","ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"link1":[{"columns":["i","k","l2","ka"]}],"link2":[{"columns":["i","l1"]}],"simple":[{"columns":["b","ba","i","s","r","u","ra","ia","sa","ua"]}],"simple2":[{"columns":["smap","name","imap"]}],"simple3":[{"columns":["uset","uref","name"]}],"simple4":[{"columns":["name"]}],"singleton":[{"columns":["name"]}]}],
> id=2
> 2019-07-10T19:57:50Z |  37 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="set_db_change_aware", params=[true], id=3
> 2019-07-10T19:57:50Z |  38 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result={}, id=2
> 2019-07-10T19:57:50Z |  39 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result={}, id=3
> 2019-07-10T19:57:50Z |  40 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"insert","row":{"b":true,"ba":["set",[true]],"i":1,"ia":["set",[1,2,3]],"r":2,"ra":["set",[-0.5]],"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]},"table":"simple"},{"op":"insert","row":{},"table":"simple"}],
> id=4
> 2019-07-10T19:57:50Z |  41 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  42 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply,
> result=[{"uuid":["uuid","27465769-398f-41ef-b1c0-c95e7097c56f"]},{"uuid":["uuid","44f32e1a-3e90-4af1-99df-ea62d4105087"]}],
> id=4
> #0# = 27465769-398f-41ef-b1c0-c95e7097c56f
> #1# = 44f32e1a-3e90-4af1-99df-ea62d4105087
> 2019-07-10T19:57:50Z |  43 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"27465769-398f-41ef-b1c0-c95e7097c56f":{"insert":{"b":true,"ba":true,"i":1,"ia":["set",[1,2,3]],"r":2,"ra":-0.5,"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},"44f32e1a-3e90-4af1-99df-ea62d4105087":{"insert":{}}}}]
> 2019-07-10T19:57:50Z |  44 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"b":true},"table":"simple","where":[]}],
> id=5
> 2019-07-10T19:57:50Z |  45 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  46 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result=[{"count":2}], id=5
> 2019-07-10T19:57:50Z |  47 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"b":true}}}}]
> 2019-07-10T19:57:50Z |  48 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"r":123.5},"table":"simple","where":[]}],
> id=6
> 2019-07-10T19:57:50Z |  49 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  50 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result=[{"count":2}], id=6
> 2019-07-10T19:57:50Z |  51 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"27465769-398f-41ef-b1c0-c95e7097c56f":{"modify":{"r":123.5}},"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"r":123.5}}}}]
> 2019-07-10T19:57:50Z |  52 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"insert","row":{"b":false,"ba":["set",[false]],"i":-1,"ia":["set",[1]],"r":125,"ra":["set",[1.5]],"s":"","sa":["set",[]],"ua":["set",[]]},"table":"simple"}],
> id=7
> 2019-07-10T19:57:50Z |  53 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  54 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply,
> result=[{"uuid":["uuid","9a543c13-2b92-4be1-89e2-60fdb1171566"]}], id=7
> #2# = 9a543c13-2b92-4be1-89e2-60fdb1171566
> 2019-07-10T19:57:50Z |  55 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"9a543c13-2b92-4be1-89e2-60fdb1171566":{"insert":{"ba":false,"i":-1,"ia":1,"r":125,"ra":1.5}}}}]
> 2019-07-10T19:57:50Z |  56 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"s":"newstring"},"table":"simple","where":[["i","<",1]]}],
> id=8
> 2019-07-10T19:57:50Z |  57 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  58 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result=[{"count":2}], id=8
> 2019-07-10T19:57:50Z |  59 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"modify":{"s":"newstring"}},"9a543c13-2b92-4be1-89e2-60fdb1171566":{"modify":{"s":"newstring"}}}}]
> 2019-07-10T19:57:50Z |  60 | jsonrpc | DBG | ssl:127.0.0.1:38627: send
> request, method="transact",
> params=["idltest",{"op":"delete","table":"simple","where":[["i","==",0]]}],
> id=9
> 2019-07-10T19:57:50Z |  61 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:50Z |  62 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received reply, result=[{"count":1}], id=9
> 2019-07-10T19:57:50Z |  63 | jsonrpc | DBG | ssl:127.0.0.1:38627:
> received notification, method="update2",
> params=["ff61df02-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"44f32e1a-3e90-4af1-99df-ea62d4105087":{"delete":null}}}]
> 2019-07-10T19:57:50Z |  64 | reconnect | DBG | ssl:127.0.0.1:38627:
> entering RECONNECT
> 2019-07-10T19:57:50Z |  65 | reconnect | INFO | ssl:127.0.0.1:38627:
> connection closed by client
> 2019-07-10T19:57:50Z |  66 | reconnect | DBG | ssl:127.0.0.1:38627:
> entering BACKOFF
> Traceback (most recent call last):
>   File "../../../../tests/test-ovsdb.py", line 962, in <module>
>     main(sys.argv)
>   File "../../../../tests/test-ovsdb.py", line 957, in main
>     func(*args)
>   File "../../../../tests/test-ovsdb.py", line 706, in do_idl
>     while idl.change_seqno == seqno and not idl.run():
>   File "/home/blp/nicira/ovs/python/ovs/db/idl.py", line 242, in run
>     self._session.run()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 538, in run
>     self.__disconnect()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 454, in
> __disconnect
>     self.rpc.close()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 196, in close
>     self.stream.close()
>   File "/home/blp/nicira/ovs/python/ovs/stream.py", line 831, in close
>     self.socket.shutdown()
>   File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1993, in
> shutdown
>     self._raise_ssl_error(self._ssl, result)
>   File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1631, in
> _raise_ssl_error
>     raise SysCallError(errno, errorcode.get(errno))
> OpenSSL.SSL.SysCallError: (9, 'EBADF')
> stdout:
> 000: empty
> 001:
> {"error":null,"result":[{"uuid":["uuid","27465769-398f-41ef-b1c0-c95e7097c56f"]},{"uuid":["uuid","44f32e1a-3e90-4af1-99df-ea62d4105087"]}]}
> 002: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[]
> ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
> 002: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 003: {"error":null,"result":[{"count":2}]}
> 004: i=0 r=0 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[]
> ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
> 004: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 005: {"error":null,"result":[{"count":2}]}
> 006: i=0 r=123.5 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[]
> ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
> 006: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 007:
> {"error":null,"result":[{"uuid":["uuid","9a543c13-2b92-4be1-89e2-60fdb1171566"]}]}
> 008: i=0 r=123.5 b=true s= u=00000000-0000-0000-0000-000000000000 ia=[]
> ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
> 008: i=-1 r=125 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[1]
> ra=[1.5] ba=[false] sa=[] ua=[] uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
> 008: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 009: {"error":null,"result":[{"count":2}]}
> 010: i=0 r=123.5 b=true s=newstring u=00000000-0000-0000-0000-000000000000
> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=44f32e1a-3e90-4af1-99df-ea62d4105087
> 010: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000
> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[]
> uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
> 010: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 011: {"error":null,"result":[{"count":1}]}
> 012: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000
> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[]
> uuid=9a543c13-2b92-4be1-89e2-60fdb1171566
> 012: i=1 r=123.5 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=27465769-398f-41ef-b1c0-c95e7097c56f
> 013: reconnect
> ../../tests/ovsdb-idl.at:351: exit code was 1, expected 0
> 2108. ovsdb-idl.at:351: 2108. simple idl, initially empty, various ops -
> Python2 - SSL (ovsdb-idl.at:351): FAILED (ovsdb-idl.at:351)
>
> #                             -*- compilation -*-
> 2439. ovsdb-idl.at:1452: testing simple idl verify notify - Python2 - SSL
> ...
> ../../tests/ovsdb-idl.at:1452: ovsdb-tool create db
> $abs_srcdir/idltest.ovsschema
> stderr:
> stdout:
> ../../tests/ovsdb-idl.at:1452: ovsdb-server -vconsole:warn --log-file
> --detach --no-chdir \
>              --pidfile \
>              --private-key=$PKIDIR/testpki-privkey2.pem \
>              --certificate=$PKIDIR/testpki-cert2.pem \
>              --ca-cert=$PKIDIR/testpki-cacert.pem \
>              --remote=pssl:0:127.0.0.1 db
> ovsdb-idl.at:1452: waiting until TCP_PORT=`sed -n 's/.*0:.*: listening on
> port \([0-9]*\)$/\1/p' "ovsdb-server.log"` && test X != X"$TCP_PORT"...
> ovsdb-idl.at:1452: wait succeeded immediately
> ../../tests/ovsdb-idl.at:1452: $PYTHON2 $srcdir/test-ovsdb.py  -t10 idl
> $srcdir/idltest.ovsschema \
>              ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \
>              $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem
> 'track-notify' \
>     '["idltest",
>       {"op": "insert",
>        "table": "simple",
>        "row": {"i": 1,
>                "r": 2.0,
>                "b": true,
>                "s": "mystring",
>                "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
>                "ia": ["set", [1, 2, 3]],
>                "ra": ["set", [-0.5]],
>                "ba": ["set", [true]],
>                "sa": ["set", ["abc", "def"]],
>                "ua": ["set", [["uuid",
> "69443985-7806-45e2-b35f-574a04e720f9"],
>                               ["uuid",
> "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
>       {"op": "insert",
>        "table": "simple",
>        "row": {}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [],
>        "row": {"b": false}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [],
>        "row": {"r": 123.5}}]' \
>     '["idltest",
>       {"op": "insert",
>        "table": "simple",
>        "row": {"i": -1,
>                "r": 125,
>                "b": false,
>                "s": "",
>                "ia": ["set", [1]],
>                "ra": ["set", [1.5]],
>                "ba": ["set", [false]],
>                "sa": ["set", []],
>                "ua": ["set", []]}}]' \
>     '["idltest",
>       {"op": "update",
>        "table": "simple",
>        "where": [["i", "<", 1]],
>        "row": {"s": "newstring"}}]' \
>     '["idltest",
>       {"op": "delete",
>        "table": "simple",
>        "where": [["i", "==", 0]]}]' \
>     'reconnect'
> stderr:
> 2019-07-10T19:57:51Z |  0  | reconnect | DBG | ssl:127.0.0.1:41187:
> entering BACKOFF
> 2019-07-10T19:57:51Z |  1  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  2  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  3  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  4  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  5  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  6  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  7  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  8  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  9  | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  10 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  11 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  12 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  13 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  14 | poller | DBG | [POLLOUT] on fd 3
> 2019-07-10T19:57:51Z |  15 | reconnect | INFO | ssl:127.0.0.1:41187:
> connecting...
> 2019-07-10T19:57:51Z |  16 | reconnect | DBG | ssl:127.0.0.1:41187:
> entering CONNECTING
> 2019-07-10T19:57:51Z |  17 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  18 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  19 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  20 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  21 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  22 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  23 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  24 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  25 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  26 | poller | DBG | [POLLOUT] on fd 4
> 2019-07-10T19:57:51Z |  27 | reconnect | INFO | ssl:127.0.0.1:41187:
> connected
> 2019-07-10T19:57:51Z |  28 | reconnect | DBG | ssl:127.0.0.1:41187:
> entering ACTIVE
> 2019-07-10T19:57:51Z |  29 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="get_schema",
> params=["_Server","ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2"], id=0
> 2019-07-10T19:57:51Z |  30 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:51Z |  31 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:51Z |  32 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result={"cksum":"3236486585
> 698","name":"_Server","tables":{"Database":{"columns":{"cid":{"type":{"key":"uuid","min":0}},"connected":{"type":"boolean"},"index":{"type":{"key":"integer","min":0}},"leader":{"type":"boolean"},"model":{"type":{"key":{"enum":["set",["clustered","standalone"]],"type":"string"}}},"name":{"type":"string"},"schema":{"type":{"key":"string","min":0}},"sid":{"type":{"key":"uuid","min":0}}}}},"version":"1.1.0"},
> id=0
> 2019-07-10T19:57:51Z |  33 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="monitor",
> params=["_Server","ff8c3ded-a34c-11e9-9ea0-34e12ddfbbd2",{"Database":[{"columns":["index","name","cid","connected","sid","model","leader","schema"]}]}],
> id=1
> 2019-07-10T19:57:51Z |  34 | poller | DBG | [POLLIN] on fd 4
> 2019-07-10T19:57:51Z |  35 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply,
> result={"Database":{"239e9f59-7b01-4a90-a4a6-843016603201":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"_Server","schema":"{\"cksum\":\"3236486585
> 698\",\"name\":\"_Server\",\"tables\":{\"Database\":{\"columns\":{\"cid\":{\"type\":{\"key\":\"uuid\",\"min\":0}},\"connected\":{\"type\":\"boolean\"},\"index\":{\"type\":{\"key\":\"integer\",\"min\":0}},\"leader\":{\"type\":\"boolean\"},\"model\":{\"type\":{\"key\":{\"enum\":[\"set\",[\"clustered\",\"standalone\"]],\"type\":\"string\"}}},\"name\":{\"type\":\"string\"},\"schema\":{\"type\":{\"key\":\"string\",\"min\":0}},\"sid\":{\"type\":{\"key\":\"uuid\",\"min\":0}}}}},\"version\":\"1.1.0\"}","sid":["set",[]]}},"9211a231-3a07-4cd6-9e1f-687dc969cc36":{"new":{"cid":["set",[]],"connected":true,"index":["set",[]],"leader":true,"model":"standalone","name":"idltest","schema":"{\"name\":\"idltest\",\"tables\":{\"link1\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"k\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"}}},\"ka\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"l2\":{\"type\":{\"key\":{\"refTable\":\"link2
 \",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"link2\":{\"columns\":{\"i\":{\"type\":\"integer\"},\"l1\":{\"type\":{\"key\":{\"refTable\":\"link1\",\"type\":\"uuid\"},\"min\":0}}},\"isRoot\":true},\"simple\":{\"columns\":{\"b\":{\"type\":\"boolean\"},\"ba\":{\"type\":{\"key\":\"boolean\",\"min\":0}},\"i\":{\"type\":\"integer\"},\"ia\":{\"type\":{\"key\":\"integer\",\"max\":\"unlimited\",\"min\":0}},\"r\":{\"type\":\"real\"},\"ra\":{\"type\":{\"key\":\"real\",\"max\":\"unlimited\",\"min\":0}},\"s\":{\"type\":\"string\"},\"sa\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0}},\"u\":{\"type\":\"uuid\"},\"ua\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple2\":{\"columns\":{\"imap\":{\"type\":{\"key\":{\"maxInteger\":4095,\"minInteger\":0,\"type\":\"integer\"},\"max\":\"unlimited\",\"min\":0,\"value\":\"string\"}},\"name\":{\"type\":\"string\"},\"smap\":{\"type\":{\"key\":\"string\",\"max\":\"unlimited\",\"min\":0,\"
 value\":\"string\"}}},\"isRoot\":true},\"simple3\":{\"columns\":{\"name\":{\"type\":\"string\"},\"uref\":{\"type\":{\"key\":{\"refTable\":\"simple4\",\"type\":\"uuid\"},\"max\":\"unlimited\",\"min\":0}},\"uset\":{\"type\":{\"key\":\"uuid\",\"max\":\"unlimited\",\"min\":0}}},\"isRoot\":true},\"simple4\":{\"columns\":{\"name\":{\"type\":\"string\"}}},\"singleton\":{\"columns\":{\"name\":{\"type\":\"string\"}},\"isRoot\":true,\"maxRows\":1}},\"version\":\"1.2.3\"}","sid":["set",[]]}}}},
> id=1
> 2019-07-10T19:57:51Z |  36 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="monitor_cond",
> params=["idltest","ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"link1":[{"columns":["i","k","l2","ka"]}],"link2":[{"columns":["i","l1"]}],"simple":[{"columns":["b","ba","i","s","r","u","ra","ia","sa","ua"]}],"simple2":[{"columns":["smap","name","imap"]}],"simple3":[{"columns":["uset","uref","name"]}],"simple4":[{"columns":["name"]}],"singleton":[{"columns":["name"]}]}],
> id=2
> 2019-07-10T19:57:51Z |  37 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="set_db_change_aware", params=[true], id=3
> 2019-07-10T19:57:51Z |  38 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result={}, id=2
> 2019-07-10T19:57:51Z |  39 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result={}, id=3
> 2019-07-10T19:57:51Z |  40 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"insert","row":{"b":true,"ba":["set",[true]],"i":1,"ia":["set",[1,2,3]],"r":2,"ra":["set",[-0.5]],"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]},"table":"simple"},{"op":"insert","row":{},"table":"simple"}],
> id=4
> 2019-07-10T19:57:51Z |  41 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  42 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply,
> result=[{"uuid":["uuid","a4f6fb38-66b3-43e4-b581-ecb2a64e6649"]},{"uuid":["uuid","8af7b362-7d87-4e5a-bdee-7daaebff2f3e"]}],
> id=4
> #0# = a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> #1# = 8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 2019-07-10T19:57:51Z |  43 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"insert":{}},"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"insert":{"b":true,"ba":true,"i":1,"ia":["set",[1,2,3]],"r":2,"ra":-0.5,"s":"mystring","sa":["set",["abc","def"]],"u":["uuid","84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],"ua":["set",[["uuid","69443985-7806-45e2-b35f-574a04e720f9"],["uuid","aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}}}}]
> 2019-07-10T19:57:51Z |  44 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"b":false},"table":"simple","where":[]}],
> id=5
> 2019-07-10T19:57:51Z |  45 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  46 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result=[{"count":2}], id=5
> 2019-07-10T19:57:51Z |  47 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"modify":{"b":false}}}}]
> 2019-07-10T19:57:51Z |  48 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"r":123.5},"table":"simple","where":[]}],
> id=6
> 2019-07-10T19:57:51Z |  49 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  50 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result=[{"count":2}], id=6
> 2019-07-10T19:57:51Z |  51 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"modify":{"r":123.5}},"a4f6fb38-66b3-43e4-b581-ecb2a64e6649":{"modify":{"r":123.5}}}}]
> 2019-07-10T19:57:51Z |  52 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"insert","row":{"b":false,"ba":["set",[false]],"i":-1,"ia":["set",[1]],"r":125,"ra":["set",[1.5]],"s":"","sa":["set",[]],"ua":["set",[]]},"table":"simple"}],
> id=7
> 2019-07-10T19:57:51Z |  53 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  54 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply,
> result=[{"uuid":["uuid","eff44ed3-4002-4da4-9877-d41b3364a894"]}], id=7
> #2# = eff44ed3-4002-4da4-9877-d41b3364a894
> 2019-07-10T19:57:51Z |  55 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"eff44ed3-4002-4da4-9877-d41b3364a894":{"insert":{"ba":false,"i":-1,"ia":1,"r":125,"ra":1.5}}}}]
> 2019-07-10T19:57:51Z |  56 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"update","row":{"s":"newstring"},"table":"simple","where":[["i","<",1]]}],
> id=8
> 2019-07-10T19:57:51Z |  57 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  58 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result=[{"count":2}], id=8
> 2019-07-10T19:57:51Z |  59 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"modify":{"s":"newstring"}},"eff44ed3-4002-4da4-9877-d41b3364a894":{"modify":{"s":"newstring"}}}}]
> 2019-07-10T19:57:51Z |  60 | jsonrpc | DBG | ssl:127.0.0.1:41187: send
> request, method="transact",
> params=["idltest",{"op":"delete","table":"simple","where":[["i","==",0]]}],
> id=9
> 2019-07-10T19:57:51Z |  61 | poller | DBG | [POLLIN] on fd 3
> 2019-07-10T19:57:51Z |  62 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received reply, result=[{"count":1}], id=9
> 2019-07-10T19:57:51Z |  63 | jsonrpc | DBG | ssl:127.0.0.1:41187:
> received notification, method="update2",
> params=["ff8c3dec-a34c-11e9-9ea0-34e12ddfbbd2",{"simple":{"8af7b362-7d87-4e5a-bdee-7daaebff2f3e":{"delete":null}}}]
> 2019-07-10T19:57:51Z |  64 | reconnect | DBG | ssl:127.0.0.1:41187:
> entering RECONNECT
> 2019-07-10T19:57:51Z |  65 | reconnect | INFO | ssl:127.0.0.1:41187:
> connection closed by client
> 2019-07-10T19:57:51Z |  66 | reconnect | DBG | ssl:127.0.0.1:41187:
> entering BACKOFF
> Traceback (most recent call last):
>   File "../../../../tests/test-ovsdb.py", line 962, in <module>
>     main(sys.argv)
>   File "../../../../tests/test-ovsdb.py", line 957, in main
>     func(*args)
>   File "../../../../tests/test-ovsdb.py", line 706, in do_idl
>     while idl.change_seqno == seqno and not idl.run():
>   File "/home/blp/nicira/ovs/python/ovs/db/idl.py", line 242, in run
>     self._session.run()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 538, in run
>     self.__disconnect()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 454, in
> __disconnect
>     self.rpc.close()
>   File "/home/blp/nicira/ovs/python/ovs/jsonrpc.py", line 196, in close
>     self.stream.close()
>   File "/home/blp/nicira/ovs/python/ovs/stream.py", line 831, in close
>     self.socket.shutdown()
>   File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1993, in
> shutdown
>     self._raise_ssl_error(self._ssl, result)
>   File "/usr/lib/python2.7/dist-packages/OpenSSL/SSL.py", line 1631, in
> _raise_ssl_error
>     raise SysCallError(errno, errorcode.get(errno))
> OpenSSL.SSL.SysCallError: (9, 'EBADF')
> stdout:
> 000: event:create, row={uuid=239e9f59-7b01-4a90-a4a6-843016603201},
> updates=None
> 000: event:create, row={uuid=9211a231-3a07-4cd6-9e1f-687dc969cc36},
> updates=None
> 000: empty
> 001:
> {"error":null,"result":[{"uuid":["uuid","a4f6fb38-66b3-43e4-b581-ecb2a64e6649"]},{"uuid":["uuid","8af7b362-7d87-4e5a-bdee-7daaebff2f3e"]}]}
> 002: event:create, row={i=0 r=0 b=false s=
> u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[]
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates=None
> 002: event:create, row={i=1 r=2 b=true s=mystring
> u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true]
> sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates=None
> 002: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[]
> ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 002: i=1 r=2 b=true s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 003: {"error":null,"result":[{"count":2}]}
> 004: event:update, row={i=1 r=2 b=false s=mystring
> u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true]
> sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates={b=true
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}
> 004: i=0 r=0 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[] ra=[]
> ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 004: i=1 r=2 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 005: {"error":null,"result":[{"count":2}]}
> 006: event:update, row={i=0 r=123.5 b=false s=
> u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[]
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates={r=0
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}
> 006: event:update, row={i=1 r=123.5 b=false s=mystring
> u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1 ia=[1 2 3] ra=[-0.5] ba=[true]
> sa=[abc def] ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}, updates={r=2
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649}
> 006: i=0 r=123.5 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[]
> ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 006: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 007:
> {"error":null,"result":[{"uuid":["uuid","eff44ed3-4002-4da4-9877-d41b3364a894"]}]}
> 008: event:create, row={i=-1 r=125 b=false s=
> u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[]
> ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894}, updates=None
> 008: i=0 r=123.5 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[]
> ra=[] ba=[] sa=[] ua=[] uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 008: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 008: i=-1 r=125 b=false s= u=00000000-0000-0000-0000-000000000000 ia=[1]
> ra=[1.5] ba=[false] sa=[] ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894
> 009: {"error":null,"result":[{"count":2}]}
> 010: event:update, row={i=0 r=123.5 b=false s=newstring
> u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[]
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates={s=
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}
> 010: event:update, row={i=-1 r=125 b=false s=newstring
> u=00000000-0000-0000-0000-000000000000 ia=[1] ra=[1.5] ba=[false] sa=[]
> ua=[] uuid=eff44ed3-4002-4da4-9877-d41b3364a894}, updates={s=
> uuid=eff44ed3-4002-4da4-9877-d41b3364a894}
> 010: i=0 r=123.5 b=false s=newstring
> u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[]
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e
> 010: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 010: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000
> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[]
> uuid=eff44ed3-4002-4da4-9877-d41b3364a894
> 011: {"error":null,"result":[{"count":1}]}
> 012: event:delete, row={i=0 r=123.5 b=false s=newstring
> u=00000000-0000-0000-0000-000000000000 ia=[] ra=[] ba=[] sa=[] ua=[]
> uuid=8af7b362-7d87-4e5a-bdee-7daaebff2f3e}, updates=None
> 012: i=1 r=123.5 b=false s=mystring u=84f5c8f5-ac76-4dbc-a24f-8860eb407fc1
> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def]
> ua=[69443985-7806-45e2-b35f-574a04e720f9
> aad11ef0-816a-4b01-93e6-03b8b4256b98]
> uuid=a4f6fb38-66b3-43e4-b581-ecb2a64e6649
> 012: i=-1 r=125 b=false s=newstring u=00000000-0000-0000-0000-000000000000
> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[]
> uuid=eff44ed3-4002-4da4-9877-d41b3364a894
> 013: reconnect
> ../../tests/ovsdb-idl.at:1452: exit code was 1, expected 0
> 2439. ovsdb-idl.at:1452: 2439. simple idl verify notify - Python2 - SSL (
> ovsdb-idl.at:1452): FAILED (ovsdb-idl.at:1452)
>
diff mbox series

Patch

diff --git a/python/ovs/stream.py b/python/ovs/stream.py
index c15be4b..fd1045e 100644
--- a/python/ovs/stream.py
+++ b/python/ovs/stream.py
@@ -825,6 +825,14 @@  class SSLStream(Stream):
         except SSL.SysCallError as e:
             return -ovs.socket_util.get_exception_errno(e)
 
+    def close(self):
+        if self.socket:
+            try:
+                self.socket.shutdown()
+            except (SSL.WantReadError, SSL.WantWriteError):
+                pass
+        return super(SSLStream, self).close()
+
 
 if SSL:
     # Register SSL only if the OpenSSL module is available