commit f95c5bb6ed00e6eed87159ad105bb0817ada99eb
Merge: c846cf3 fbe3192
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Aug 13 14:02:29 2013 +0000

    Merge "Add a unit testing configuration fixture"

commit fbe3192d9aa9b1b0bedb1779d7b7086f29b05c7f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Aug 13 12:46:36 2013 +0100

    Add a unit testing configuration fixture
    
    The configuration options registered by oslo.messaging should not be
    directly relied upon by users of the library, since those config option
    names could change in future.
    
    Add an API which allows API users to override specific configuration
    options e.g.
    
        self.messaging_conf = self.useFixture(messaging.ConfFixture(cfg.CONF))
        self.messaging_conf.transport_driver = 'fake'
    
    Change-Id: If0d837e1b86e3b04237fde522551cfb81505a543

commit c846cf35b8d9c79ed1faec6319b6002201a374a7
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 12 17:16:44 2013 +0100

    Add a TransportURL class to the public API
    
    Nova's cells/rpc_driver.py has some code which allows user of the REST
    API to update elements of a cell's transport URL (say, the host name of
    the message broker) stored in the database. To achieve this, it has
    a parse_transport_url() method which breaks the URL into its constituent
    parts and an unparse_transport_url() which re-forms it again after
    updating some of its parts.
    
    This is all fine and, since it's fairly specialized, it wouldn't be a
    big deal to leave this code in Nova for now ... except the unparse
    method looks at CONF.rpc_backend to know what scheme to use in the
    returned URL if now backend was specified.
    
    oslo.messaging registers the rpc_backend option, but the ability to
    reference any option registered by the library should not be relied upon
    by users of the library. Imagine, for instance, if we renamed the option
    in future (with backwards compat for old configurations), then this
    would mean API breakage.
    
    So, long story short - an API along these lines makes some sense, but
    especially since not having it would mean we'd need to add some way to
    query the name of the transport driver.
    
    In this commit, we add a simple new TransportURL class:
    
      >>> url = messaging.TransportURL.parse(cfg.CONF, 'foo:///')
      >>> str(url), url
      ('foo:///', <TransportURL transport='foo'>)
      >>> url.hosts.append(messaging.TransportHost(hostname='localhost'))
      >>> str(url), url
      ('foo://localhost/', <TransportURL transport='foo', hosts=[<TransportHost hostname='localhost'>]>)
      >>> url.transport = None
      >>> str(url), url
      ('kombu://localhost/', <TransportURL transport='kombu', hosts=[<TransportHost hostname='localhost'>]>)
      >>> cfg.CONF.set_override('rpc_backend', 'bar')
      >>> str(url), url
      ('bar://localhost/', <TransportURL transport='bar', hosts=[<TransportHost hostname='localhost'>]>)
    
    The TransportURL.parse() method equates to parse_transport_url() and
    TransportURL.__str__() equates to unparse_transport().
    
    The transport drivers are also updated to take a TransportURL as a
    required argument, which simplifies the handling of transport URLs in
    the drivers.
    
    Change-Id: Ic04173476329858e4a2c2d2707e9d4aeb212d127

commit 5aa7c371444ec317634c7bfb91bc0c0ed60f15f2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 12 14:13:24 2013 +0100

    Ensure namespace package is installed
    
    This is apparently fixed in pbr since I3972b3132619e8e2dd7e362ca5fe9d1e3add43b8
    but I'm seeing the issue with pbr 0.5.21 on Fedora.
    
    Related-Bug: #1194742
    Change-Id: I136b8493c8d8d48a0116facf5f23c2a1479c070f

commit 514e91cc950ddd507937e8289233e8e742ca5e51
Merge: 3a7dde4 9c110a4
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 12 09:24:42 2013 +0000

    Merge "Add transport URL support to rabbit driver"

commit 3a7dde4fe8f5616759d70925ab69a294f62f402a
Merge: f3b30fd 9cc66e1
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 12 09:24:08 2013 +0000

    Merge "Kill ability to specify exchange in transport URL"

commit f3b30fde4915da676ddd5f45585db841ceec16a3
Merge: c723695 f1612f2
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 12 09:23:42 2013 +0000

    Merge "Add thread-local store of request context"

commit c7236958d0402a7ea60483a34dbc9c1dac189d8a
Merge: a7d7eb6 2abb40f
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 12 09:23:29 2013 +0000

    Merge "Add a context serialization hook"

commit 9c110a4c94def6089ed7923dad89e763604eb794
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 12 07:48:00 2013 +0100

    Add transport URL support to rabbit driver
    
    If a transport URL is supplied, transform it into the server_params
    format which was previously used for cast_to_server() etc.
    
    Change-Id: I453734a71748dc8d3ffc02ead7bfb92ffb0a6c7c

commit 9cc66e1e018dcaad6d94a6382fa0743a040901a0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 12 06:03:25 2013 +0100

    Kill ability to specify exchange in transport URL
    
    My original thinking was that if you're using the exchange name to
    separate two instances of the applications (so their queues don't
    collide) then the exchange name is pretty key to transport
    configuration. In fact, it's really a virtual host that you'd use for
    this (at least in the case of rabbit and qpid).
    
    Also, Nova's cells code has already moved ahead with the assumption that
    the path specifies a virtual host, so it'd only make sense to deviate
    from that if there was a really good reason to.
    
    Change-Id: Ic8b5dc3538b6b17afec524047acc2efa76366377

commit a7d7eb660e1e8d5bb0f849956737b5cf3ddb4139
Merge: 8cb17b8 5fa7f93
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 12 01:14:12 2013 +0000

    Merge "Fix handling expected exceptions in rabbit driver"

commit 8cb17b8041f71b8c5c59ce5dd25653248ea3303a
Author: Andreas Jaeger <aj@suse.de>
Date:   Sun Aug 11 15:41:49 2013 +0200

    Fix capitalization, it's OpenStack
    
    I'm fixing all other occurences of this string, incl. oslo-incubator.
    
    Change-Id: If607379d4d1d4bc99084db4b01ada5dfd5c9fa3f

commit 5fa7f93d091d0e5ab82f59709949ce6491610b68
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Aug 11 13:42:34 2013 +0100

    Fix handling expected exceptions in rabbit driver
    
    We shouldn't be logging expected exceptions. Add a failing rabbit driver
    test to check this and fix it.
    
    Change-Id: I78b758957117be7c11c5826a27dd6d1d4fffe9cb

commit f1612f28954e38cd470260795bb57c544bf269d6
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Aug 9 11:15:00 2013 +0100

    Add thread-local store of request context
    
    Oslo's logging code has some useful support for including bits of the
    request context in log messages. While this isn't exclusively about the
    request context in a dispatching RPC method, it seems useful for
    oslo.messaging to support the concept for at least this use case simply
    by recording the context in a thread local store before dispatching an
    endpoint method and immediately clearing it when the method returns.
    
    Note, we don't need to store weak refs in our store because we will
    clear the reference in all cases rather than ever leaving a stale
    reference around in the store.
    
    Change-Id: I70ac06ed3a2a891a7a7b388b1823a0f3b08f2dd1

commit 6ec2c8bdbfb04e40a0a1cc502bc59a910f138493
Merge: e166f38 63f1e0e
Author: Jenkins <jenkins@review.openstack.org>
Date:   Fri Aug 9 07:49:37 2013 +0000

    Merge "Removes a redundant version_is_compatible function"

commit 2abb40f9e9143e1d68c15966c88de91c09ea2054
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Aug 9 07:55:46 2013 +0100

    Add a context serialization hook
    
    The client call() and cast() methods take a request context argument
    which is expected to be a dictionary. The RPC endpoint methods on the
    server are invoked with a dictionary context argument.
    
    However, Nova passes a nova.context.RequestContext on the client side
    and the oslo-incubator RPC code deserializes that as a amqp.RpcContext
    which looks vaguely compatible with Nova's RequestContext.
    
    Support the serialization and deserialization of RequestContext objects
    with an additional (de)serialize_context() hook on our Serializer class.
    
    Note: this is a backwards incompatible API change because Serializer
    implementations which do not implement the new abstract methods would
    no longer be possible to instantiate. Not a problem with this commit,
    but shows the type of compat concerns we'll need to think about once the
    API is locked down for good.
    
    Change-Id: I20782bad77fa0b0e396d082df852ca355548f9b7

commit e166f38a1314fb6788d1aaa84e238ceb293d88e9
Merge: bf171ed 0d90693
Author: Jenkins <jenkins@review.openstack.org>
Date:   Fri Aug 9 07:22:09 2013 +0000

    Merge "Add some docs on target version numbers"

commit 63f1e0e5ec1c0843970dee4dfdbc78995f4f2c14
Author: Zhongyue Luo <zhongyue.nah@intel.com>
Date:   Sun Jul 28 12:22:17 2013 +0900

    Removes a redundant version_is_compatible function
    
    Two defined in _drivers.common and _utils.
    Removed the one in _drivers.common
    
    Change-Id: I613c2d9288a1bf333dd89c8844bd8467e8b34c42

commit bf171ede28845a1703f538f5ef1df93cf7ddcea0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 13:21:09 2013 +0100

    Document how call() handles remote exceptions
    
    This is tricky stuff, so document it carefuly.
    
    Related-Bug: #1162063
    Change-Id: Id197bf87e9a7ed222508efe5d5246003ac02680e

commit ac2176cde3630b5953cf368c6c1511fb203c13d7
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 13:07:05 2013 +0100

    Add a per-transport allow_remote_exmods API
    
    Currently we have a allowed_rpc_exception_modules configuration variable
    which we use to configure a per-project list of modules which we will
    allow exceptions to be instantiated from when deserializing remote
    errors.
    
    It makes no sense for this to be user configurable, instead the list of
    modules should be set when you create a transport.
    
    Closes-Bug: #1031719
    Change-Id: Ib40e92cb920996ec5e8f63d6f2cbd88fd01a90f2

commit 66f597f30d4db9ee0f00da58d5c54019912b607b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 12:23:52 2013 +0100

    Expose RemoteError exception in the public API
    
    If a remote endpoint raises an exception which the client is not allowed
    to (or cannot) deserialize, then RPCClient.call() raises a RemoteError
    exception instead.
    
    Make this exception type part of the public API.
    
    Change-Id: I70be0ab7d40af3224d93d6bd0522c1a82f6303c3

commit 9ac9f615b21cc3766231b499c717f7dcb6f01844
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 09:29:14 2013 +0100

    Implement failure replies in the fake driver
    
    Change-Id: Ifd9ede7cb17a471ae2f9024b49ef6bbdc645476a

commit f6df32d94349925c5216a7f9f025a9d083cd87ab
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 09:00:44 2013 +0100

    Add API for expected endpoint exceptions
    
    Review I4e7b19dc730342091fd70a717065741d56da4555 gives a lot of the
    background here, but the idea is that some exceptions raised by an RPC
    endpoint method do not indicate any sort of failure and should not be
    logged by the server as an error.
    
    The classic example of this is conductor's instance_get() method raising
    InstanceNotFound. This is perfectly normal and should not be considered
    an error.
    
    The new API is a decorator which you can use with RPC endpoints methods
    to indicate which exceptions are expected:
    
        @messaging.expected_exceptions(InstanceNotFound)
        def instance_get(self, context, instance_id):
            ...
    
    but we also need to expose the ExpectedException type itself so that
    direct "local" users of the endpoint class know what type will be used
    to wrap expected exceptions. For example, Nova has an ExceptionHelper
    class which unwraps the original exception from an ExpectedException and
    re-raises it.
    
    I've changed from client_exceptions() and ClientException to make it
    more clear it's intent. I felt that the "client" naming gave the
    impression it was intended for use on the client side.
    
    Change-Id: Ieec4600bd6b70cf31ac7925a98a517b84acada4d

commit 206c19e99eeea4d6fb215fba5210873435baa6d3
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 23:32:17 2013 +0100

    Add a driver method specifically for sending notifications
    
    Notifications are an unusual case in that we need users to manually opt
    in to new incompatible message formats by editing configuration because
    there may be external consumers expecting the old format.
    
    Add a send_notification() method to the driver interface and add a
    format version paramater to the method, to make it clear that this
    version selection is specifically for notifications.
    
    In the case of the rabbit/qpid drivers, the 2.0 format is where we added
    the message envelope.
    
    Change-Id: Ib4925c308b1252503749962aa16f043281f2b429

commit 294c99a6d2b05d151b8a44ef54e38202f63364d4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 23:09:28 2013 +0100

    Enforce target preconditions outside of drivers
    
    The target preconditions (e.g. you need at least a topic to send) are
    the same for all drivers, so enforce them before we ever call into a
    driver.
    
    Change-Id: Ic4e9bd94bd9f060ec0662d2bb778c699903dddc4

commit 89079c6ea1882342b2c671cbd8d0d5d9073e36ca
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 22:46:23 2013 +0100

    Add comments to ReplyWaiter.wait()
    
    This method is fairly gnarly, so break my usual preference to make the
    intent clear from the code and instead include detailed comments in the
    method.
    
    Change-Id: I107272a7eab85c70581652488a3c14ce0e18b906

commit b516271a8005a4f13c41c3b338d14667bb73a333
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 22:35:26 2013 +0100

    Remove some FIXMEs and debug logging
    
    These FIXMEs don't need fixing now that I think it through some more.
    The reply format is specific to drivers and the 'ending' flag is part of
    the existing wire protocol that we need to support even if we don't
    support multicall().
    
    Change-Id: I834f0bb01513b5318f0b365948a7d9247feb49bf

commit 84a0693737814665f7b0eb2f42fd9ec99bdb80d5
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 22:26:13 2013 +0100

    Remove unused IncomingMessage.done()
    
    We appear to not have a use for this. I had originally thought we might
    use this to ack messages one they've been processed and replied to, but
    we actually have always acked messages as soon as they have been
    deserialized and queued for dispatching.
    
    Change-Id: I8e1fd565814f3b5e3ba0f1bc77e62ed52ff08661

commit 7c305150ffba2d31083eba42ee1bf6e3244befe7
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 21:45:32 2013 +0100

    Implement wait_for_reply timeout in rabbit driver
    
    Note - the tests use timeout=0.01 because timeout=0 doesn't seem to be
    working for some reason.
    
    Change-Id: I814a3decdad5ddce0a1a2301ba2d59fa928b53a7

commit cb2623f46e29d0a8911221d2fd77163369d07283
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 7 06:43:55 2013 +0100

    Use testtools.TestCase assertion methods
    
    I typically avoided using e.g. assertIsNone() thinking we couldn't use
    it on 2.7, but now that we use testtools.TestCast there are a bunch of
    useful assertion methods we can use.
    
    Change-Id: I7696dc4744cdfd2466773326f202bc08dcfcbf0f

commit 3471e02b4ac6a7edaf41ac8df03f85d5a46da2eb
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 20:56:01 2013 +0100

    Implement failure replies in rabbit driver
    
    Make the rabbit driver properly serialize exceptions before sending them
    back in a reply and then properly re-raise them on the client side.
    
    Also, extend the rabbit driver test to cover this case.
    
    Change-Id: I6b3d03edcd41810125ba6442db5515754f0c1ac9

commit a823368b72a72955ab71729a70c1de0ca3eb605b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 15:41:59 2013 +0100

    Add test with multiple waiting sender threads
    
    The trickiest logic in the rabbit driver is to handle the situation
    where multiple threads are waiting for a reply on the same reply queue.
    
    This commit adds unit testing for that scenario and fixes some bugs with
    it.
    
    Change-Id: I5c8fbeec49572a4f3badbcdae414dc44dc690b6a

commit a3a684d2c9bd7f113ae822b25c4c2730c9f12749
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Aug 2 07:25:45 2013 +0100

    Fix race condition in ReplyWaiters.wake_all()
    
    While we're iterating over the queues in ReplyWaiters.wake_all(), new
    queues can be registered and we get:
    
      RuntimeError: dictionary changed size during iteration
    
    Instead of using an iterator, take a snapshot list of message IDs and
    operate on that.
    
    We don't actually care about any new queues added after wake_all() is
    called because the connection lock has already been dropped so one of
    the other waiters must have picked it up.
    
    We also don't need to worry about queues being removed - if we write to
    a removed queue, that's not going to be a problem.
    
    Change-Id: Ib572cbfd3a7346b76579f82b64aa85a03c1a4fb2

commit 950c37c595f6f8a58008ac9d5c29735fed1d9295
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 1 08:04:57 2013 +0100

    Add rabbit unit test for sending and receiving replies
    
    Change-Id: I9574940904673257317a0caa86c585459e066ff7

commit 96564b5f58b0de4078dbbceea97885490b7df4a9
Merge: 2f1b87d 8572d78
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 5 10:57:42 2013 +0000

    Merge "Add tests for rabbit driver wire protcol"

commit 2f1b87d2f0c19c439724e2691c533b7aa7959131
Merge: 245d783 8b366b3
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 5 10:06:06 2013 +0000

    Merge "Pop _unique_id when checking for duplicates"

commit 245d78362338229a85d2b8e57e4f076d7fca71ac
Merge: 03fcbe6 1f08748
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 5 10:05:07 2013 +0000

    Merge "Add a transport cleanup() method"

commit 0d906937d6589f7badfde653a7988edfe6f96a17
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Aug 4 07:02:06 2013 +0100

    Add some docs on target version numbers
    
    This is advice copied from oslo-incubator's dispatcher.py.
    
    Change-Id: Ib0fe7e4734eaefe177d022389df75f7bf8ee5e6a

commit 8572d78faf5b5032fb494f07a687f1154729c2d9
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 31 11:36:28 2013 +0100

    Add tests for rabbit driver wire protcol
    
    Add two test cases:
    
      - send messages using the rabbit driver and check that the message
        gets sent to the expected queue in the expected format
    
      - send messages to a given queue in the correct format and check that
        we can happily consume them using the rabbit driver
    
    i.e. these are tests that check that the driver sends and receives
    messages according to the wire protocol.
    
    Change-Id: I6a48085585981b17609b31f216bdca438e90e068

commit 8b366b300133e13d933e93490debb09e6f362899
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 31 08:04:11 2013 +0100

    Pop _unique_id when checking for duplicates
    
    Drivers should not be returning messages with any driver-specific
    wire format fields included. Right now, the rabbit and qpid drivers are
    leaking the _unique_id field.
    
    Avoid this simply by popping _unique_id when we're checking for dups.
    
    Change-Id: Icbfb02ee66aebe5ef97a9a2502d8a0745e07bd8b

commit 1f0874857ce322edc1fac6d3d6301a8869e79c4c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 31 07:54:25 2013 +0100

    Add a transport cleanup() method
    
    Pretty obvious that we need this.
    
    The rabbit/qpid implementations just empty the connection pool, in the
    same way their module-level cleanup() methods do now.
    
    Change-Id: I70ba5cab3eb7a30f74cdd6cafe60087769a77b57

commit 03fcbe6ca66983eb8bfb13daeafc428ca2ea41e4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 31 07:24:40 2013 +0100

    Remove my notes and test scripts
    
    These aren't really appropriate for dumping in the repo like this
    so I've moved them here:
    
      https://github.com/markmc/oslo.messaging-notes
    
    Change-Id: Iba4c19cefd8a02831543d5c2c3b1886d5d31fa63

commit e987525dc0207a869e649f9de8ad0a96c2b1a60f
Merge: 6312930 da539a0
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:15:29 2013 +0000

    Merge "Add initial qpid driver"

commit 63129309748c7007885a6eed38f81ea7fe271c9c
Merge: 30d21c5 85a3867
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:14:37 2013 +0000

    Merge "Move most new rabbit driver code into amqpdriver"

commit 30d21c588092fae06b73b9ef77cf8164bb4fd511
Merge: b9e09ac 7bd6090
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:11:54 2013 +0000

    Merge "Move rpc_conn_pool_size into amqp"

commit b9e09ac9064f9c6cf45e5fe352132d25871803d1
Merge: 71e1072 5be5594
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:11:32 2013 +0000

    Merge "Add simple rabbit driver unit test"

commit 71e1072bb55e125734a976b5e0b384f4935f26e7
Merge: fca4b21 576ce35
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:10:51 2013 +0000

    Merge "Temporarily add eventlet to requirements"

commit fca4b21ffbbc796f4017d0649711a895ea464199
Merge: 653e8ac 7d16c76
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:10:19 2013 +0000

    Merge "Add exception serialization tests"

commit da539a094da0f4af3d030933867fb73c2d97880f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jul 29 07:38:29 2013 +0100

    Add initial qpid driver
    
    This just adds a QpidDriver which re-uses AMQPDriver.
    
    The test-rabbit-{client,server}.py test scripts works fine with this
    driver and the URL changed to qpid:///
    
    Change-Id: Ifb72853e83b678b311fecb21fe016af19a67b272

commit 85a386765f680f1e15a06ca7a7ecf273cba03852
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jul 29 07:20:01 2013 +0100

    Move most new rabbit driver code into amqpdriver
    
    All of this code should be reusable by the rabbit driver.
    
    Change-Id: Ib09e467313c9b68f1eba6b615e6fce83f44fee70

commit 653e8ac836de2d0a4f56cf2ddbbefc0b522adeb1
Merge: a7ec874 e39ccfa
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:02:14 2013 +0000

    Merge "Remove unused file"

commit a7ec87420f75e6814ddd8dff4cc1a74514c214fa
Merge: 377fa04 8ace474
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 06:00:30 2013 +0000

    Merge "Add unit tests for object pool"

commit 377fa049fd1f98cb9ef63ed1ab94d8a1e119ba0d
Merge: 4043506 abf5b2b
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 31 05:59:47 2013 +0000

    Merge "Remove only_free param to Pool.get()"

commit 7bd60904f8f00dd048aeb14cab0de8fee8bd6e27
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jul 29 07:04:54 2013 +0100

    Move rpc_conn_pool_size into amqp
    
    This is used in amqp.py, it shouldn't be registered in impl_rabbit.py.
    
    Change-Id: I259f074019dd1bd7c210f84548bc5d4933b6aa89

commit 5be559405a688cd6e9fa736507fc39dbefbaed23
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jul 26 07:43:13 2013 +0100

    Add simple rabbit driver unit test
    
    Change-Id: I1ae6b31f422f8a6e17c985d64a830b7475e7d97e

commit 576ce35e14cd1dfc3f1c8b17422c2253e0cf6c78
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jul 27 15:47:57 2013 +0100

    Temporarily add eventlet to requirements
    
    We absolutely do not want this to be a requirement, but for the moment
    the rabbit and qpid drivers import eventlet and avoid using it at
    runtime. This should be cleaned up shortly and we can remove the dep
    again.
    
    Change-Id: Iaef75964a502598a94d95aa77f0e44d1f7faba50

commit 4043506a23580dd05d60f3bca136241fc2f4c51b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jul 27 15:45:27 2013 +0100

    Add missing gettextutils
    
    We don't need this in oslo.messaging itself, but excutils and sslutils
    do use it.
    
    Change-Id: Ib35caa6616aab7be1a7f872b2073f7b9f606b258

commit 8ace474e3c8bebe0b825a7162c0e14d026706cbe
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jul 27 15:33:57 2013 +0100

    Add unit tests for object pool
    
    This should be complete coverage of the new pool.Pool class.
    
    Change-Id: I439e3d0adc4e370358db62573f862bf6caa8600f

commit abf5b2bf5acf4b18e1d6dad2dac7f1abac76f7e7
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jul 27 13:52:58 2013 +0100

    Remove only_free param to Pool.get()
    
    This is unused. I think I added it before iter_free(), i.e. empty()
    was going to be:
    
      for item in self.get(only_free=True):
          item.close()
    
    rather than:
    
      for item in self.iter_free():
          item.close()
    
    Change-Id: Ie6d0de3b7453ee036412db10f37d26f04de73cf7

commit 45ab8699a646fc2b3861bf5a3e140181869d47c3
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jul 26 07:41:09 2013 +0100

    Connection pool bugfix
    
    This is only seen if you try to call amqp.cleanup().
    
    Change-Id: I5c14a21987b4b7aeca7dddc91d7c8b2510edefeb

commit e39ccfae01b964508a5c7500cb5f060a0cf89d4b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jul 26 07:06:48 2013 +0100

    Remove unused file
    
    Change-Id: Ibff776b694d354f9465cc9f476275103508dcde8

commit 7d16c76b23c68622911e4bc143dc24240b38d537
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jul 26 06:53:48 2013 +0100

    Add exception serialization tests
    
    These are pretty comprehensive tests for the exception serialization
    code. The code itself code do with a bunch of refactoring, but that will
    come later.
    
    The main TODO item is that we need a way for users of the API to
    register the list of modules that it wants to allow exceptions to be
    deserialized from. There is no need for this to be an end-user
    configuration option, but we do need each service to be able to specify
    its own list.
    
    Change-Id: Ib2fc3f1ca5da708b41bdc00e8ac6ce0c92399ce8

commit c719dc306bdd9fac0e07f83cadf9efe496dfb568
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 18:06:59 2013 +0100

    Don't call consume() each time iterconsume() is called
    
    We're going to be using iterconsume(limit=1) and this basically seems
    to be broken right now because you get an error if you call consume()
    multiple times on the same connection.
    
    Set the 'do_consume' flag at connection time rather than on entry into
    iterconsume().
    
    Change-Id: I988e4074ae0e267384931d6e1994e9cbe5248196

commit 29dcc870521893d5292522185f280b4e01c7cae8
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:20:05 2013 +0100

    Add test code for the rabbit driver
    
    These are just a couple of silly sample scripts. Proper unit tests will
    follow.
    
    Change-Id: I6f27ae071c7e6f96059fd665d1163c89227833b9

commit 8ccb5741d22570386783cf38cd214bcae23696a6
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:41:23 2013 +0100

    Remove use of gettextutils
    
    We don't have any infrastructure for localizations in oslo.messaging
    so using this is pointless right now. I'm also generally not convinced
    we want to translate any of the strings in this library anyway.
    
    For now, just add a dummy _() function. We can can unmark the strings
    later.
    
    Change-Id: I1b6a698ee5558c50dc5eafee1f5f05ee2570435e

commit b7350fa2292339ef91ef4398001de53461631cf6
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 18:14:17 2013 +0100

    Add initial rabbit driver
    
    There's obviously an awful lot of work left to do on this. Some 20
    FIXMEs, for a start :)
    
    However, the test client can successfully invoke a call() and get a
    reply back from the server!
    
    The main complexity is in how the client waits for a reply, especially
    where there are multiple threads all waiting for replies. Rather than
    follow the current method of spawning off a greenthread (and the implied
    dependency on eventlet) to read the replies and pass them to the queue
    for the appropriate waiting thread, we instead have one of the waiting
    threads take on that responsibility.
    
    Change-Id: I20d3d66a5cc9820752e7eaebd8871ffb235d31c9

commit c891e7ee24ca0142249e1f4d292e00cd3d2355b1
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:37:53 2013 +0100

    Remove use of openstack.common.local
    
    This means we no longer set the request context for the current thread
    so that it can be used in logging.
    
    We do need to add this back later, but it might be in the form of a
    get_current_context() method.
    
    Change-Id: I3f08a85e2019affddec829e2ea008b5c10707660

commit 1a7e51eb4a918e1340c338484233f39010db1126
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:34:18 2013 +0100

    Use stdlib logging
    
    I guess this loses us automatic logging of details from request context.
    
    Change-Id: I7413f025231c14b7cbdc9e90099407bc6c7943e1

commit 37bd6923dc235c3b67c0f6cd0479df12d9aad5f0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:23:13 2013 +0100

    Don't register options with cfg.CONF at module import
    
    oslo.messaging will only register options with a ConfigOpts object
    supplied by the caller.
    
    Change-Id: I18115e9dd5241b1bdfae14671a62328c47125400

commit e3c5b99959a7f52dab4deb5b6fdd67083110db87
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:28:42 2013 +0100

    Port away from some eventlet infrastructure
    
    Add a simple object pool implementation for our connection pool, in
    place of eventlet.pools.Pool.
    
    Also use threading.Lock in place of eventlet.Semaphore.
    
    There are still some eventlet modules imported by the code, but we can
    avoid using them at runtime and clean things up later. We can't remove
    them now or it'll cause pep8 failures.
    
    Change-Id: I380408d1321802de813de541cd0a2d4305c3627c

commit 04dd4e177331ede7d7859a88a8418727818a44ba
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:16:22 2013 +0100

    Adjust imports in rabbit/qpid drivers
    
    Some modules are in oslo.messaging.openstack.common and others are in
    oslo.messaging._drivers.
    
    Change-Id: I3581eff3427858c8f46673e4a3c376367c626bb3

commit 1c739eb89f095133b6a696b5986a0cd2e1483c90
Merge: 0c9c41d 51be674
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 24 07:13:33 2013 +0000

    Merge "Import some needed modules from oslo-incubator"

commit 0c9c41d290ab5a591938cd194de00b57cb016c19
Merge: 6a2bf86 e91dbef
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 24 07:13:19 2013 +0000

    Merge "Add oslo-incubator code unmodified"

commit 6a2bf8689896eeb12db8ad1492ff08f0dbc3d160
Merge: 8eeaf67 43ab36d
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jul 24 07:12:31 2013 +0000

    Merge "Make executor threads more robust"

commit 51be674f3095c88440c30ba982cba3cdc85ea85c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 17:13:59 2013 +0100

    Import some needed modules from oslo-incubator
    
    Some additional modules from oslo-incubator are required by the driver
    code. Don't fret, some of these will be removed in subsequent patches!
    
    Change-Id: I3674bfbc4b1c93afc746b84fbbf8859456cbcb3c

commit e91dbef454999a4ada980365bf1b8594207740bd
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jul 23 16:28:15 2013 +0100

    Add oslo-incubator code unmodified
    
    I want to make it absolutely clear what changes we're making from the
    original driver code, so let's start with a pristine copy.
    
    Change-Id: I38507382b1ce68c7f8f697522f9a1bf00e76532d

commit 43ab36d1a19c2021ca079afd9c8e629988dd2981
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jul 22 07:50:53 2013 +0100

    Make executor threads more robust
    
    See bug #1189711
    
    Prevent the executor thread getting killed by exceptions.
    
    Change-Id: I0787fa619a6a8a35a303627f8ce119c93f2c8765

commit 8eeaf67be905603038e225b96f3573a2a8dda5c8
Author: Sergey Lukjanov <slukjanov@mirantis.com>
Date:   Sat Jul 20 00:43:45 2013 +0400

    Allow use of hacking 0.6.0 and fix min version
    
    Change-Id: I91d8eafc2fa50cb4fab4df2960274be2f5c237a4

commit 837aa03c4358e8fd86bbfed9f5e657366f4f7e2c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 10 09:31:45 2013 +0100

    Include docstrings in published docs
    
    Change-Id: Icdfb0535b26162d39c3af683b7729b5e834d89b9

commit 3e8c891d67cd96af70217bc71cb53880be397c28
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jul 10 08:51:37 2013 +0100

    Use oslo.sphinx and remove local copy of doc theme
    
    Use the new oslo.sphinx version of the OpenStack doc
    theme instead of copying it into this repo.
    
    blueprint oslo.sphinx
    
    Change-Id: I0bd91f7bb43f97b99051fed65b75fc05d5149cc8

commit 39f57dab5957abfb42802a306d888b23c284b302
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 13:22:24 2013 +0100

    Add some notes

commit 7c087f23d246b47f05f94402d0ce510045f34b02
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 12:03:29 2013 +0100

    Unit tests for notifier

commit fc99d966afa4912bfbbd9925632763bb9d83ef90
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 12:39:52 2013 +0100

    Make test notifier useful
    
    We need a way to query what notifications were sent to the test notifier
    and later clear out that list.

commit 75c376aab034d2e21bc9eb5ab3cc6a9dee9d7ac3
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 12:39:25 2013 +0100

    Use lowercase priority in log notifier

commit 54d875bcac61d80dcd1651cc597d6e456a1e41ec
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 12:02:46 2013 +0100

    Use lowercase priority in notifications topic

commit 4000eec07ca58226d99dc3f0c943c950c2734397
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:38:11 2013 +0100

    Handle case where no drivers configured

commit 89e7301e4eeb9a0bad47d914e0f39ba0d3bd5570
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:30:43 2013 +0100

    Fix buglet in v2 messaging notifier

commit ec9b36dec2f83d1060aa4c5c977e6b00581ab2a2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:15:52 2013 +0100

    Make LOG private in notifier

commit 351eb2d9e4542bbef4cd5cede3c2d3f323b0250a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:12:32 2013 +0100

    Require a transport to construct a Notifier
    
    Rather than construct it from cfg.CONF by default, just require that one
    is supplied.

commit cfeaf2a292ca81a899a259cf31681bfe1a926def
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 14:11:59 2013 +0100

    Add serializer support to notifier
    
    The notifier in oslo-incubator does:
    
      payload = jsonutils.to_primitive(payload, convert_instances=True)
    
    Using the serializer abstraction should be a more general was of
    supporting this.

commit f17f00ba88f2b35b09c18ef7f053571b1c473bc0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 13:38:03 2013 +0100

    Rename context to ctxt in serializer API

commit fcfe15af049853897a86f3904607efa1360f68aa
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 13:36:28 2013 +0100

    Rename context to ctxt in notify API
    
    ctxt is the name we've used in the rest of oslo.messaging, so ...

commit eb94be8834f8d572fa8e1f83e81b260102fa0c88
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:12:16 2013 +0100

    Make Notifier public at top-level

commit b5e43afc37e1683e222a48bd8c5c1700c417c336
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 13:21:42 2013 +0100

    Docstrings for notifier API

commit d0bb030d5904a7b638d8ff4598776d5f4b6abafa
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 24 07:14:32 2013 +0100

    Fix notify drivers namespace

commit e03c2d4e9a5b026c05ca9f16e41f1d61c273582a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 14:20:55 2013 +0100

    Remove backwards compat entry point aliases
    
    There's no point in supporting
    
      oslo.rpc.impl_kombu
    
    since what we need to support is
    
      nova.openstack.common.rpc.impl_kombu

commit 03aafcb49c2c0dded12786c0885945aa821d5b2f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 23 16:41:50 2013 +0100

    Simplify public symbol exports
    
    Inspired by tulip, have every module define a __all__ list and import *
    from the top-level module.
    
    Rename transport.set_defaults() since we don't want this to be a
    top-level set_defaults() function as there may be multiple.
    
    Also, rather than configuring flake8 to allow star imports, just exclude
    the __init__.py files from flake8 checks.

commit d31ae442cae88d710c06b501b66e7b205b820480
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 17 23:01:21 2013 +0100

    Use assertEqual() rather than assertEquals()
    
    assertEquals() is deprecated:
    
      http://docs.python.org/2/library/unittest.html#deprecated-aliases

commit 2f4d53921f56b0d5414ad386fb3a21712d138f2c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 17 22:48:43 2013 +0100

    Remove accidental use of messaging.rpc_server
    
    Hmm, maybe this means we should use __all__ to avoid exporting these
    imports.

commit 5cd662a517dfe98c2abbaf1408671d158a45953a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 16:02:16 2013 +0100

    Make exchange_from_url() use parse_url()

commit 3e3a13eefdc433e6885ffdfb0427378123193427
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 15:37:56 2013 +0100

    Unit tests for URL parsing code

commit 1a8adfbceb59817a12288b0751d6e5067c8c274d
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 15:56:49 2013 +0100

    Fix parse_urls() buglets
    
    When you expect split() to return 2 values, make sure to tell it to only
    do a single split.

commit 29cb5b0b586965417239b0e9c973fec71024b475
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 15:24:50 2013 +0100

    Move url utils into messaging._urls

commit e67f409b87b853c7a472e44c4b1a402b5ffa4a22
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 12:30:49 2013 +0100

    Don't use common logging
    
    It appears we don't actually need this - we don't, for example, use any
    of the special formatting supported by ContextAdaptor.

commit 1f1ba52e011c9685bdc15c8fe8ca50644d5e747b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 12:24:16 2013 +0100

    Update example scripts for recent API changes

commit 9cb803ee1068f05eb1c8e9ce332087c869dad127
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 12:23:11 2013 +0100

    Fix fake driver with eventlet
    
    By storing the reply_q on the listener, we were assuming there was only
    one message being dispatched at the time. Put it on the incoming message
    instead and use it directly in reply().

commit fd68391d53d81beb62d9b3f91cc7fe82a37748de
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 12:00:09 2013 +0100

    Use log.warning() instead of log.warn()
    
    warn() is provided by ContextAdapter, there's no reason to use it.

commit daae091c7c71ebbdcfa63495e3cdacff828b5c7e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 11:57:47 2013 +0100

    Fix some pep8 issues

commit d8219996291ce7dfcb386b55f4f4e72ece7250d0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 11:55:47 2013 +0100

    Don't translate exception messages

commit 563383b51d674d7b8ee62f33dfb10090f4160e92
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 09:47:18 2013 +0100

    Knock off a few TODOs

commit 293a34c1560425bf963c9079a3f38e58fbef9423
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 16 09:39:09 2013 +0100

    Add can_send_version() to RPCClient
    
    Add a helper method to the RPCClient class.  This is a little nicer to
    use for checking to see if a given message is copmatible with the set
    version cap.
    
    This can be used in a bunch of different ways:
    
      client = RPCClient(version_cap='1.6', version='1.0')
      client.can_send_version()
      client.can_send_version(version='1.6')
    
      client = client.prepare(version_cap='1.8', version='1.5')
      client.can_send_version()
      client.can_send_version(version='1.2')
    
    Co-authored-by: Russell Bryant <rbryant@redhat.com>

commit 395d818d73938e198049f7938ddcf8447b3c7c16
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:29:32 2013 +0100

    Check start() does nothing on a running server

commit 24af12f0533fb0c81de916a657c70069e34bae2f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:27:11 2013 +0100

    Remove unused statements in base serializer

commit cf44b8d01da3f008c867abf6b7777b3f8f88fdbe
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:25:34 2013 +0100

    Fix thinko in exchange_from_url()
    
    Funnily enough, this was just shown by the coverage report.

commit dd4b8bd672a14d8469bc8ef32b19cea31bced6cc
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:22:10 2013 +0100

    Call wait() in server tests
    
    Just for the sake of the coverage report.

commit 0fc785267f2a9fc59641a4c80c7c4a549ffc4ec9
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:20:26 2013 +0100

    Add docstrings for base executor class
    
    Avoiding spurious missed lines in coverage report.

commit de88d62998c2d2fd27703d2c11516d3ac876f8c9
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:19:05 2013 +0100

    Remove a fixed fixme

commit 54f01ade9e5a79c99461eb8aab88ac641e3b1a99
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 21:18:01 2013 +0100

    Add a client call timeout test

commit 1ab3b83f433f40f13a8239df98d9f2e717554087
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 19:24:32 2013 +0100

    Don't raise a driver-specific error on send
    
    Similar to doing listen() on the server side, if the driver throws an
    exception when we do a cast() or call() we should translate it into
    a transport-agnostic exception.

commit 2be7df70b020828a62fc5094bbd48c407708f726
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 19:13:45 2013 +0100

    Add some docstrings to driver base
    
    Eliminates spurious missed lines from coverage report.

commit 2eda85e3baf319d92eb5f5edaa9c0d4cc0c2d103
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 18:55:37 2013 +0100

    Test a bunch more RPC server scenarios

commit 8a8685b62ff3e17e3f3ff4042ac828ae88b0151c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 16:13:42 2013 +0100

    Make it possible to call prepare() on call context
    
    Found it's quite easy to get into doing e.g.
    
      client = RPCClient(...)
      client = client.prepare(topic='foo')
      client = client.prepare(server='bar')

commit 978d19c256414dca03838ee5d2626ec30cb6643b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 13:57:04 2013 +0100

    Rework how queues get created in fake driver
    
    Currently, if there are no servers listening on a topic then a message
    to that topic just gets dropped by the fake driver.
    
    This makes the tests intermittently fail if the server takes longer to
    start.
    
    Turn things on their head so that the client always creates the queues
    on the exchange so that messages can get queued up even if there is no
    server listening.
    
    Now we also need to delete the "duplicate server on topic" test - it's
    actually fine to have multiple servers listening on the one topic.

commit 8bf3c862b3401676801c7208980c8a35467433d2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 10:23:56 2013 +0100

    Use testscenarios
    
    Now that we're using testr rather than nose, we can actually use
    testscenarios.
    
    Nice diffstat ... 474 lines removed :)

commit cbfb1452a4c85ca4eff5bc2b7803b556f7682856
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 07:43:39 2013 +0100

    Move files to new locations for oslo.messaging

commit be649d1d749a6be30fac6913d63e5801944c28a6
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 08:13:20 2013 +0100

    Import stuff from oslo-incubator

commit b5c41bba00375d4fb42e740c23b98a5b70af6820
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Jun 15 07:49:11 2013 +0100

    Add oslo.messaging project infrastructure

commit 50f5f3b925aff18241ce2eed2f5018ca1b2368dc
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 14 11:50:03 2013 +0100

    Add some RPC server tests
    
    These actually test the blocking executor and fake driver too.

commit a32e0b42a500770b0c034c37716fba7de30a91a2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 14 15:18:56 2013 +0100

    More gracefully handle "no listeners" in fake driver

commit badb0fa4e68a7b917638620a43d21dcbf5cee7f0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 14 14:45:40 2013 +0100

    Better error handling in server.start()
    
    Transport drivers can raise transport driver specific exceptions
    in listen(). Catch such exceptions and wrap them in a ServerListenError
    which callers to start() can explicitly handle.

commit f0f3d4b5f2613f0e2082a1ef5d106d3044dd55a4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 14 11:41:49 2013 +0100

    Re-work server API to eliminate server subclasses
    
    This is something I think Doug has been trying to tell me to do from the
    start :-)
    
    The main idea is to remove all the MessageHandlingServer subclasses and,
    instead, if you want a server which is hooked up with the RPC dispatcher
    you just use this convenience function:
    
      server = rpc_server.get_rpc_server(transport, target, endpoints)
    
    This means the dispatcher interface is now part of the public API, but
    that should be fine since it's very simple - it's a callable that takes
    a request context and message.
    
    However, we also need to be able to construct a MessageHandlingServer
    with a specific executor. By having an executor_cls parameter to the
    constructor as part of the public API, we'd be exposing the executor
    interface which is quite likely to change. Instead - and this seems
    obvious in retrospect - just use stevedore to load executors and allow
    them to be requested by name:
    
      server = rpc_server.get_rpc_server(transport, target, endpoints,
                                         executor='eventlet')
    
    This also means we can get rid of openstack.common.messaging.eventlet.

commit 7a1c2730a05262b6e4f24e165253097bbd711b90
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 14 09:44:13 2013 +0100

    Add license header to _executors/__init__.py
    
    Bleh.

commit 7ca7fed9ea7b85089158c2e026e6c3c0864552b3
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jun 12 07:42:35 2013 +0100

    Add RPCDispatcher tests

commit 3e07f5b5bf322251a3abe80e84b2c47c39001c5a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jun 12 07:40:03 2013 +0100

    Check for return value in client serializer test

commit f8648b36cf34d99a367e3697b05f42fa392e7535
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Jun 12 16:46:56 2013 +0100

    Add note about can_send_version()

commit 8f3ab4fa0951bbc5244317ed3a4746fe8d55fd5e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jun 11 14:38:39 2013 +0100

    More client unit tests

commit fbb20dda28d719f560efd10d890fba79fe7665df
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jun 11 21:39:26 2013 +0100

    Make RPCClient.check_for_lock a callable
    
    We really don't want to depend on openstack.common.local since it
    implies a dependency on eventlet.corolocal.
    
    Instead, make the check_for_lock parameter a callable which is given the
    ConfigOpts object and returns a list of held locks. To hook it up to
    lockutils, just do:
    
      client = messaging.RPCClient(transport, target,
                                   check_for_lock=lockutils.check_for_lock)
    
    Although you probably want to use lockutils.debug_check_for_lock() which
    only does the check if debugging is enabled.

commit d80b8fe683ceef41362cbc1d50223b85aa2b7ff8
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jun 11 16:44:16 2013 +0100

    Apply version cap check when casting
    
    We were only applying it when calling.

commit 5972e8c16f321ee4c7adae2eedb5b2548b6421be
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jun 11 12:22:21 2013 +0100

    Make RPCVersionCapError extend base exception

commit 08744d849a3b132068817220d1fe2ea272e539cb
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Jun 11 07:26:19 2013 +0100

    Remove a bogus param from client.prepare() docs

commit 0da344d8fce9e645ddd7b3da3553cacf4cdd687f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 15:19:20 2013 +0100

    pep8 fixes for serializer code

commit 2f1ef1ffe3bf82cb8f21d84ddb36114e380d8e63
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 12:07:15 2013 +0100

    Simple RPCClient test

commit 62dcede6b60469f794d34741539070f3d7f65e21
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 9 14:46:40 2013 +0100

    Unit tests

commit 95119398e29eae0fcb613e404697ee46a2a6f23a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Jun 9 14:45:50 2013 +0100

    Move some stuff into doc/
    
    This won't end up in the final patch set, just leave here for now. Also
    makes nose ignore the test code.

commit 6929a729877e3577a26c50f0b1dbeca6724d889d
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 12:04:13 2013 +0100

    Implement Target.__eq__()
    
    Needed for unit tests, but probably useful for other cases too.

commit 79a10f26ee2b6e26e780e1ee0ec6018630966f7e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:30:52 2013 +0100

    Fix bug in exchange_from_url()
    
    Needs testing obviously :)

commit a0feafa9a7df9993bf999dd6cda2065ef68ad9d0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:31:31 2013 +0100

    pep8 fixes for fake driver

commit 1e61c02742ab2825bdff852738750c85d7b1b745
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:28:50 2013 +0100

    Make utils.parse_url() docstring pep8 compliant

commit 2ba5a6a1bec65807eb820c88be7147ba5567ad17
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:30:05 2013 +0100

    Don't translate exceptions
    
    All our exceptions so far don't seem to be messages we ever
    intentionally want shown to a user.

commit 23c566e3e225fed97b3a7759c9076cc938db2805
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:46:09 2013 +0100

    Misc pep8 fixes

commit 81e8dc9033ce1eb6a8de837de98c60db3e9130e4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 14:44:13 2013 +0100

    pep8 fixes for toplevel package
    
    Otherwise we get e.g.
    
      F401 'RPCClient' imported but unused

commit ee0e546150ab74e7936a315865f8d4d436a1a9a0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jun 10 10:34:52 2013 +0100

    Some error handling improvements

commit 20f19d1c7023ee75d15df3e4c1d3580ea6837b26
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 14:36:16 2013 +0100

    Recommend wrapping the client class rather than subclassing
    
    Based on Doug's comments in:
    
      https://github.com/markmc/oslo-incubator/pull/6

commit b2d6dcd2efee351c820e0affb88a431206060018
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 14:29:51 2013 +0100

    Document how to use RPCClient directly

commit f67c09027742773101839abac8c435b064db77f1
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 11:10:24 2013 +0100

    Document the public RPC API
    
    I think I've covered everything that's public, which actually turns out
    not to be a whole lot.
    
    Still need to document the notifications API.

commit e6a237d7666548e7e1b94acb7617ffa12f99d7aa
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 14:18:01 2013 +0100

    Fix defaults for client.prepare() args
    
    None is a legitimate value to pass in for any of these args, so use a
    marker object to distinguish between None and "no value supplied".

commit 5d34b37109ccc9d1b417b5c2f6ebeaa50077e7b7
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 14:17:06 2013 +0100

    Fix client.cast() typo

commit b928fb64e0de561e14dd962ee58c021ad9656021
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 14:15:35 2013 +0100

    Fix version_cap typo

commit 69233f8b658fc0e9dc70a1ffdaeadd88dfaa7f03
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 12:38:41 2013 +0100

    Allow all target attributes in client.prepare()
    
    There's really no reason not to - you could have a single client object
    invoking methods on a variety of different targets so long as they're
    all available via the same transport.

commit c2c2e17f25c29ca10394c44f6ab639cf2a1fa471
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 11:29:34 2013 +0100

    Expose Serializer from top-level namespace
    
    I guess the idea is that users of the API shouldn't have to import
    specific modules other than I/O framework specific modules.

commit 7cf7b386c8a372f68c7ad02a9597e2ab39fe4fd9
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 11:05:22 2013 +0100

    Allow specifying a serializer when creating a server
    
    Since the dispatcher class isn't public, we need to allow this to be passed via
    the server constructor.

commit 65d985053cfb21847309b3cab4b4770b72d86f38
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 10:49:37 2013 +0100

    Make endpoint.target optional
    
    If an endpoint has no target set, or if it is set to None, just act
    like the target is Target(namespace=None, version='1.0')
    
    Also, refactor the dispatcher's inspection of endpoints a little.

commit 5b654345c82a85e0ad4085dde6f5cc54e5be7078
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 07:59:30 2013 +0100

    Dispatch methods in their own greenthreads
    
    This mimics what we do with amqp.ProxyCallback.
    
    It might be nice to have errors like "no such method" and "unspupported
    version" raised before spawning a greenthread, but that would mean
    either turning the dispatcher into a two step lookup/invoke interface or
    having I/O framework specific dispatchers.

commit b44541e6177a4b6f6623629248dab2915a75ce51
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 07:09:49 2013 +0100

    Make rpc.dispatcher private
    
    This is just an implementation detail of the public EventletRPCServer
    and BlockingRPCServer classes.
    
    This is important because I'm not sure we've got the right separation
    of concerns between executors and dispatchers yet:
    
      http://lists.openstack.org/pipermail/openstack-dev/2013-June/009934.html
    
      That implies that you need to pair a tulip-aware executor with a
      tulip-aware dispatcher. We'll probably need to do something similar for
      eventlet too.
    
    I think we need the RPC dispatcher to just know about RPC specific stuff
    and there's a single abstraction for I/O framework integration.

commit 101846c71bd7cdd770b2339db876bebb92427135
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 07:05:16 2013 +0100

    Make the base RPCServer class private
    
    There's no point in this being public since the executor interface is
    private.

commit b517d426878b6f3414468d927b8f48a7cb530693
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jun 7 11:09:19 2013 +0100

    Fix typo with the serializer work

commit 0f620045dbd8c1215d1b3c9e276674c63daba1c4
Author: Doug Hellmann <doug.hellmann@dreamhost.com>
Date:   Fri May 31 09:31:21 2013 -0400

    Update use of stevedore
    
    Use the NamedExtensionManager instead of the DriverManager,
    since we have multiple notification drivers.
    
    Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>

commit a81e840cd54dfb365b92278025833cc3f2040699
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 31 16:25:51 2013 +0100

    Require topics and target in notify driver constructors
    
    Pointed out by Doug.

commit 4ede9a917839a5c4ba19230f839116eaab50bc44
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 31 06:52:00 2013 +0100

    Add generic serialization support
    
    Copy across Dan Smith's work in commit 93ee6e3.

commit 952f82e1971348b45410a764c696a3ce896b7710
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 31 06:33:37 2013 +0100

    Support namespace in RPCClient.prepare()
    
    Noticed we were missing this when comstud added the opposite support to
    RpcProxy in commit df7ea83.

commit ff2c04834f6f416bfdf358b0aefa3528a43fee03
Author: Flaper Fesp <flaper87@gmail.com>
Date:   Tue May 21 15:34:14 2013 +0200

    Add parse_url to _utils.
    
    The patch adds parse_url to _utils as an attempt to find a common url
    format that satisfies most drivers needs. The code isn't definitive but
    instead the beginning for further discussions. Current code parses
    transport urls like this:
    
    qpid://test/test
    {'exchange': 'test',
     'hosts': [{'host': 'test', 'password': '', 'username': ''}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://test:port/test
    {'exchange': 'test',
     'hosts': [{'host': 'test:port', 'password': '', 'username': ''}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://username:password@test:port/test
    {'exchange': 'test',
     'hosts': [{'host': 'test:port',
                'password': 'password',
                'username': 'username'}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://username:password@test:port
    {'exchange': None,
     'hosts': [{'host': 'test:port',
                'password': 'password',
                'username': 'username'}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://username:password@test:port,test2:port2/test
    {'exchange': 'test',
     'hosts': [{'host': 'test:port',
                'password': 'password',
                'username': 'username'},
               {'host': 'test2:port2',
                'password': 'password',
                'username': 'username'}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://username:password@test:port,:@test2:port2/test
    {'exchange': 'test',
     'hosts': [{'host': 'test:port',
                'password': 'password',
                'username': 'username'},
               {'host': 'test2:port2', 'password': '', 'username': ''}],
     'parameters': {},
     'transport': 'qpid'}
    
    qpid://username:password@test:port,:@test2:port2/test?option=value
    {'exchange': 'test',
     'hosts': [{'host': 'test:port',
                'password': 'password',
                'username': 'username'},
               {'host': 'test2:port2', 'password': '', 'username': ''}],
     'parameters': {'option': ['value']},
     'transport': 'qpid'}

commit d559a86ec9408dfafa8a54960754f42979f8137e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon May 20 07:24:53 2013 +0100

    Remove entry point lists from the public API
    
    Before the move to pbr, I thought it would be cute to include the lists
    of entry points in the public API. After pbr, the entry points are only
    in a config file, so it doesn't make much sense.

commit ab269871338535419ca7e756ab734318b5e0aa34
Author: Russell Bryant <rbryant@redhat.com>
Date:   Wed May 15 16:39:04 2013 -0400

    Support capping message versions in the client.
    
    When doing a rolling upgrade, we need to be able to tell all rpc clients
    to hold off on sending newer versions of messages until all nodes
    understand the new message version.  This patch adds the oslo component
    of this.
    
    It's quite simple.  The rpc proxy just stores the version cap and will
    raise an exception if code ever tries to send a message that exceeds
    this cap.
    
    Allowing the cap to be configured and generating different types of
    messages based on the configured value is the hard part here, but that
    is left up to the project using the rpc library.
    
    Implements blueprint rpc-version-control.

commit 704f2c33191278a34887e1d9d3ea6a940eeb717b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon May 20 07:05:52 2013 +0100

    Fix RPCClient check_for_lock()
    
    Missing self parameter. Also no need for the return value.

commit e8429af763591758e22cc167ca71ce2daa0b3480
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 17 18:48:55 2013 +0100

    First cut at the notifier API
    
    See:
    
      https://wiki.openstack.org/wiki/Oslo/Messaging#Emitting_Notifications

commit 48a1cfae8ab1cf873ecd2f4146d87c9f001c7e0d
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon May 13 11:42:09 2013 +0100

    Add some notes

commit a7c47bf16b48aa968425ba945fdaddec82deedb5
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon May 13 11:33:41 2013 +0100

    Add IncomingMessage abstraction
    
    When an executor polls for a message, the driver needs to return the
    request context and the message.
    
    Later, if the executor wishes to send a reply, it needs to pass back
    a handle which identifies the message so that the transport can deliver
    the reply.
    
    In the current interface, we're just passing back the context and
    message to the transport so this presumes that the transport would
    attach whatever it needs to one of these objects.
    
    In the AMQP drivers in openstack.common.rpc, we set attributes like
    reply_q and msg_id on the returned context. However, it would be much
    better if we never touched the user-supplied context and, instead, had
    some other way to pass this info to the executor and then have it passed
    back to the transport.
    
    To achieve that, add an IncomingMessage abstract class which wraps the
    context and message and has a reply() method. That way, transports can
    subclass this class, add whatver attributes they want and implement a
    reply method.
    
    To repeat what this means ... we can allow users of the API to use
    read-only mapping objects as a context, rather than requiring it to be
    an object we can set arbitrary attributes on.

commit 07534f47a550a13daf79eb5660be4be98b0f59d6
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon May 13 07:46:34 2013 +0100

    Pass a context dict
    
    Plumb a context dict all the way through the stack.
    
    This is ugly, but:
    
      - it seems valid to have generic support for a message context
        that is implicitly included in all RPC interfaces
    
      - rabbit/qpid serialize the context differently, so we really
        need to pass it all the way down to the transport to continue
        to support this
    
      - notifications also send a context, so it's not rpc specific

commit 70c42e63365ecf3c3c574623b3cd89f5861dd352
Author: Flaper Fesp <flaper87@gmail.com>
Date:   Mon May 13 12:31:10 2013 +0200

    Fix docstring

commit e2b74cc9e6605156dfd6e36cdfd1b5136161d526
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 15:46:55 2013 +0100

    Implement a fake driver
    
    A bunch of FIXMEs in here, but it seems like a good start.
    
    Note that this differs from the original fake driver. Rather than the
    driver consuming each message in a greenthread, we leave it up to the
    choice of executor to determine how the consumer is run in parallel to
    the client and we use thread-safe queues to pass the messages and
    replies back and forth. The main reason for this is that we don't want
    the driver explicitly depending on eventlet.

commit 4771afb5e2d1823606c5a51637ca82736de21989
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 13:19:59 2013 +0100

    Adding reply infrastructure
    
    This is pretty rough.

commit 9a7eb04e13d4ac91e50c60a67cbbd1ed90c2bc62
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 17:39:31 2013 +0100

    Add some exceptions

commit eb77cbdb6dd582b5e44aefea7f821bda3dbb22b4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 17:46:27 2013 +0100

    Fix buglet with default timeout

commit 27868dd24d9fd701e2c4c3218f42c16b8577e992
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:33:33 2013 +0100

    Fix target/namespace target buglet

commit 79f09386137028495603b0c1f8a79edf874a4d63
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:18:36 2013 +0100

    Fix rpc client buglets

commit 2e26a082d4ac1b099c671de921961b2702dcfef9
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:23:13 2013 +0100

    Fix 'Blockinging' typos

commit 1353bafb7e1691408b997c9888e59161116543dc
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:22:53 2013 +0100

    Missing self parameter to server start()

commit 246fb5235ee44a47e7959527de3e7051d83985fb
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:22:37 2013 +0100

    Fix default_exchange typo

commit bb5d6d94d555a91b2f9da1258aee90146ccd9998
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 13:20:41 2013 +0100

    Add forgotten piece of eventlet executor

commit 7492f2d9ea7032d45242e6ee026efdacb6b54494
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 13:20:21 2013 +0100

    It's _executors not _executor

commit 93447e8381da5ffde6b88f0d245b8344e292c806
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 16:17:00 2013 +0100

    Make poll() just return the message
    
    The driver shouldn't be pulling the namespace and version from the
    message since that's RPC specific stuff.
    
    Also, it's not terribly useful for the driver to pass back a target
    object describing the exchange and topic the message was received on
    since that's implicit in the listener.

commit 7c3697f77b84045f9f9d06388b59c41bc8ae2cbe
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 13:18:43 2013 +0100

    Make drivers list public again
    
    Make the list of drivers public via the o.c.m.drivers module.

commit e8a0756a3a518a980bc4909e3688429a429fc4d2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 11 13:57:51 2013 +0100

    Add top-level convenience aliases
    
    This means you can do e.g.
    
      from openstack.common import messaging
    
      target = messaging.Target(...)
    
      transport = messaging.get_transport(...)
    
      class Client(messaging.RPCClient):
         ...
    
    rather than e.g.
    
      from openstack.common.messaging.rpc import client
      from openstack.common.messaging import target
      from openstack.common.messaging import transport
    
      target = target.Target(...)
    
      transport = transport.get_transport(...)
    
      class Client(client.RPCClient):
         ...

commit 1fd958678fadc3d9c73e4da08e05229e1f426330
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 16:07:21 2013 +0100

    Prefix the executors module with underscore
    
    With the MessagingServer API now private, we don't actually need to
    expose the concept of an executor.
    
    We may find in future that we want to support an executor type which
    we don't want to include in the library itself but, for now, let's
    be conservative.

commit 5675f2603e34671d4184f7e9933778e5f35f3e1a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 16:04:10 2013 +0100

    Prefix the messaging.server module with an underscore
    
    I'm assuming for now that we'll have a specific notifications
    consumption API which will use this as an internal implementation
    detail. We can make this public again in future if/when we know
    what the use case for it is.

commit ae6019ff827cab63410d3c61a8d5e7ec2371524a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 16:00:42 2013 +0100

    Prefix the drivers module with an underscore
    
    To make it clear that the drivers API isn't public and stable.
    
    See the discussion in:
    
      https://github.com/markmc/oslo-incubator/pull/3

commit d588b49cd0fb80572ac71e5571423ca29310daeb
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 15:48:48 2013 +0100

    Make transport methods private
    
    These methods are private to the library, so we're prefixing them
    with an underscore even though it's a bit unconventional.
    
    See the discussion here:
    
      https://github.com/markmc/oslo-incubator/pull/3

commit ea2e34f37ac0bae1c8a38962d59d22f6ac94930f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 12:52:21 2013 +0100

    Fix little typo in server exception class name

commit e54343ba1549ef50a5309b8dc0464f680309a7b2
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 12:33:00 2013 +0100

    Add missing utils module

commit a136bb089d7438f2ff1c7fd0ea77c15e94331e8b
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 12:16:16 2013 +0100

    Add convenience RPC server classes
    
    Rather than forcing all users of the server API to construct a
    dispatcher and import a specific executor, add a convenience server
    class e.g.
    
      server = eventlet.EventletRPCServer(transport, target, endpoints)
    
    Note that openstack.common.messaging.eventlet need be the only public
    module which has a dependency on eventlet. We can expose servers,
    clients and anything else eventlet specific through this part of the
    API.

commit e14ddb80e58129861c993a3c541822f29ee15933
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 10 12:06:20 2013 +0100

    Update changes.txt for recent API changes

commit 2405fd2619633e390343984d02763e037a736ef5
Author: Flaper Fesp <flaper87@gmail.com>
Date:   Wed May 8 16:55:56 2013 +0200

    Use : for loading classes in entry_points

commit 5fb15b61f50fb13fd9b457abf64c7451b1452901
Author: Doug Hellmann <doug.hellmann@dreamhost.com>
Date:   Mon May 6 16:05:10 2013 -0400

    Split the dispatcher from the executor and server
    
    Move the executors into a sub-package and organize the
    code so that only one module imports eventlet.
    
    Rename messaging/rpc/server.py to messaging/rpc/dispatcher.py and
    leave only the dispatcher there.
    
    Move the rest of the server code to messaging/server.py where it
    can be reused with other dispatchers.
    
    Remove the convenience functions for instantiating servers
    to avoid having eventlet imported in the module with the base
    class.
    
    Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>

commit c7e204279b5ef3abe0a9fefe966b0664493c337c
Author: Doug Hellmann <doug.hellmann@dreamhost.com>
Date:   Mon May 6 15:29:37 2013 -0400

    Make driver and transport methods public
    
    The methods of the driver and transport should
    be public, since they are used outside of those
    classes.
    
    Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>

commit 3a910e8f72c2ef71792beb6c051c914ee4ae883a
Author: Flaper Fesp <flaper87@gmail.com>
Date:   Mon May 6 20:54:12 2013 +0200

    Pass the driver instance to the listener instead of config
    
    There are a couple of cases where having the driver instance is a good
    thing for the Listener, though, I would like to use the connection
    management as motivation here:
    
    Instead of creating a new connection for every Listener it would be
    possible to let the driver instance managing the whole connect /
    reconnect and session handling process.
    
    In the old implementation, when a reconnect happens, the connection
    instance calls every consumer and sets the new connection / session to
    them.
    
    See: http://github.com/openstack/oslo-incubator/blob/master/openstack/common/rpc/impl_qpid.py#L368
    
    Listeners can access the config instance through the driver instance.

commit fb67f72375f9e3b4a9dcbec9c5596245ed0159b1
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat May 4 11:12:43 2013 +0100

    Try out replacing "executor" for "dispatcher"
    
    Suggestion from Doug

commit 6199614494f384134f0eca21c6f09537c59dc89e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri May 3 15:20:38 2013 +0100

    Fix host vs server typo
    
    Thanks to Eric

commit 20c3674021680ed85173db1f7b62acde35ffd231
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Apr 30 06:49:56 2013 +0100

    Initial framework