Add support for multiple RPC workers under Metaplugin

Metaplugin needs a fix to support multiple RPC workers properly
because a plugin which supports multiple RPC workers cannot
initialize RPC connections at plugin initialization.

Closes-Bug: #1300570
Change-Id: I584f70abb8969054cd4edc8f914d00f6be930bab
(cherry picked from commit 8fb023ed53aff31f37ebebb94aca4f8e2a188342)
Update ensure()/reconnect() to catch MessagingError

The error handling code that gets connections reset if necessary
caught ConnectionError. It really needs to catch MessagingError,
which ConnectionError inherits from. There are other types of
MessagingErrors that may occur, such as InternalError, and they need
to cause the connection to reset, as well.

This fix has already been merged into oslo.messaging.

--

Cherry-picked from oslo-incubator 234f64d608266f43d8856ff98c89ceba6699d752
See also https://bugzilla.redhat.com/show_bug.cgi?id=1086077

Closes-bug: #1303890
Change-Id: Ic5082b74a362ded8b35cbc75cf178fe6e0db62d0
(cherry picked from commit 9a830b370551019a4bd3a0c7504f48961e755bd4)
NSX: fix API payloads for dhcp/metadata setup

NSX 4.2 GA has tweaked the way dhcp and metadata
ports are configured. This patch takes care of
that.

Closes-bug: #1312822

Change-Id: I4e8496bf721c0f35df4228ec9c6f8066275e8c7a
(cherry picked from commit bfdec043f1429ac4aa884e9422861b4e6c1ca815)
Make default nova_url use a version

The default nova_url for neutron is missing an API
version number. This can cause requests to fail
because the Nova /versions API cannot respond
to Neutron notification requests.

It seems reasonable for the default value to
at least have a chance at being correct so
this patch upgrades the default Nova API url to
use the Nova 'v2' API.

Related-bug: #1298640
Change-Id: Ib1449de84fbc01fb704ebfe4a016ac8f4932be96
(cherry picked from commit c09a14089a5ca7cd3093895ee0248876499a6d06)
set api.extensions logging to ERROR in unit tests

neutron.api.extensions generates a lot of output in a normal
unit test run. It's responsible for > 80% of the lines in the
subunit_log.txt. Logging each file load 10k times slows everything
down, takes up valuable memory, and doesn't really help with testing.

Instead we can set this to ERROR level in a fixture to ignore most
of that logging and help make the unit tests run faster.

Change-Id: I86b41f20342b4080859ee036220ddffa200f0562
(cherry picked from commit df96a03e6c74f1fceb4525900bca885307907b79)
Optimize querying for security groups

In the check for all security groups on port belong to tenant,
add a filter to get security groups for the tenant which are in
common with the security groups of the port.

Change-Id: I66f31755525fca37f9dbce6fb43e475791f82495
Closes-Bug: #1315097
(cherry picked from commit 89b01ca24ba95e36568352b4e5c7abf0cd04e4af)
L3 RPC loop could delete a router on concurrent update

routers_updated does not acquire any lock just updates
a set for future rpc loop processing.

The self.updated_routers can be changed by concurrent update
notification. If this change happens at the time around the
self.plugin_rpc.get_routers call, the additional routers
- by mistake - is considered as admin_state_up=false routers, which
 are safe to delete.

Creating a local copy of the updated_routers and preserve
the fresh updated_routers entries for the next _rpc_loop
operations.

Change-Id: Icc7377f9c29e248c3b34562465e859b15ecc2ec3
Closes-Bug: #1315467
Partial-Bug: #1253896
(cherry picked from commit 45381fe1c742c75773d97f1c0bd1f3cb1e7a6468)
Merge "Update ensure()/reconnect() to catch MessagingError" into stable/icehouse
Merge "NSX: fix API payloads for dhcp/metadata setup" into stable/icehouse
Big Switch: Check source_address attribute exists

Check that the source_address attribute exists on
HTTPSConnection objects before referencing it since
it's not present on python 2.6 deployments. If it
does not exist, create a socket connection without
specifying the source.

Closes-Bug: #1316382

Conflicts:

	neutron/tests/unit/bigswitch/test_servermanager.py

Change-Id: Ica10d23cc6de81ae56f711937f208c7321c77f36
(cherry picked from commit f5e4cf8e3edd1ce0ebb8c0c7256be07d094896de)
NSX: pass the right argument during metadata setup

The NSX cluster was erroneously passed instead of context.
This patch addressed that and tweaks UT to verify the right
parameter is passed instead.

Change-Id: Ife660b3a23705342043d121c7dcecad43e22abc1
Closes-bug: #1315538
(cherry picked from commit a3a8a86d7bccb824725d91735bd032237786f5aa)
NSX: ensure that no LSN is created on external networks

Logical Service Nodes (LSN) are those that provide dhcp
and metadata services to networks when the NSX plugin is
used without the openstack dhcp and metadata proxy
agents. External networks do not work with Neutron's
dhcp and metadata services, therefore there is no need
to provision a LSN in this case.

Added UT to avoid regression.

Closes-bug: #1316795

Change-Id: I3dab0c9cbecdd9296466c991d02d590d6bd5bd49
(cherry picked from commit af020da544ac4cf21b293d23710545ee5cdcdfa4)
OVS lib defer apply doesn't handle concurrency

The OVS lib deferred apply methods use a dict to save flows to add,
modify or delete when deffered apply is switched off.
If another thread adds, modifies or deletes flows on that dict during
another process called deffered_apply_off, its flows could be ignored.

This fix stash reference flows list and point the flows list to a new
cleared flows list. Then, it applies flows from the stashed flows list.

Closes-bug: #1263866
Change-Id: Ia3c6ce181e1599d1474da7eb944feff7d84f1d73
(cherry picked from commit 501213686886baccd3280e10b8856a25d3517519)
NSX: fix error when creating VM ports on subnets without dhcp

The error was caused by a missing LSN port (which is created when
the subnet is setup with dhcp enabled). Therefore, check the port
is in place before proceeding with the setup.

Change-Id: I658ead0c324a24ad3f061844ecac13cd3359d341
Closes-bug: 1316365
(cherry picked from commit 7458427a0018437f4c7cac127bcd03c93cccfe70)
NSX: do not raise on missing router during migration step

Return None for missing router rather raising NotFound exception;
this is what the client code was expected to handle in the first
place.

Closes-bug: 1313918

Change-Id: I573770a69d0170b027fc990c29aaa87b1fc8eccc
(cherry picked from commit 5e843850527ede7a56fcc24753f87c1e9e3e8bed)
Merge "NSX: fix error when creating VM ports on subnets without dhcp" into stable/icehouse
Merge "OVS lib defer apply doesn't handle concurrency" into stable/icehouse
NSX: allow net-migration only in combined mode

To allow migration of networks from the agent based model
to the agentless one, both modes need to be available; prior
to this change the extension was available in 'agentless' mode
too; this may lead to leftovers during the migration step.
This patch makes the extension available in 'combined' mode
only, which was the intended behavior.

Change-Id: I491ee3eaf25fc30c0ab4092ee198802a6b06d91d
Closes-bug: #1313985
(cherry picked from commit e737076c374d0743927782b6318132ecf226f05a)
Common decorator for caching methods

Decorator caches methods' results, the key is composed from function
name and its parameters. Implementation of cache itself should be in
object implementing decorated method. Cache backend should be taken
from oslo-incubator.

Related-Bug: #1276440

Conflicts:
	neutron/common/utils.py

Change-Id: Ibe3f1b2eb10b9601ad76ec24b7f0e3551b4013e2
(cherry picked from commit 7508170498949818aed02ba0fd9b7f861e596320)
Explicitly import state_path opt in tests.base

This wasn't explicitly needed in the unit tests because
neutron.common.config was already loaded, but this broke for the
functional tests (which are non-voting) so add a CONF.import_opt line so
functional tests know where to find the definition for state_path.

Closes-Bug: #1322440

Change-Id: I5b87a75317e2ba670adaa59b251bfa860920fd61
(cherry picked from commit f6dfc3a901ce7536a72e6159583051e9bcaf8d8f)