neutron-dynamic-routing fails under SQLA 1.3.1

Bug #1833574 reported by Thomas Goirand
14
This bug affects 3 people
Affects Status Importance Assigned to Milestone
neutron
New
Undecided
Unassigned

Bug Description

Running unit tests of neutron-dynamic-routing with SQLAlchemy 1.3.1 leads to these failures. Please fix this before the Buster release, as SQLAlchemy 1.3.x will be uploaded to Sid instead of Experimental, and anyway, we can't upload the Stein release to Debian Experimental before this is fixed:

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv6_tenant_subnet_routes_by_bgp_speaker_ipv6
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv6_tenant_subnet_routes_by_bgp_speaker_ipv6
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 685, in test_get_ipv6_tenant_subnet_routes_by_bgp_speaker_ipv6
    binding_cidr)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 644, in _advertised_routes_by_bgp_speaker
    speaker['id'])
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/services/bgp/bgp_plugin.py", line 225, in get_advertised_routes
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 315, in get_advertised_routes
    routes = self.get_routes_by_bgp_speaker_id(context, bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_all_routes_by_bgp_speaker_different_tenant_address_scope
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_all_routes_by_bgp_speaker_different_tenant_address_scope
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 753, in test_all_routes_by_bgp_speaker_different_tenant_address_scope
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_ipv4
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_ipv4
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 696, in test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_ipv4
    binding_cidr)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 644, in _advertised_routes_by_bgp_speaker
    speaker['id'])
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/services/bgp/bgp_plugin.py", line 225, in get_advertised_routes
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 315, in get_advertised_routes
    routes = self.get_routes_by_bgp_speaker_id(context, bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_routes_by_bgp_speaker_id_with_fip
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_routes_by_bgp_speaker_id_with_fip
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 846, in test_get_routes_by_bgp_speaker_id_with_fip
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_dvr_router
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_dvr_router
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 712, in test_get_ipv4_tenant_subnet_routes_by_bgp_speaker_dvr_router
    router_distributed=True)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 644, in _advertised_routes_by_bgp_speaker
    speaker['id'])
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/services/bgp/bgp_plugin.py", line 225, in get_advertised_routes
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 315, in get_advertised_routes
    routes = self.get_routes_by_bgp_speaker_id(context, bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_routes_by_bgp_speaker_id_with_fip_dvr
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_get_routes_by_bgp_speaker_id_with_fip_dvr
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 911, in test_get_routes_by_bgp_speaker_id_with_fip_dvr
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_ha_router_fips_has_no_next_hop_to_fip_agent_gateway
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_ha_router_fips_has_no_next_hop_to_fip_agent_gateway
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 1272, in test_ha_router_fips_has_no_next_hop_to_fip_agent_gateway
    self._test_legacy_router_fips_next_hop(router_ha=True)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 1262, in _test_legacy_router_fips_next_hop
    self.context, bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

======================================================================
FAIL: neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_legacy_router_fips_has_no_next_hop_to_fip_agent_gateway
neutron_dynamic_routing.tests.unit.db.test_bgp_db.Ml2BgpTests.test_legacy_router_fips_has_no_next_hop_to_fip_agent_gateway
----------------------------------------------------------------------
testtools.testresult.real._StringException: Traceback (most recent call last):
  File "/usr/lib/python3/dist-packages/neutron/tests/base.py", line 174, in func
    return f(self, *args, **kwargs)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 1269, in test_legacy_router_fips_has_no_next_hop_to_fip_agent_gateway
    self._test_legacy_router_fips_next_hop()
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/tests/unit/db/test_bgp_db.py", line 1262, in _test_legacy_router_fips_next_hop
    self.context, bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 480, in get_routes_by_bgp_speaker_id
    bgp_speaker_id)
  File "/<<PKGBUILDDIR>>/neutron_dynamic_routing/db/bgp_db.py", line 674, in _get_central_fip_host_routes_by_bgp_speaker
    l3_db.Router.id == router_attrs.router_id)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2259, in outerjoin
    from_joinpoint=from_joinpoint,
  File "<string>", line 2, in _join
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/base.py", line 220, in generate
    fn(self, *args[1:], **kw)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2414, in _join
    left, right, onclause, prop, create_aliases, outerjoin, full
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2437, in _join_left_to_right
    ) = self._join_determine_implicit_left_side(left, right, onclause)
  File "/usr/lib/python3/dist-packages/sqlalchemy/orm/query.py", line 2526, in _join_determine_implicit_left_side
    "Can't determine which FROM clause to join "
sqlalchemy.exc.InvalidRequestError: Can't determine which FROM clause to join from, there are multiple FROMS which can join to this entity. Try adding an explicit ON clause to help resolve the ambiguity.

----------------------------------------------------------------------
Ran 168 tests in 62.085s

FAILED (failures=8)

Revision history for this message
Ryan Tidwell (ryan-tidwell) wrote :

This looks like the regression that prompted this patch https://gerrit.sqlalchemy.org/#/c/sqlalchemy/sqlalchemy/+/1180/. It is apparently included in sqlalchemy 1.3.3, so perhaps we just need to blacklist 1.3.1 in the project requirements?

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to neutron-dynamic-routing (master)

Fix proposed to branch: master
Review: https://review.opendev.org/666619

Changed in neutron:
assignee: nobody → Ryan Tidwell (ryan-tidwell)
status: New → In Progress
Revision history for this message
Slawek Kaplonski (slaweq) wrote : auto-abandon-script

This bug has had a related patch abandoned and has been automatically un-assigned due to inactivity. Please re-assign yourself if you are continuing work or adjust the state as appropriate if it is no longer valid.

Changed in neutron:
assignee: Ryan Tidwell (ryan-tidwell) → nobody
status: In Progress → New
tags: added: timeout-abandon
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Change abandoned on neutron-dynamic-routing (master)

Change abandoned by Slawek Kaplonski (<email address hidden>) on branch: master
Review: https://review.opendev.org/666619
Reason: This review is > 4 weeks without comment, and failed Jenkins the last time it was checked. We are abandoning this for now. Feel free to reactivate the review by pressing the restore button and leaving a 'recheck' comment to get fresh test results.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.