Add third element to RPC versions for backports

This makes the RPC version support three elements, adding a "revision"
in addition to the major and minor version. The revision would always
be zero for the master branch of a service, but could be incremented
for stable versions. This provides us some room to backport fixes
that affect RPC versions in such a way that would avoid breaking
the version lineage for systems running stable versions that may
some day be involved in a rolling upgrade to a version from master.

I didn't find any tests for version_is_compatible(), so I added
some for existing version scenarios, as well as new ones with
revisions. They also serve to validate that this doesn't break
anything for code using two-element versions (the expectation is that
two-element versions will still be used everywhere until a third
is needed).

Change-Id: I239c17a3e305f572493498c4b96ee3c7514c5881
Merge "Add third element to RPC versions for backports"
Make openstack.common.fixture.config Py3 compliant

Change-Id: I93f81a1ab1d5814123548e2d9d03ac46f87fad08
ConfigFileNotFoundError with proper argument

We should pass self.policy_file rather than CONF.policy_file.

Change-Id: Ia9fcfe4f8ffb553afc7e25a683ec696fec7eeeac
Make openstack.common.log Python 3 compatible

Change-Id: I162ebfb0f0d9a74bd43fa118c1ca334fb3e236c7
Merge "Make openstack.common.log Python 3 compatible"
Merge "ConfigFileNotFoundError with proper argument"
Add `versionutils` for version compatibility checks

There are a number of different version compatibility checks performed across
OpenStack projects, with Nova alone having at least four within it:

    1) Nova agent version check

    2) XenAPI Dom0 plugin version check

    3) RPC API version check

    4) Nova object version check

Despite similarities between all of these checks, each case chooses to
implement its own.

This patch provides a mechanism for standardizing the version checking process
by providing a single, well-tested function, `is_compatible` that the four
cases listed above (and others) can use instead.

Change-Id: Icc5ff6b7f3914df60f78b9a14806413a063dac0f
add support to ignore certain request

the amount of GET requests may create a large amount of traffic
on the notification bus. users may want the ability to ignore GET
(or other) requests to alleviate the load if requests are not of
interest. adding an ignore_req_list filter option to accommodate
this.

Change-Id: I840c43bf3fcaca28dd20cdf9b8c0787fce732f69
Merge "Add `versionutils` for version compatibility checks"
Apply six for metaclass

__metaclass__ cannot be used in python3.
six be used in general for python 3 compatibility.

Change-Id: I9fc7a59df3af29b4cc1287c40fa4e883d994a961
Closes-Bug: #1236648
_get_log_file_path explictly return, when logfile/logdire unset

Add an explicit 'return None'

Change-Id: I85176b9ba6334d694c8a71901ad358f487d6bc88
Add LockFixture to lockutils

This commit adds a fixture class to be used instead of external
locking with the synchronized decorator. When running tests in
parallel the synchronized decorator won't synchronize the tearDown
and addCleanup methods for a test. By using the fixture which does
LockFixture the unlocking is done by using addCleanup() ensuring that
tearDown and later addCleanup methods are run inside the lock
context.

Closes-Bug: #1229437

Change-Id: I61af5e9d385bb7ef2e6402366fb8c5c09f749986
Merge "_get_log_file_path explictly return, when logfile/logdire unset"
Remove obsolete redhat-eventlet.patch

The gorey details for why this exists is in the commit message for
commit 3c132c0.

As of this fix:

  https://github.com/eventlet/eventlet/pull/34

which was released in eventlet 0.13, we no longer need the patch.

Change-Id: I84267f3c6726cb2e750f615e107c48b12c6ed353
Merge "Add LockFixture to lockutils"
Merge "Remove obsolete redhat-eventlet.patch"
Merge "add support to ignore certain request"
Fix missing space in help text

The help text for the allowed_rpc_exception_modules is missing a
space.

Change-Id: I0b73f0c21277d1351f872b8b0e5046daee62cbf4