Hello community,

here is the log from the commit of package python-ovsdbapp for openSUSE:Factory 
checked in at 2019-05-03 22:43:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-ovsdbapp (Old)
 and      /work/SRC/openSUSE:Factory/.python-ovsdbapp.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-ovsdbapp"

Fri May  3 22:43:06 2019 rev:3 rq:692873 version:0.15.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-ovsdbapp/python-ovsdbapp.changes  
2019-03-07 10:50:35.897850980 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-ovsdbapp.new.5148/python-ovsdbapp.changes    
    2019-05-03 22:43:06.799328217 +0200
@@ -1,0 +2,30 @@
+Mon Apr  8 13:52:13 UTC 2019 - cloud-de...@suse.de
+
+- update to version 0.15.0
+  - Update home-page
+  - Check for oslo library usage
+  - Pass posargs to pylint, not flake8
+  - Fix functional tests timeout race condition
+  - Expand retry behavior to cover other python-ovs methods
+  - update pylint to 1.9.2
+  - import zuul job settings from project-config
+  - NBDB API: Add param if_exists for methods using db_remove()
+  - Change openstack-dev to openstack-discuss
+  - Add Gateway_Chassis support
+  - Update reno for stable/rocky
+  - Attempt to fetch the schema from any remote
+  - Fix a typo in docstring
+  - add python 3.6 unit test job
+  - Add WaitEvent to the API
+  - Ensure timeout on queueing transaction
+  - Remove the oslo-utils dependency
+  - Group tests in same class to run in same group
+  - Move ovsdbapp jobs to its tree
+  - Convert base commands to ReadOnlyCommand
+  - fix tox python3 overrides
+  - Allow read-only Commands to bypass txns in execute()
+  - Migrate tempest job to zuul v3 native
+  - ut: Patch get_ident for race transaction test
+  - Make nested transaction thread aware
+
+-------------------------------------------------------------------

Old:
----
  ovsdbapp-0.12.3.tar.gz

New:
----
  ovsdbapp-0.15.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-ovsdbapp.spec ++++++
--- /var/tmp/diff_new_pack.zbJsUc/_old  2019-05-03 22:43:08.327331433 +0200
+++ /var/tmp/diff_new_pack.zbJsUc/_new  2019-05-03 22:43:08.347331476 +0200
@@ -18,69 +18,77 @@
 
 %define with_tests 0
 Name:           python-ovsdbapp
-Version:        0.12.3
+Version:        0.15.0
 Release:        0
 Summary:        A library for creating OVSDB applications
 License:        Apache-2.0
 Group:          Development/Languages/Python
 URL:            https://launchpad.net/ovsdbapp
-Source0:        
https://files.pythonhosted.org/packages/source/o/ovsdbapp/ovsdbapp-%{version}.tar.gz
+Source0:        
https://files.pythonhosted.org/packages/source/o/ovsdbapp/ovsdbapp-0.15.0.tar.gz
 BuildRequires:  openstack-macros
-BuildRequires:  python-devel
-BuildRequires:  python-fixtures >= 3.0.0
-BuildRequires:  python-os-testr
-BuildRequires:  python-oslotest
-BuildRequires:  python-ovs >= 2.8.0
-BuildRequires:  python-pbr >= 2.0.0
-BuildRequires:  python-stestr
-BuildRequires:  python-testscenarios
-BuildRequires:  python-testtools
+BuildRequires:  python2-fixtures >= 3.0.0
+BuildRequires:  python2-oslotest
+BuildRequires:  python2-ovs >= 2.8.0
+BuildRequires:  python2-pbr >= 2.0.0
+BuildRequires:  python2-stestr
+BuildRequires:  python2-testscenarios
+BuildRequires:  python2-testtools
+BuildRequires:  python3-fixtures >= 3.0.0
+BuildRequires:  python3-oslotest
+BuildRequires:  python3-ovs >= 2.8.0
+BuildRequires:  python3-pbr >= 2.0.0
+BuildRequires:  python3-stestr
+BuildRequires:  python3-testscenarios
+BuildRequires:  python3-testtools
 Requires:       python-fixtures >= 3.0.0
+Requires:       python-netaddr >= 0.7.18
 Requires:       python-ovs >= 2.8.0
 Requires:       python-pbr >= 2.0.0
+Requires:       python-six >= 1.10.0
 BuildArch:      noarch
+%python_subpackages
 
 %description
 The ovdsbapp library is useful for creating applications that communicate via
 Open_vSwitchs OVSDB protocol (https://tools.ietf.org/html/rfc7047). It wraps
 the Python 'ovs' and adds an event loop and friendly transactions.
 
-%package doc
+%package -n python-ovsdbapp-doc
 Summary:        Documentation for OpenStack log library
 Group:          Development/Languages/Python
 BuildRequires:  python-Sphinx
 BuildRequires:  python-openstackdocstheme
 
-%description doc
+%description -n python-ovsdbapp-doc
 Documentation for the ovsdbap library.
 
 %prep
 %autosetup -p1 -n ovsdbapp-%{version}
 %py_req_cleanup
-sed -i 's/^warning-is-error.*/warning-is-error = 0/g' setup.cfg
 
 %build
-%{py2_build}
+%{python_build}
 
 # generate html docs
-%{__python2} setup.py build_sphinx
+PBR_VERSION=0.15.0 PYTHONPATH=. \
+    sphinx-build -b html doc/source doc/build/html
 rm -rf doc/build/html/.{doctrees,buildinfo}
 
 %install
-%{py2_install}
+%{python_install}
 
 %if 0%{?with_tests}
 %check
-stestr run
+%python_exec -m stestr.cli run
 %endif
 
-%files
+%files %{python_files}
 %license LICENSE
 %doc ChangeLog README.rst
-%{python2_sitelib}/ovsdbapp
-%{python2_sitelib}/*.egg-info
+%{python_sitelib}/ovsdbapp
+%{python_sitelib}/*.egg-info
 
-%files doc
+%files -n python-ovsdbapp-doc
 %license LICENSE
 %doc doc/build/html
 

++++++ _service ++++++
--- /var/tmp/diff_new_pack.zbJsUc/_old  2019-05-03 22:43:08.699332217 +0200
+++ /var/tmp/diff_new_pack.zbJsUc/_new  2019-05-03 22:43:08.731332284 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/rocky/openstack/ovsdbapp/ovsdbapp.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/stein/openstack/ovsdbapp/ovsdbapp.spec.j2</param>
     <param name="output-name">python-ovsdbapp.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/ovsdbapp/stable/rocky/requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/ovsdbapp/stable/stein/requirements.txt</param>
     <param name="changelog-email">cloud-de...@suse.de</param>
     <param name="changelog-provider">gh,openstack,ovsdbapp</param>
   </service>

++++++ ovsdbapp-0.12.3.tar.gz -> ovsdbapp-0.15.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/.pylintrc 
new/ovsdbapp-0.15.0/.pylintrc
--- old/ovsdbapp-0.12.3/.pylintrc       2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/.pylintrc       2019-01-30 17:05:07.000000000 +0100
@@ -37,6 +37,9 @@
  too-many-locals,
  too-many-public-methods,
  too-many-return-statements,
+ inconsistent-return-statements,
+ catching-non-exception,
+ using-constant-test,
  too-many-statements
 
 [BASIC]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/.stestr.conf 
new/ovsdbapp-0.15.0/.stestr.conf
--- old/ovsdbapp-0.12.3/.stestr.conf    2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/.stestr.conf    2019-01-30 17:05:07.000000000 +0100
@@ -1,4 +1,4 @@
 [DEFAULT]
 test_path=${OS_TEST_PATH}
 top_dir=./
-
+group_regex=([^\.]+\.)+
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/AUTHORS new/ovsdbapp-0.15.0/AUTHORS
--- old/ovsdbapp-0.12.3/AUTHORS 2019-02-06 23:10:52.000000000 +0100
+++ new/ovsdbapp-0.15.0/AUTHORS 2019-01-30 17:05:56.000000000 +0100
@@ -9,6 +9,7 @@
 Bhagyashri Shewale <bhagyashri.shew...@nttdata.com>
 Bo Wang <bo.w...@easystack.cn>
 Boden R <boden...@gmail.com>
+Chuck Short <chu...@redhat.com>
 Cyril Roelandt <cyril.roela...@enovance.com>
 Daniel Alvarez <dalva...@redhat.com>
 Davanum Srinivas <dava...@gmail.com>
@@ -39,6 +40,7 @@
 Petr Horáček <phora...@redhat.com>
 Richard Theis <rth...@us.ibm.com>
 Sean Mooney <sean.k.moo...@intel.com>
+Ted Elhourani <theodore.elhour...@gmail.com>
 Terry Wilson <te...@logivox.net>
 Terry Wilson <twil...@redhat.com>
 Vu Cong Tuan <tua...@vn.fujitsu.com>
@@ -48,7 +50,10 @@
 chenxing <chen.x...@99cloud.net>
 gengchc2 <geng.changc...@zte.com.cn>
 hgangwx <hgan...@cn.ibm.com>
+huang.zhiping <huang.zhip...@99cloud.net>
 lzklibj <lzkl...@cn.ibm.com>
+melissaml <ma....@99cloud.net>
+qingszhao <zhao.daq...@99cloud.net>
 rossella <rsblend...@suse.com>
 yan.haifeng <yanhe...@qq.com>
 zhangzs <zhangzhaos...@inspur.com>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ChangeLog 
new/ovsdbapp-0.15.0/ChangeLog
--- old/ovsdbapp-0.12.3/ChangeLog       2019-02-06 23:10:52.000000000 +0100
+++ new/ovsdbapp-0.15.0/ChangeLog       2019-01-30 17:05:56.000000000 +0100
@@ -1,27 +1,43 @@
 CHANGES
 =======
 
-0.12.3
+0.15.0
 ------
 
 * Convert base commands to ReadOnlyCommand
 * Allow read-only Commands to bypass txns in execute()
-* Move ovsdbapp jobs to its tree
+* Update home-page
 
-0.12.2
+0.14.0
 ------
 
-* ut: Patch get\_ident for race transaction test
-* Make nested transaction thread aware
-* import zuul job settings from project-config
+* Attempt to fetch the schema from any remote
+* Fix a typo in docstring
+* Change openstack-dev to openstack-discuss
+* Add Gateway\_Chassis support
+* Group tests in same class to run in same group
+* Fix functional tests timeout race condition
+* Migrate tempest job to zuul v3 native
+* Expand retry behavior to cover other python-ovs methods
+* Add WaitEvent to the API
 
-0.12.1
+0.13.0
 ------
 
+* ut: Patch get\_ident for race transaction test
+* Move ovsdbapp jobs to its tree
+* Make nested transaction thread aware
+* NBDB API: Add param if\_exists for methods using db\_remove()
+* add python 3.6 unit test job
+* import zuul job settings from project-config
 * Check for oslo library usage
+* fix tox python3 overrides
+* Pass posargs to pylint, not flake8
+* update pylint to 1.9.2
 * Remove the oslo-utils dependency
-* Update UPPER\_CONSTRAINTS\_FILE for stable/rocky
-* Update .gitreview for stable/rocky
+* Update reno for stable/rocky
+* Update reno for stable/rocky
+* Ensure timeout on queueing transaction
 
 0.12.0
 ------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/PKG-INFO new/ovsdbapp-0.15.0/PKG-INFO
--- old/ovsdbapp-0.12.3/PKG-INFO        2019-02-06 23:10:53.000000000 +0100
+++ new/ovsdbapp-0.15.0/PKG-INFO        2019-01-30 17:05:56.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 1.1
 Name: ovsdbapp
-Version: 0.12.3
+Version: 0.15.0
 Summary: A library for creating OVSDB applications
-Home-page: http://www.openstack.org/
+Home-page: https://pypi.org/project/ovsdbapp/
 Author: OpenStack
-Author-email: openstack-...@lists.openstack.org
+Author-email: openstack-disc...@lists.openstack.org
 License: UNKNOWN
 Description: ===============================
         ovsdbapp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/lower-constraints.txt 
new/ovsdbapp-0.15.0/lower-constraints.txt
--- old/ovsdbapp-0.12.3/lower-constraints.txt   2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/lower-constraints.txt   2019-01-30 17:05:07.000000000 
+0100
@@ -31,7 +31,7 @@
 pep8==1.5.7
 pyflakes==0.8.1
 Pygments==2.2.0
-pylint==1.4.5
+pylint==1.9.2
 python-mimeparse==1.6.0
 python-subunit==1.0.0
 pytz==2013.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/connection.py 
new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/connection.py
--- old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/connection.py  2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/connection.py  2019-01-30 
17:05:07.000000000 +0100
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+import logging
 import os
 import threading
 import traceback
@@ -21,12 +22,15 @@
 from six.moves import queue as Queue
 
 from ovsdbapp.backend.ovs_idl import idlutils
+from ovsdbapp import exceptions
 
 if os.name == 'nt':
     from ovsdbapp.backend.ovs_idl.windows import connection_utils
 else:
     from ovsdbapp.backend.ovs_idl.linux import connection_utils
 
+LOG = logging.getLogger(__name__)
+
 
 class TransactionQueue(Queue.Queue, object):
     def __init__(self, *args, **kwargs):
@@ -85,14 +89,33 @@
             self.thread.start()
 
     def run(self):
+        errors = 0
         while self._is_running:
-            self.idl.wait(self.poller)
-            self.poller.fd_wait(self.txns.alert_fileno, poller.POLLIN)
-            # TODO(jlibosva): Remove next line once losing connection to ovsdb
-            #                 is solved.
-            self.poller.timer_wait(self.timeout * 1000)
-            self.poller.block()
-            self.idl.run()
+            # If we fail in an Idl call, we could have missed an update
+            # from the server, leaving us out of sync with ovsdb-server.
+            # It is not safe to continue without restarting the connection,
+            # though it is likely that the error is unrecoverable, so only try
+            # a few times before bailing completely.
+            try:
+                self.idl.wait(self.poller)
+                self.poller.fd_wait(self.txns.alert_fileno, poller.POLLIN)
+                # TODO(jlibosva): Remove next line once losing connection to
+                #                 ovsdb is solved.
+                self.poller.timer_wait(self.timeout * 1000)
+                self.poller.block()
+                self.idl.run()
+            except Exception as e:
+                # This shouldn't happen, but is possible if there is a bug
+                # in python-ovs
+                errors += 1
+                LOG.exception(e)
+                if errors <= 3:
+                    self.idl.force_reconnect()
+                    idlutils.wait_for_change(self.idl, self.timeout)
+                    continue
+                self._is_running = False
+                break
+            errors = 0
             txn = self.txns.get_nowait()
             if txn is not None:
                 try:
@@ -117,7 +140,11 @@
     def queue_txn(self, txn):
         # Even if we aren't started, we can queue a transaction and it will
         # run when we are started
-        self.txns.put(txn)
+        try:
+            self.txns.put(txn, timeout=self.timeout)
+        except Queue.Full:
+            raise exceptions.TimeoutException(commands=txn.commands,
+                                              timeout=self.timeout)
 
 
 class OvsdbIdl(idl.Idl):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/event.py 
new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/event.py
--- old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/event.py       2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/event.py       2019-01-30 
17:05:07.000000000 +0100
@@ -39,3 +39,7 @@
         LOG.debug("%s : Matched %s, %s, %s %s", self.event_name, self.table,
                   self.events, self.conditions, self.old_conditions)
         return True
+
+
+class WaitEvent(RowEvent, ovsdb_event.WaitEvent):
+    pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/idlutils.py 
new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/idlutils.py
--- old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/idlutils.py    2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/idlutils.py    2019-01-30 
17:05:07.000000000 +0100
@@ -13,6 +13,7 @@
 #    under the License.
 
 import collections
+import logging
 import os
 import sys
 import time
@@ -27,6 +28,7 @@
 from ovsdbapp import api
 from ovsdbapp import exceptions
 
+LOG = logging.getLogger(__name__)
 
 RowLookup = collections.namedtuple('RowLookup',
                                    ['table', 'column', 'uuid_column'])
@@ -114,21 +116,48 @@
     :param schema_name: The schema on the server to pull
     :type schema_name: string
     """
-    err, strm = stream.Stream.open_block(
-        stream.Stream.open(connection))
-    if err:
-        raise Exception("Could not connect to %s" % connection)
-    rpc = jsonrpc.Connection(strm)
-    req = jsonrpc.Message.create_request('get_schema', [schema_name])
-    err, resp = rpc.transact_block(req)
-    rpc.close()
-    if err:
-        raise Exception("Could not retrieve schema from %(conn)s: "
-                        "%(err)s" % {'conn': connection,
-                                     'err': os.strerror(err)})
-    elif resp.error:
-        raise Exception(resp.error)
-    return idl.SchemaHelper(None, resp.result)
+    parsed_connections = parse_connection(connection)
+
+    for c in parsed_connections:
+        err, strm = stream.Stream.open_block(
+            stream.Stream.open(c))
+        if err:
+            LOG.error("Unable to open stream to %(conn)s to retrieve schema: "
+                      "%(err)s", {'conn': c,
+                                  'err': os.strerror(err)})
+            continue
+        rpc = jsonrpc.Connection(strm)
+        req = jsonrpc.Message.create_request('get_schema', [schema_name])
+        err, resp = rpc.transact_block(req)
+        rpc.close()
+        if err:
+            LOG.info("Could not retrieve schema from %(conn)s: "
+                     "%(err)s", {'conn': c,
+                                 'err': os.strerror(err)})
+            continue
+        elif resp.error:
+            LOG.error("TRXN error, failed to retrieve schema from %(conn)s: "
+                      "%(err)s", {'conn': c,
+                                  'err': resp.error})
+            continue
+        return idl.SchemaHelper(None, resp.result)
+    raise Exception("Could not retrieve schema from %s" % connection)
+
+
+def parse_connection(connection_string):
+    """Parse a connection string.
+
+    The connection string must be of the form
+    proto:address:port,proto:address:port,...
+
+    The parsing logic here must be identical to the one at
+    https://github.com/openvswitch/ovs/blob/master/python/ovs/db/idl.py#L162
+    for remote connections.
+
+    :param connection_string: The ovsdb-server connection string
+    :type connection_string: string
+    """
+    return [c.strip() for c in connection_string.split(',')]
 
 
 def wait_for_change(_idl, timeout, seqno=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/windows/utils.py 
new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/windows/utils.py
--- old/ovsdbapp-0.12.3/ovsdbapp/backend/ovs_idl/windows/utils.py       
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/backend/ovs_idl/windows/utils.py       
2019-01-30 17:05:07.000000000 +0100
@@ -39,5 +39,4 @@
     # loop greenlet.
     if eventlet.getcurrent().parent:
         return tpool.execute(f, *args, **kwargs)
-    else:
-        return f(*args, **kwargs)
+    return f(*args, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp/event.py 
new/ovsdbapp-0.15.0/ovsdbapp/event.py
--- old/ovsdbapp-0.12.3/ovsdbapp/event.py       2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/event.py       2019-01-30 17:05:07.000000000 
+0100
@@ -68,6 +68,26 @@
         """Method to run when the event matches"""
 
 
+class WaitEvent(RowEvent):
+    event_name = 'WaitEvent'
+    ONETIME = True
+
+    def __init__(self, *args, **kwargs):
+        self.event = threading.Event()
+        self.timeout = kwargs.pop('timeout', None)
+        super(WaitEvent, self).__init__(*args, **kwargs)
+
+    @abc.abstractmethod
+    def matches(self, event, row, old=None):
+        """Test that `event on `row` matches watched events. See: RowEvent"""
+
+    def run(self, event, row, old):
+        self.event.set()
+
+    def wait(self):
+        return self.event.wait(self.timeout)
+
+
 class RowEventHandler(object):
     def __init__(self):
         self.__watched_events = set()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp/exceptions.py 
new/ovsdbapp-0.15.0/ovsdbapp/exceptions.py
--- old/ovsdbapp-0.12.3/ovsdbapp/exceptions.py  2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/exceptions.py  2019-01-30 17:05:07.000000000 
+0100
@@ -37,7 +37,7 @@
 
     if six.PY2:
         def __unicode__(self):
-            return unicode(self.msg)  # noqa
+            return unicode(self.msg)  # noqa pylint: disable=undefined-variable
 
     def __str__(self):
         return self.msg
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/api.py 
new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/api.py
--- old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/api.py   2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/api.py   2019-01-30 
17:05:07.000000000 +0100
@@ -86,9 +86,16 @@
         """
 
     @abc.abstractmethod
-    def ls_remove_dns_record(self, switch_uuid, dns_uuid):
+    def ls_remove_dns_record(self, switch_uuid, dns_uuid, if_exists=False):
         """Remove the 'dns_record' from the switch's 'dns_records' list
 
+        :param switch_uuid: The uuid of the switch
+        :type switch_uuid:  string or uuid.UUID
+        :param dns_uuid:    The uuid of the DNS record
+        :type dns_uuid:     string or uuid.UUID
+        :param if_exists:   If True, don't fail if the DNS record
+                            doesn't exist
+        :type if_exists:    boolean
         :returns: :class:`Command` with RowView result
         """
 
@@ -852,12 +859,15 @@
         """
 
     @abc.abstractmethod
-    def dns_remove_record(self, uuid, hostname):
+    def dns_remove_record(self, uuid, hostname, if_exists=False):
         """Remove the 'hostname' from the 'records' field of the DNS row
 
         :param uuid: The uuid of the DNS row to set the records with
         :type uuid:  string or uuid.UUID
         :param hostname: hostname as the key to the record dict
+        :param if_exists:   If True, don't fail if the DNS record
+                            doesn't exist
+        :type if_exists:    boolean
         :returns:    :class:`Command` with no result
         """
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/commands.py 
new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/commands.py
--- old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/commands.py      
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/commands.py      
2019-01-30 17:05:07.000000000 +0100
@@ -739,6 +739,13 @@
         if self.peer:
             lrp.peer = self.peer
         lr.addvalue('ports', lrp)
+        gwcs = self.columns.pop('gateway_chassis', [])
+        for n, chassis in enumerate(gwcs):
+            gwc_name = '%s_%s' % (lrp.name, chassis)
+            cmd = GatewayChassisAddCommand(self.api, gwc_name, chassis,
+                                           len(gwcs) - n, may_exist=True)
+            cmd.run_idl(txn)
+            lrp.addvalue('gateway_chassis', cmd.result)
         self.set_columns(lrp, **self.columns)
         self.result = lrp.uuid
 
@@ -1291,3 +1298,30 @@
 
 class PgGetCommand(cmd.BaseGetRowCommand):
     table = 'Port_Group'
+
+
+class GatewayChassisAddCommand(cmd.AddCommand):
+    table_name = 'Gateway_Chassis'
+
+    def __init__(self, api, name, chassis_name, priority=0, may_exist=False,
+                 **columns):
+        super(GatewayChassisAddCommand, self).__init__(api)
+        self.name = name
+        self.chassis_name = chassis_name
+        self.priority = priority
+        self.may_exist = may_exist
+        self.columns = columns
+
+    def run_idl(self, txn):
+        if self.may_exist:
+            gwc = self.api.lookup(self.table_name, self.name, None)
+        else:
+            gwc = None
+        if not gwc:
+            # If gwc exists with name, this will properly fail if not may_exist
+            # since 'name' is indexed
+            gwc = txn.insert(self.api.tables[self.table_name])
+            gwc.name = self.name
+        gwc.priority = self.priority
+        self.set_columns(gwc, **self.columns)
+        self.result = gwc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/impl_idl.py 
new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/impl_idl.py
--- old/ovsdbapp-0.12.3/ovsdbapp/schema/ovn_northbound/impl_idl.py      
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/schema/ovn_northbound/impl_idl.py      
2019-01-30 17:05:07.000000000 +0100
@@ -49,9 +49,9 @@
         return self.db_add('Logical_Switch', switch_uuid, 'dns_records',
                            dns_uuid)
 
-    def ls_remove_dns_record(self, switch_uuid, dns_uuid):
+    def ls_remove_dns_record(self, switch_uuid, dns_uuid, if_exists=False):
         return self.db_remove('Logical_Switch', switch_uuid, 'dns_records',
-                              dns_uuid)
+                              dns_uuid, if_exists=if_exists)
 
     def acl_add(self, switch, direction, priority, match, action, log=False,
                 may_exist=False, **external_ids):
@@ -269,8 +269,9 @@
             ips = " ".join(utils.normalize_ip_port(ip) for ip in ips)
         return self.db_add('DNS', uuid, 'records', {hostname: ips})
 
-    def dns_remove_record(self, uuid, hostname):
-        return self.db_remove('DNS', uuid, 'records', hostname)
+    def dns_remove_record(self, uuid, hostname, if_exists=False):
+        return self.db_remove('DNS', uuid, 'records', hostname,
+                              if_exists=if_exists)
 
     def dns_set_external_ids(self, uuid, **external_ids):
         return cmd.DnsSetExternalIdsCommand(self, uuid, **external_ids)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py
 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py
--- 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py
  2019-02-06 23:10:01.000000000 +0100
+++ 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/open_vswitch/test_impl_idl.py
  2019-01-30 17:05:07.000000000 +0100
@@ -40,6 +40,21 @@
         cleanup_cmd = self.api.del_br(self.brname)
         self.addCleanup(cleanup_cmd.execute)
 
+    def test_idl_run_exception_terminates(self):
+        run = self.api.idl.run
+        with mock.patch.object(self.api.idl, "run") as runmock:
+            exceptions = iter([Exception("TestException")])
+
+            def side_effect():
+                try:
+                    raise next(exceptions)
+                except StopIteration:
+                    return run()
+
+            runmock.side_effect = side_effect
+            exists = self.api.br_exists(self.brname).execute(check_error=True)
+            self.assertFalse(exists)
+
     def test_br_exists_false(self):
         exists = self.api.br_exists(self.brname).execute(check_error=True)
         self.assertFalse(exists)
@@ -182,5 +197,6 @@
     def test_post_commit_vswitchd_incomplete_timeout(self, *args):
         # Due to timing issues we may rarely hit the global timeout, which
         # raises RuntimeError to match the vsctl implementation
-        self.api.ovsdb_connection.timeout = 1
+        mock.patch('ovsdbapp.backend.ovs_idl.transaction.'
+                   'Transaction.timeout_exceeded', return_value=True).start()
         self.assertRaises((exc.TimeoutException, RuntimeError), self._add_br)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/ovn_northbound/test_impl_idl.py
 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/ovn_northbound/test_impl_idl.py
--- 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/ovn_northbound/test_impl_idl.py
        2019-02-06 23:10:01.000000000 +0100
+++ 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/ovn_northbound/test_impl_idl.py
        2019-01-30 17:05:07.000000000 +0100
@@ -940,6 +940,15 @@
         self.assertEqual(options, lrp.options)
         self.assertEqual(external_ids, lrp.external_ids)
 
+    def test_lrp_add_gw_chassis(self):
+        name, c1, c2 = [utils.get_rand_device_name() for _ in range(3)]
+        args = (name, 'de:ad:be:ef:4d:ad')
+        lrp = self._lrp_add(*args, gateway_chassis=(c1, c2))
+        c1 = self.api.lookup('Gateway_Chassis', "%s_%s" % (lrp.name, c1))
+        c2 = self.api.lookup('Gateway_Chassis', "%s_%s" % (lrp.name, c2))
+        self.assertIn(c1, lrp.gateway_chassis)
+        self.assertIn(c2, lrp.gateway_chassis)
+
     def test_lrp_del_uuid(self):
         lrp = self._lrp_add(None)
         self.api.lrp_del(lrp.uuid).execute(check_error=True)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/ovn_southbound/test_impl_idl.py
 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/ovn_southbound/test_impl_idl.py
--- 
old/ovsdbapp-0.12.3/ovsdbapp/tests/functional/schema/ovn_southbound/test_impl_idl.py
        2019-02-06 23:10:01.000000000 +0100
+++ 
new/ovsdbapp-0.15.0/ovsdbapp/tests/functional/schema/ovn_southbound/test_impl_idl.py
        2019-01-30 17:05:07.000000000 +0100
@@ -10,8 +10,6 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import threading
-
 from ovsdbapp.backend.ovs_idl import event
 from ovsdbapp.backend.ovs_idl import idlutils
 from ovsdbapp import event as ovsdb_event
@@ -22,21 +20,13 @@
 from ovsdbapp.tests import utils
 
 
-class WaitForPortBindingEvent(event.RowEvent):
+class WaitForPortBindingEvent(event.WaitEvent):
     event_name = 'WaitForPortBindingEvent'
-    ONETIME = True
 
     def __init__(self, port, timeout=5):
-        self.event = threading.Event()
-        self.timeout = timeout
         super(WaitForPortBindingEvent, self).__init__(
-            (self.ROW_CREATE,), 'Port_Binding', (('logical_port', '=', port),))
-
-    def run(self, event, row, old):
-        self.event.set()
-
-    def wait(self):
-        self.event.wait(self.timeout)
+            (self.ROW_CREATE,), 'Port_Binding', (('logical_port', '=', port),),
+            timeout=timeout)
 
 
 class OvnSouthboundTest(base.FunctionalTestCase):
@@ -109,7 +99,7 @@
         with self.nbapi.transaction(check_error=True) as txn:
             switch = txn.add(self.nbapi.ls_add(sname))
             port = txn.add(self.nbapi.lsp_add(sname, pname))
-        row_event.wait()
+        self.assertTrue(row_event.wait())
         return chassis, switch.result, port.result
 
     def test_lsp_bind(self):
@@ -121,12 +111,12 @@
         return chassis, switch, port
 
     def test_lsp_bind_exists(self):
-        chassis, switch, port = self.test_lsp_bind()
+        chassis, _switch, port = self.test_lsp_bind()
         cmd = self.api.lsp_bind(port.name, chassis.name)
         self.assertRaises(RuntimeError, cmd.execute, check_error=True)
 
     def test_lsp_bind_may_exist(self):
-        chassis, switch, port = self.test_lsp_bind()
+        chassis, _switch, port = self.test_lsp_bind()
         other = self._chassis_add(['vxlan'], '192.0.2.2',
                                   chassis=utils.get_rand_device_name())
         self.api.lsp_bind(port.name, other.name, may_exist=True).execute(
@@ -137,7 +127,7 @@
         self.assertIn(chassis, binding.chassis)
 
     def test_lsp_unbind(self):
-        chassis, switch, port = self.test_lsp_bind()
+        _chassis, _switch, port = self.test_lsp_bind()
         self.api.lsp_unbind(port.name).execute(check_error=True)
         binding = idlutils.row_by_value(self.api.idl, 'Port_Binding',
                                         'logical_port', port.name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/tests/unit/backend/ovs_idl/test_connection.py 
new/ovsdbapp-0.15.0/ovsdbapp/tests/unit/backend/ovs_idl/test_connection.py
--- old/ovsdbapp-0.12.3/ovsdbapp/tests/unit/backend/ovs_idl/test_connection.py  
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/tests/unit/backend/ovs_idl/test_connection.py  
2019-01-30 17:05:07.000000000 +0100
@@ -49,7 +49,8 @@
     def test_queue_txn(self):
         self.conn.start()
         self.conn.queue_txn('blah')
-        self.conn.txns.put.assert_called_once_with('blah')
+        self.conn.txns.put.assert_called_once_with('blah',
+                                                   timeout=self.conn.timeout)
 
 
 class TestTransactionQueue(base.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/ovsdbapp/tests/unit/backend/ovs_idl/test_idlutils.py 
new/ovsdbapp-0.15.0/ovsdbapp/tests/unit/backend/ovs_idl/test_idlutils.py
--- old/ovsdbapp-0.12.3/ovsdbapp/tests/unit/backend/ovs_idl/test_idlutils.py    
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/tests/unit/backend/ovs_idl/test_idlutils.py    
2019-01-30 17:05:07.000000000 +0100
@@ -62,7 +62,7 @@
 
         * if column type is_optional and value is a single element, value is
           transformed to a length-1-list
-        * any other value is returned as it is, no type convertions
+        * any other value is returned as it is, no type conversions
         """
 
         table = MockTable("SomeTable",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp/utils.py 
new/ovsdbapp-0.15.0/ovsdbapp/utils.py
--- old/ovsdbapp-0.12.3/ovsdbapp/utils.py       2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/ovsdbapp/utils.py       2019-01-30 17:05:07.000000000 
+0100
@@ -10,9 +10,10 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import netaddr
 import uuid
 
+import netaddr
+
 # NOTE(twilson) Clearly these are silly, but they are good enough for now
 # I'm happy for someone to replace them with better parsing
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp.egg-info/PKG-INFO 
new/ovsdbapp-0.15.0/ovsdbapp.egg-info/PKG-INFO
--- old/ovsdbapp-0.12.3/ovsdbapp.egg-info/PKG-INFO      2019-02-06 
23:10:52.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp.egg-info/PKG-INFO      2019-01-30 
17:05:56.000000000 +0100
@@ -1,10 +1,10 @@
 Metadata-Version: 1.1
 Name: ovsdbapp
-Version: 0.12.3
+Version: 0.15.0
 Summary: A library for creating OVSDB applications
-Home-page: http://www.openstack.org/
+Home-page: https://pypi.org/project/ovsdbapp/
 Author: OpenStack
-Author-email: openstack-...@lists.openstack.org
+Author-email: openstack-disc...@lists.openstack.org
 License: UNKNOWN
 Description: ===============================
         ovsdbapp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp.egg-info/SOURCES.txt 
new/ovsdbapp-0.15.0/ovsdbapp.egg-info/SOURCES.txt
--- old/ovsdbapp-0.12.3/ovsdbapp.egg-info/SOURCES.txt   2019-02-06 
23:10:53.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp.egg-info/SOURCES.txt   2019-01-30 
17:05:56.000000000 +0100
@@ -97,15 +97,13 @@
 ovsdbapp/tests/unit/schema/__init__.py
 ovsdbapp/tests/unit/schema/open_vswitch/__init__.py
 ovsdbapp/tests/unit/schema/open_vswitch/test_impl_idl.py
-playbooks/legacy/tempest-post-common.yml
-playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
-playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
 releasenotes/notes/.placeholder
 releasenotes/notes/configure-ovsdb-manager-a29a148b241a125e.yaml
 releasenotes/source/conf.py
 releasenotes/source/index.rst
 releasenotes/source/pike.rst
 releasenotes/source/queens.rst
+releasenotes/source/rocky.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
@@ -114,5 +112,5 @@
 tools/debug_venv.py
 tools/setup-ovs.sh
 tools/test-setup.sh
-zuul.d/legacy-ovsdbapp-jobs.yaml
+zuul.d/ovsdbapp-jobs.yaml
 zuul.d/project.yaml
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/ovsdbapp.egg-info/pbr.json 
new/ovsdbapp-0.15.0/ovsdbapp.egg-info/pbr.json
--- old/ovsdbapp-0.12.3/ovsdbapp.egg-info/pbr.json      2019-02-06 
23:10:52.000000000 +0100
+++ new/ovsdbapp-0.15.0/ovsdbapp.egg-info/pbr.json      2019-01-30 
17:05:56.000000000 +0100
@@ -1 +1 @@
-{"git_version": "547777a", "is_release": true}
\ No newline at end of file
+{"git_version": "bc06517", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
 
new/ovsdbapp-0.15.0/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
--- 
old/ovsdbapp-0.12.3/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
 2019-02-06 23:10:01.000000000 +0100
+++ 
new/ovsdbapp-0.15.0/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
 1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-- hosts: primary
-  tasks:
-
-    - include: ../tempest-post-common.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
 
new/ovsdbapp-0.15.0/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
--- 
old/ovsdbapp-0.12.3/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
  2019-02-06 23:10:01.000000000 +0100
+++ 
new/ovsdbapp-0.15.0/playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
  1970-01-01 01:00:00.000000000 +0100
@@ -1,88 +0,0 @@
-- hosts: all
-  name: Autoconverted job 
legacy-tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src
-    from old job gate-tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src-nv
-  tasks:
-
-    - name: Ensure legacy workspace directory
-      file:
-        path: '{{ ansible_user_dir }}/workspace'
-        state: directory
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          cat > clonemap.yaml << EOF
-          clonemap:
-            - name: openstack-infra/devstack-gate
-              dest: devstack-gate
-          EOF
-          /usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
-              git://git.openstack.org \
-              openstack-infra/devstack-gate
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          cat << 'EOF' >>"/tmp/dg-local.conf"
-          [[local|localrc]]
-          enable_plugin networking-ovn 
git://git.openstack.org/openstack/networking-ovn
-          enable_plugin neutron-tempest-plugin 
git://git.openstack.org/openstack/neutron-tempest-plugin
-          enable_plugin octavia git://git.openstack.org/openstack/octavia
-          enable_service ovn-octavia
-          enable_service o-api
-          enable_service o-hk
-          LIBS_FROM_GIT="ovsdbapp"
-          OVN_DBS_LOG_LEVEL="dbg"
-
-          EOF
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
-
-    - shell:
-        cmd: |
-          set -e
-          set -x
-          export PYTHONUNBUFFERED=true
-          export DEVSTACK_GATE_NEUTRON=1
-          export DEVSTACK_GATE_TEMPEST=1
-          export DEVSTACK_GATE_TEMPEST_ALL_PLUGINS=1
-          export BRANCH_OVERRIDE=default
-          if [ "$BRANCH_OVERRIDE" != "default" ] ; then
-              export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
-          fi
-          # Because we are testing a non standard project, add
-          # our project repository. This makes zuul do the right
-          # reference magic for testing changes.
-          export PROJECTS="openstack/networking-ovn 
openstack/neutron-tempest-plugin openstack/octavia $PROJECTS"
-          export PROJECTS="openstack/ovsdbapp $PROJECTS"
-
-          # Keep localrc to be able to set some vars in pre_test_hook
-          export KEEP_LOCALRC=1
-
-          function pre_test_hook {
-              if [ -f $BASE/new/networking-ovn/devstack/pre_test_hook.sh ] ; 
then
-                  . $BASE/new/networking-ovn/devstack/pre_test_hook.sh
-              fi
-          }
-          export -f pre_test_hook
-
-          function post_test_hook {
-              if [ -f $BASE/new/networking-ovn/devstack/post_test_hook.sh ] ; 
then
-                  . $BASE/new/networking-ovn/devstack/post_test_hook.sh
-              fi
-          }
-          export -f post_test_hook
-
-          export 
DEVSTACK_GATE_SETTINGS="/opt/stack/new/networking-ovn/devstack/devstackgaterc 
latest-release"
-
-          cp devstack-gate/devstack-vm-gate-wrap.sh 
./safe-devstack-vm-gate-wrap.sh
-          ./safe-devstack-vm-gate-wrap.sh
-        executable: /bin/bash
-        chdir: '{{ ansible_user_dir }}/workspace'
-      environment: '{{ zuul | zuul_legacy_vars }}'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ovsdbapp-0.12.3/playbooks/legacy/tempest-post-common.yml 
new/ovsdbapp-0.15.0/playbooks/legacy/tempest-post-common.yml
--- old/ovsdbapp-0.12.3/playbooks/legacy/tempest-post-common.yml        
2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/playbooks/legacy/tempest-post-common.yml        
1970-01-01 01:00:00.000000000 +0100
@@ -1,56 +0,0 @@
-#
-# Copy OVN SB & NB database files: those files can be handy for debugging 
issues as the
-# ovsdb files are stored as logs.
-#
-
-- name: Check whether OVNSB DB was created
-  stat:
-    path: /opt/stack/data/ovs/ovnsb_db.db
-  register: ovnsb_file
-
-- name: Create destination directory to collect OVN database logs
-  file: path={{ ansible_user_dir }}/workspace/logs/ovs_dbs state=directory
-  when: ovnsb_file.stat.exists
-
-- name: Collect OVN databases
-  copy:
-    remote_src: true
-    src: '/opt/stack/data/ovs/{{ item }}.db'
-    dest: '{{ ansible_user_dir }}/workspace/logs/ovs_dbs/{{ item }}.txt'
-  with_items:
-    - conf
-    - ovnnb_db
-    - ovnsb_db
-  when: ovnsb_file.stat.exists
-
-- name: Copy OVN database logs
-  copy:
-    remote_src: true
-    src: '/opt/stack/new/{{ item }}.log'
-    dest: '{{ ansible_user_dir }}/workspace/logs/ovs_dbs/{{ item }}.log.txt'
-  with_items:
-    - ovsdb-server-nb
-    - ovsdb-server-sb
-  when: ovnsb_file.stat.exists
-  become: true
-
-- name: Compress OVN databases in individual files
-  shell: gzip -9 {{ ansible_user_dir }}/workspace/logs/ovs_dbs/*
-  when: ovnsb_file.stat.exists
-
-#
-# Synchronize files from workspace in node to the zuul log_root which will be 
stored
-#
-
-- name: Copy files from {{ ansible_user_dir }}/workspace/ on node
-  synchronize:
-    src: '{{ ansible_user_dir }}/workspace/'
-    dest: '{{ zuul.executor.log_root }}'
-    mode: pull
-    copy_links: true
-    verify_host: true
-    rsync_opts:
-      - --include=/logs/**
-      - --include=*/
-      - --exclude=*
-      - --prune-empty-dirs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/releasenotes/source/index.rst 
new/ovsdbapp-0.15.0/releasenotes/source/index.rst
--- old/ovsdbapp-0.12.3/releasenotes/source/index.rst   2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/releasenotes/source/index.rst   2019-01-30 
17:05:07.000000000 +0100
@@ -6,5 +6,6 @@
    :maxdepth: 1
 
    unreleased
+   rocky
    queens
    pike
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/releasenotes/source/rocky.rst 
new/ovsdbapp-0.15.0/releasenotes/source/rocky.rst
--- old/ovsdbapp-0.12.3/releasenotes/source/rocky.rst   1970-01-01 
01:00:00.000000000 +0100
+++ new/ovsdbapp-0.15.0/releasenotes/source/rocky.rst   2019-01-30 
17:05:07.000000000 +0100
@@ -0,0 +1,6 @@
+===================================
+ Rocky Series Release Notes
+===================================
+
+.. release-notes::
+   :branch: stable/rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/setup.cfg 
new/ovsdbapp-0.15.0/setup.cfg
--- old/ovsdbapp-0.12.3/setup.cfg       2019-02-06 23:10:53.000000000 +0100
+++ new/ovsdbapp-0.15.0/setup.cfg       2019-01-30 17:05:56.000000000 +0100
@@ -4,8 +4,8 @@
 description-file = 
        README.rst
 author = OpenStack
-author-email = openstack-...@lists.openstack.org
-home-page = http://www.openstack.org/
+author-email = openstack-disc...@lists.openstack.org
+home-page = https://pypi.org/project/ovsdbapp/
 classifier = 
        Environment :: OpenStack
        Intended Audience :: Information Technology
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/test-requirements.txt 
new/ovsdbapp-0.15.0/test-requirements.txt
--- old/ovsdbapp-0.12.3/test-requirements.txt   2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/test-requirements.txt   2019-01-30 17:05:07.000000000 
+0100
@@ -10,7 +10,7 @@
 openstackdocstheme>=1.18.1 # Apache-2.0
 oslotest>=3.2.0 # Apache-2.0
 os-testr>=1.0.0 # Apache-2.0
-pylint==1.4.5 # GPLv2
+pylint==1.9.2 # GPLv2
 stestr>=2.0.0 # Apache-2.0
 testscenarios>=0.4 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/tox.ini new/ovsdbapp-0.15.0/tox.ini
--- old/ovsdbapp-0.12.3/tox.ini 2019-02-06 23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/tox.ini 2019-01-30 17:05:07.000000000 +0100
@@ -11,30 +11,35 @@
    OS_TEST_PATH=./ovsdbapp/tests/unit
 install_command = pip install {opts} {packages}
 deps =
-  
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/rocky}
+  
-c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt}
   -r{toxinidir}/test-requirements.txt
   -r{toxinidir}/requirements.txt
 commands = stestr run --slowest {posargs}
 
 [testenv:pep8]
-basepython = python2.7
+basepython = python3
 commands = flake8
            {toxinidir}/tools/coding-checks.sh --all '{posargs}'
 
 [testenv:venv]
+basepython = python3
 commands = {posargs}
 
 [testenv:cover]
+basepython = python3
 commands = python setup.py test --coverage --testr-args='{posargs}'
 
 [testenv:docs]
+basepython = python3
 commands = python setup.py build_sphinx
 
 [testenv:releasenotes]
+basepython = python3
 commands =
   sphinx-build -a -E -W -d releasenotes/build/doctrees -b html 
releasenotes/source releasenotes/build/html
 
 [testenv:debug]
+basepython = python3
 commands = oslo_debug_helper {posargs}
 
 [testenv:functional]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/zuul.d/legacy-ovsdbapp-jobs.yaml 
new/ovsdbapp-0.15.0/zuul.d/legacy-ovsdbapp-jobs.yaml
--- old/ovsdbapp-0.12.3/zuul.d/legacy-ovsdbapp-jobs.yaml        2019-02-06 
23:10:01.000000000 +0100
+++ new/ovsdbapp-0.15.0/zuul.d/legacy-ovsdbapp-jobs.yaml        1970-01-01 
01:00:00.000000000 +0100
@@ -1,13 +0,0 @@
-- job:
-    name: ovsdbapp-tempest-dsvm-networking-ovn-ovs-release
-    parent: legacy-networking-ovn-dsvm-base
-    run: 
playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/run.yaml
-    post-run: 
playbooks/legacy/tempest-dsvm-networking-ovn-ovs-release-ovsdbapp-src/post.yaml
-    timeout: 7800
-    required-projects:
-      - openstack-infra/devstack-gate
-      - openstack/networking-ovn
-      - openstack/neutron-tempest-plugin
-      - openstack/ovsdbapp
-      - openstack/octavia
-      - openstack/tempest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/zuul.d/ovsdbapp-jobs.yaml 
new/ovsdbapp-0.15.0/zuul.d/ovsdbapp-jobs.yaml
--- old/ovsdbapp-0.12.3/zuul.d/ovsdbapp-jobs.yaml       1970-01-01 
01:00:00.000000000 +0100
+++ new/ovsdbapp-0.15.0/zuul.d/ovsdbapp-jobs.yaml       2019-01-30 
17:05:07.000000000 +0100
@@ -0,0 +1,7 @@
+- job:
+    name: ovsdbapp-tempest-dsvm-networking-ovn-ovs-release
+    description: Job testing for devstack/tempest testing networking-ovn with 
the latest released OVN branch and ovsdbapp from source
+    parent: networking-ovn-tempest-dsvm-ovs-release
+    vars:
+      devstack_localrc:
+        LIBS_FROM_GIT: ovsdbapp
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ovsdbapp-0.12.3/zuul.d/project.yaml 
new/ovsdbapp-0.15.0/zuul.d/project.yaml
--- old/ovsdbapp-0.12.3/zuul.d/project.yaml     2019-02-06 23:10:01.000000000 
+0100
+++ new/ovsdbapp-0.15.0/zuul.d/project.yaml     2019-01-30 17:05:07.000000000 
+0100
@@ -2,6 +2,7 @@
     templates:
       - openstack-python-jobs
       - openstack-python35-jobs
+      - openstack-python36-jobs
       - check-requirements
     check:
       jobs:


Reply via email to