Rename workers to api_workers and simplify code

Refactor a few ugly aspects of the multiple API worker patch to make
way for multiple rpc workers.  This came up as I was trying to add
multiple RPC workers using similar patterns and remembering that some
things were left in a rather awkward state.

Change-Id: I549db67af4af6a2df80e12cf233109dda5213c47
fix dvr snat bindings for external-gw-clear

When router_gateway_clear happens, the
schedule_router calls the unbind_snat_servicenode
in the plugin. This will clear the agent binding
from the binding table. But the l3-agent was
expecting the ex_gw_port binding to be present.
The agent needs to check its cache of the
router['gw_host_port'] value now.

Change-Id: I051fb97d802b0508b30683a33673b85f5ab24000
Closes-bug: #1373524
Imported Translations from Transifex

Change-Id: I585e3df5504fcc071811e0ec9f925bc493584b2f
Do not assume order of report list elements

This fixes the test_report_multiple_services unit test that breaks with a
randomized PYTHONHASHSEED (see the bug report).

The test assumed that the report list from self.driver.report_status() had
elements in a particular order. Found with PYTHONHASHSEED=2455351445.

The fix refactors the test case to handle an unsorted report list by
sorting it before checking equality.

Partial-bug: #1348818

Note: There are several other unrelated unit tests that also break with a
randomized PYTHONHASHSEED, but they are not addressed here. They will be
addressed in separate patches.

Change-Id: I542c3818821fa2f6e460fd254a3842530ecea8d9
Update migration scripts to support DB2

Three of the migration scripts are causing failures with DB2.

- DB2 doesn't support nullable column in primary key

- Hard coded SQL statements which use False/True as Boolean arguments
  are not compatible with DB2. In DB2, Boolean columns are created as
  small integer with a constraint to allow only 0 & 1.

- Hardcoded update rows from other table sql is not compatible with DB2

- Foreign key constraints require additional handling

Co-authored-by: Rahul Priyadarshi <rahul.priyadarshi@in.ibm.com>
Change-Id: I82e2d1c522b81fed90a1e5cc6f2321f80797cf7b
Closes-Bug: #1328019
Merge "Do not assume order of report list elements"
Merge "Rename workers to api_workers and simplify code"
Imported Translations from Transifex

Change-Id: Ie7ba4679ca128ff636b6bd841072dfd4b7e4236f
ML2: move L3 cleanup out of network transaction

Move _process_l3_delete out of the delete_network
transaction to eliminate the semaphore deadlock that
occurs when it tries to delete the ports associated
with existing floating IPs.

It makes more sense to live outside of the transaction
anyway because the operations it performs cannot be
rolled back only in the database if the L3 plugin makes
external calls for floating IP creation/deletion.
e.g. if delete_floatingip is successful, it may have
deleted external resources and restoring the DB records
would make things inconsistent.

If a failure to delete the network does occur, any cleanup
done by _process_l3_delete will not be reversed.

Closes-Bug: #1374573
Change-Id: I3ae7bb269df9b9dcef94f48f13f1bde1e4106a80
Merge "ML2: move L3 cleanup out of network transaction"
remove linuxbridge plugin

This changeset removes the linuxbridge plugin, but retains the agent for ML2.
The database models were not removed since operators will need to migrate the
data.

Additionally, the ml2 migration script was altered to support Juno.  For
testing, a user must either run the migration against the icehouse
scheme or run the update, manually change alembic_version to juno and
then run the migration script.  Once the juno migration is added, this
manually step will not be required.

Change-Id: I70689b4247947e6dc08e80fd9b31da9dc691d259
Partial-Bug: 1323729
Fix pid file location to avoid I->J changes that break metadata

Changes in commit 7f8ae630b87392193974dd9cb198c1165cdec93b moved
pid files handled by agent/linux/external_process.py from
$state_path/external/<uuid>.pid  to $state_path/external/<uuid>/pid
that breaks the neutron-ns-metadata-proxy respawn after upgrades
becase the l3 or dhcp agent can't find the old pid file so
they try to start a new neutron-ns-metadata-proxy which won't
succeed, because the old one is holding the port already.

Closes-Bug: #1376128
Change-Id: Id166ec8e508aaab8eea35d89d010a5a0b7fdba1f
Merge "fix dvr snat bindings for external-gw-clear"
Merge "remove linuxbridge plugin"
Merge "Update migration scripts to support DB2"
Merge "Fix pid file location to avoid I->J changes that break metadata"
remove openvswitch plugin

This changeset removes the openvswitch plugin, but retains the agent for ML2
The database models were not removed since operators will need to migrate the
data.

Change-Id: I8b519cb2bbebcbec2c78bb0ec9325716970736cf
Closes-Bug: 1323729
Functional test IPAM DB operation

Add a functional test to check that the IPAM logic is correct and
that the data stored in the DB are sane
For now there are only 3 tests, I will add more

Change-Id: I7776a50824184663abd37e210d08a63eb5519cea