commit f81cde600bd64abfcb493f5057aa05943f88f02a
Merge: f397c42 0eb5a6f
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Jan 28 06:17:56 2014 +0000

    Merge "Expose an entry point to list all config options"

commit f397c4264b07ddee62d6ec524012a9d0a3925914
Merge: 1d25c5a 2ab1503
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Jan 28 06:13:36 2014 +0000

    Merge "Fix test case name typo"

commit 1d25c5ae20cdd8a9faf5a7f7dc2195a46e5be861
Merge: 2862f50 a5c7d6a
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Jan 27 21:25:38 2014 +0000

    Merge "Fix help strings"

commit 0eb5a6f6c73b1300021dd8afef69459fa5b0f6cb
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jan 10 17:43:02 2014 +0000

    Expose an entry point to list all config options
    
    Register a oslo.messaging entry point in the oslo.config.opts namespace
    which, when called, returns a list of the configuration options which
    may be registered by the library at runtime.
    
    The idea here is that the sample config file generator can query this
    and include the returned options in the sample config file of any
    applications which use the library.
    
    Some sample code for fetching available options:
    
      import pkg_resources
    
      for ep in pkg_resources.iter_entry_points('oslo.config.opts'):
          if ep.name == "oslo.messaging":
              list_opts = ep.load()
              for g, opts in list_opts():
                  opts.sort(key=lambda x: x.name)
                  print "[%s]" % g
                  for o in opts:
                      print "%s = %s" % (o.name, o.default)
                  print
    
    Related-Bug: #1241566
    Change-Id: Ic28351258652d2ea38974e2f4d1aa6b1d3dd7192

commit 2ab150325bb9811284ebb95e37b2e259d67121a0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Jan 27 10:39:20 2014 +0000

    Fix test case name typo
    
    This is just a copy-and-paste typo.
    
    Change-Id: Ibe350ca650363749f88bbbc115898a8071129415

commit 2862f502a6aabd89f0d532e0968ac9c4fba30111
Merge: 258299d 30c9334
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Jan 23 13:38:54 2014 +0000

    Merge "Routing notifier"

commit 258299d3767c15cc3a7819e21c5c5461189d4076
Merge: 60b6a9f fff2255
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jan 22 11:23:44 2014 +0000

    Merge "Add release notes for 1.3.0a3"

commit a5c7d6a2dfd70af11b7aa112699a8d8f7b48152a
Author: Andreas Jaeger <aj@suse.de>
Date:   Sat Jan 18 14:36:11 2014 +0100

    Fix help strings
    
    Use sentence style capitalization on help strings.
    
    Change-Id: Ib3a8393eb0f3244d2ee431e71d3632195903b708

commit fff225538c2319a5fcd462d080569aeec189cd69
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Jan 17 12:38:51 2014 +0000

    Add release notes for 1.3.0a3
    
    Change-Id: If97e1d695e498aac41aabbc1cea7cb9336b3b725

commit 60b6a9fe9d713ea4e2cd8b5fd61ecb852ca3cfc7
Author: Dirk Mueller <dirk@dmllr.de>
Date:   Thu Jan 16 14:31:01 2014 +0100

    python3: Switch to mox3 instead of mox
    
    In order to transition to a python 3.x compatible world,
    lets switch to mox3 which is python 3.x compatible drop-in
    replacement of mox.
    
    Change-Id: Iaa22779cd516f842c9f70828f863f90ddae0bab5

commit f5df5cb17787a82b8671cb72cfa1a93538340878
Author: Dirk Mueller <dirk@dmllr.de>
Date:   Thu Jan 16 13:04:49 2014 +0100

    Remove dependencies on pep8, pyflakes and flake8
    
    They should be determined by the hacking dependency
    implicitely.
    
    Change-Id: I2baec6b652baa2efbbf5dd2ead0eeb91b961210b

commit 30c933430652a7b366824d17a59793ca64e48ddf
Author: Sandy Walsh <sandy.walsh@rackspace.com>
Date:   Mon Dec 2 21:08:07 2013 +0000

    Routing notifier
    
    Takes a yaml-based config file
    (see etc/oslo/routing_notifier.yaml.sample) via
    routing_notifier_config option.
    
    Events may be routed by priority or event_type.
    
    Implements: blueprint configurable-notification
    Change-Id: I437dfac348f387044e6da3d6a0bbb208323c1741

commit d3f3fd775916b9e93aacdc55af54870eea282fee
Author: Zhongyue Luo <zhongyue.nah@intel.com>
Date:   Fri Jan 10 09:07:16 2014 +0800

    Removes use of timeutils.set_time_override
    
    The set_time_override function in timeutils was written as a
    helper function to mock utcnow for unittests before 'mock' was
    generally used. Now that we have mock and fixture, we no longer
    need to use it.
    
    Change-Id: I9a0727edab12ccd5f1e4eb4f5f62d588f5a0faee
    Partial-Bug: #1266962

commit abfa7ff5e979fbd8821e8e237cebc9804becd53e
Merge: 4f431ea 9ff4d99
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sun Jan 12 23:17:34 2014 +0000

    Merge "Fix duplicate topic messages for Qpid topology=2"

commit 4f431ea65265687370cc6277b1913428d6309f61
Merge: 7f3e866 2e59af9
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Jan 11 17:06:08 2014 +0000

    Merge "Fix spelling errors in comments"

commit 7f3e866a15125dbda8b124a45cd6032d5b009a37
Merge: 0fd4923 be5386a
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Jan 11 07:36:40 2014 +0000

    Merge "Fix test_notifier_logger for Python 3"

commit 0fd4923e2f65341055afa8f24e35a0e03dec235e
Merge: 2144327 43e9d5f
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Jan 11 07:36:30 2014 +0000

    Merge "Fix try/except syntax for Python 3"

commit 2e59af91ba0653969d3eb7c937400620038d8f66
Author: Stanislav Kudriashev <skudriashev@griddynamics.com>
Date:   Fri Dec 27 13:50:12 2013 +0200

    Fix spelling errors in comments
    
    Change-Id: I9f7de85912c687d37661c3301b5898960082fc13

commit 21443273beaa2115f15c441e38dc832ede22ae7e
Merge: f3e03c9 4631118
Author: Jenkins <jenkins@review.openstack.org>
Date:   Fri Jan 10 01:38:31 2014 +0000

    Merge "fix test_rabbit for Python 3"

commit f3e03c9fff423b839fa0060ccd5ce4800c6763f6
Merge: 04cb722 690868b
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jan 8 18:37:39 2014 +0000

    Merge "Minor Python 3 fixes"

commit 04cb7223a54af96ac6b93e07d835512a0b3eb512
Merge: 84d5786 fb5ace0
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Jan 8 18:35:26 2014 +0000

    Merge "Fix exception deserialiation on Python 3"

commit be5386ab36acc96c963b39cbce162ebd2b5b841e
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 18:10:29 2013 +0100

    Fix test_notifier_logger for Python 3
    
     * Get the current line at runtime, don't hardcode the line number
     * Only strip last character of the filename if it ends with ".pyc"
       or ".pyo".  On Python 3, import automatically replaces .pyc and
       .pyo with .py.
     * Use threading.current_thread().ident to get the identifier of the
       current thread. The get_ident() function is available in thread
       module in Python 2, but in threading module in Python 3. And on
       Python 3, logging.thread symbol does not exist anymore.
    
    Change-Id: I3f248bb860caafaf38eefcf440d36b9bebc8f05e

commit 690868bc99ee4d82edc2546b4b5fa594b397cb37
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 14:23:24 2013 +0100

    Minor Python 3 fixes
    
    basestring does not exist anymore in Python 3: use six.string_types instead.
    
    In "try: .../except Exception as err: ...", err is a local variable, it does no
    more exist after the except block. Copy the exception in a new cls_error
    variable to fix Python 3 support.
    
    Extract of Python 3 documentation: "When an exception has been assigned using
    as target, it is cleared at the end of the except clause. (...) Exceptions are
    cleared because with the traceback attached to them, they form a reference
    cycle with the stack frame, keeping all locals in that frame alive until the
    next garbage collection occurs."
    
    http://docs.python.org/3.3/reference/compound_stmts.html#try
    
    Change-Id: I2efb14b3838f78d1ed5e09b3ccd4e796a3448aee

commit 84d5786f1aa6c0c7571f4273c2fbf8bd9ea7b9fb
Author: Eric Guo <eric.guo@easystack.cn>
Date:   Thu Jan 2 19:54:41 2014 +0800

    Remove copyright from empty files
    
    According to policy change in HACKING:
    http://docs.openstack.org/developer/hacking/#openstack-licensing
    empty files should no longer contain copyright notices.
    
    Closes-Bug: #1262424
    Change-Id: I22d5881537cff120ae10b2fb3141c427d621214b

commit 9ff4d9982354c06495dbabbc8fa8455de02a49cc
Author: Ihar Hrachyshka <ihrachys@redhat.com>
Date:   Fri Jan 3 11:15:44 2014 +0100

    Fix duplicate topic messages for Qpid topology=2
    
    Manually applied ef406a21782134aeefb944f74b3f1a47d6169318 from
    oslo-incubator to get the fix required for bug 1257293.
    
    Copying the original commit message from oslo-incubator below.
    
    """
    When multiple RPC servers (consumers) are subscribed to the same RPC
    topic, a single RPC request to that topic should be received by only
    one of the consumers.  A bug in the QPID driver caused every consumer
    to receive a copy of the RPC request.  This bug affects only Topology
    version 2.  This patch will cause a single queue to be created for
    each topic, and shared among all consumers of that topic.  This
    results in each RPC request being received by only one consumer,
    in turn across all the competing consumers.
    """
    
    Change-Id: I76bfa5b48bad4a70fbf06b74f4cc8234af6610c2
    Closes-bug: #1257293.

commit 062c8ac7dd15d723f250987d2650c7d55e490ace
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 14:58:31 2013 +0100

    Replace dict.iteritems() with six.iteritems()
    
    dict.iteritems() was replaced with dict.items() in Python 3. Use the
    six.iteritems() function to get code compatible with Python 2 and Python 3.
    
    Change-Id: I0c8ecc3ae540ffaf4c6b159e09ca16ccf365973d

commit 4631118af827a8438b38c5e30977ed368ba4513e
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 18:11:23 2013 +0100

    fix test_rabbit for Python 3
    
    Replace range() with list(range()), range() returns a read-only "range" object
    in Python 3.
    
    Change-Id: If92e60b426ccbba574e63e1603cc3d7507df6c98

commit 43e9d5fef55316f2ff35802626a96ecb45d21c6d
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 17:18:55 2013 +0100

    Fix try/except syntax for Python 3
    
    "except (IOError, errors):" fails with a TypeError if errors is a tuple on
    Python 3, whereas it was accepted in Python 2.
    
    Change-Id: I65cfb60af87e76fdf2d37043fb106adbd4586fb9

commit fb5ace04ba5f0daa81cc8817e172e4bf96077f17
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Wed Dec 18 18:37:09 2013 +0100

    Fix exception deserialiation on Python 3
    
    Builtin exceptions are now in the builtins module, the exceptions module has
    been removed.
    
    Fix also the unit test for tracebacks, Unicode representation doesn't start
    with "u" prefix anymore (u'...').
    
    Change-Id: I422be457e23066699950c9a3999878ecf65f1b3f

commit 64f91d30a8ad870e433c0dab2fe51db24769aeec
Merge: 351118f f1cb11a
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Dec 17 22:49:04 2013 +0000

    Merge "sysnchronize oslo-incubator modules"

commit 351118f577b1dfa3ef28cbb4ddfc092e47e38d9a
Merge: aa2d689 2aaad74
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Dec 17 22:35:20 2013 +0000

    Merge "Fix syntax of relative imports for Python3"

commit aa2d689f97fec9cf93f1b333dab5bd6cfda4d0e5
Merge: e57a15d 43884bf
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Dec 17 22:34:00 2013 +0000

    Merge "Add Sample priority"

commit 43884bfbb4c6e2e07a98f368610b686aedc1e42b
Author: Sandy Walsh <sandy.walsh@rackspace.com>
Date:   Wed Dec 4 18:53:18 2013 +0000

    Add Sample priority
    
    With the routing notifier we can now issue high-frequency notifications
    and not worry about clogging up the queue. The Sample priority will
    be used for this situation.
    
    Change-Id: Ia4aa77b7aa4ca9458e97ca3ed81101d92934b691

commit f1cb11a550cc69e02d18d6cd66d68a8c9607526a
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Tue Dec 17 10:46:40 2013 +0100

    sysnchronize oslo-incubator modules
    
    Update to get jsonutils compatible with Python 3.
    
    The babel Python module is now required by gettextutils, and gettextutils is
    imported by excutils.
    
    Change-Id: Ifa6d6b29e2af58dfcfda1ab7efdb2f32cf9de655

commit e57a15deb8540b9b1c27395176ff69b77c77606d
Author: Mehdi Abaakouk <mehdi.abaakouk@enovance.com>
Date:   Mon Dec 16 17:21:25 2013 +0100

    Remove eventlet related code in amqp driver
    
    Because driver should rely on executor and not directly on eventlet,
    delete eventlet related code. This also drop the old driver API.
    
    This is the amqp part.
    
    Change-Id: Ic6060058dafa4dabbc5e8c68bf231c818a7fec25

commit 2aaad74bacaa0b86de400bd655aa22a63878d384
Author: Victor Stinner <victor.stinner@enovance.com>
Date:   Thu Dec 12 16:17:32 2013 +0100

    Fix syntax of relative imports for Python3
    
    In Python 3, relative imports must be written "from .module import name":
    http://docs.python.org/3.0/whatsnew/3.0.html#removed-syntax
    
    Change-Id: I2ec8a7330e63ea64d291f2f37f0c01cdf765d4f7

commit 33202134bdb4c31f99a2d9a49ad2660122c0b979
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Tue Dec 10 23:44:54 2013 +0000

    Updated from global requirements
    
    Change-Id: Iec5cac6baeba71e6724fd6270f3d5dd87f1e730d

commit db45e3be9f89473c95ef56593bb6ed9667052e47
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Tue Dec 10 00:18:49 2013 +0000

    Updated from global requirements
    
    Change-Id: I79a5e54f094fc219d1f5f12745811c3824966309

commit 77c319d9a996fbc34a57df138ac759791383f30d
Merge: 9798825 39d1dde
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Dec 9 18:24:06 2013 +0000

    Merge "Avoid creating qpid connection twice in initialization"

commit 9798825811ad75711e15856f44ee3336805aa48e
Merge: 0d6d858 db9e8d3
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Dec 9 18:24:05 2013 +0000

    Merge "Unify different names between Python2 and Python3"

commit 0d6d8588050df4135ccdd28575826982a955e1ae
Merge: 2278ce0 b38b3a3
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Dec 9 18:24:04 2013 +0000

    Merge "Replace data structures' attribute with six module"

commit db9e8d3c616ac6b04d359dd187e33cd76d13003f
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Sat Dec 7 20:34:28 2013 -0800

    Unify different names between Python2 and Python3
    
    Some modules have different names in Python2 and Python3. This patch
    make them compatible with Python 3.
    
     * Use six.moves.filter instead of itertools.ifilter() in Python 2.
     * Use common.py3kcompat.urlutils instead of urllib and urlparse.
    
    Change-Id: Ia27ebf6057d91d0e129fbe90f995cfdaa89efa8a

commit b38b3a3c134d888ff73dd8756df4e6998c0d5a78
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Tue Dec 3 15:41:59 2013 +0000

    Replace data structures' attribute with six module
    
    In Python 3, some data structures' attribute is different in Python 2.
    See http://pythonhosted.org/six/#object-model-compatibility
    This is change mapping:
    
       six               Python 2           Python 3
    six.next(it)         it.next()          next(it)
    six.iterkeys(dict)   dict.iterkeys()    dict.keys()
    six.itervalues(dict) dict.itervalues()  dict.values()
    
    Implements: blueprint make-python3-compatible
    Change-Id: Ida48f39ff230860feee7305b93b134c625a21663

commit 39d1dde432efd40e2517d7c9054263910dda0a1f
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Sat Dec 7 19:52:46 2013 -0800

    Avoid creating qpid connection twice in initialization
    
    In current logic, class impl_qpid.Connnection constructor calls
    method connection_create twice indirectly. Let us avoid this.
    
    Change-Id: I7618cf3506d857579dc37b338690d05179ba272d

commit 2278ce0b95cc2d3c5fe5adae3a3055126a5b368f
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Sat Dec 7 19:35:41 2013 -0800

    Use six.moves.queue instead of Queue
    
    The Queue module has been renamed to queue in Python 3.
    Use six.moves.queue to fit the change.
    
    http://docs.python.org/2/library/queue.html#module-Queue
    
    Change-Id: I2940f34d161b2e3cbc5464619f76e6adea4ef9f6

commit 1e8ef86626bea1c11797c2c84c66f47f393aaa12
Merge: f0d32ef 5b8fbdc
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Dec 7 10:14:14 2013 +0000

    Merge "Add transport aliases"

commit f0d32ef5f0eb5e1defc095fc3bd7619194a0150b
Merge: 875acfc 1a2377c
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Dec 7 10:12:21 2013 +0000

    Merge "Fixed misspellings of common words"

commit 5b8fbdcad25875491890cfce135d31671c4cabe0
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Nov 29 21:55:45 2013 +0000

    Add transport aliases
    
    We need to support deprecated transport driver configurations like:
    
     rpc_backend = nova.rpc.impl_kombu
    
    i.e. 'nova.rpc.impl_kombu' is a deprecated alias for 'rabbit'.
    
    Initially, we supported this by adding the aliases to each project's
    setup.cfg:
    
    oslo.messaging.drivers =
        nova.rpc.impl_kombu = oslo.messaging._drivers.impl_rabbit:RabbitDriver
    
    However, this means that code like this:
    
      url = str(TransportURL(conf))
    
    generates a bogus URL string like:
    
      nova.rpc.impl_kombu://...
    
    We need to apply these transport aliases when we load drivers, but also
    when we create transport URLs from configuration containing potentially
    deprecated aliases.
    
    To enable that, add an aliases parameter to TransportURL(),
    TransportURL.parse() and get_transport().
    
    blueprint: transport-aliases
    Change-Id: Ifce68ff62746c2a363c719417a2bd0a78ee025dd

commit 875acfc29b0f9eb5880ca280eef8afcca18ad2e8
Merge: 378506c 42ce3ab
Author: Jenkins <jenkins@review.openstack.org>
Date:   Fri Dec 6 17:34:06 2013 +0000

    Merge "Remove the partial implementation of ack_on_error"

commit 378506c79e53f5630677885245daa1e7e1fda473
Merge: 3a2287c 2937692
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Dec 5 17:11:04 2013 +0000

    Merge "Add release notes for 1.3.0a2"

commit 42ce3ab4b58becd8f02e2eaa664d87dc15046d6e
Author: Mehdi Abaakouk <sileht@sileht.net>
Date:   Fri Nov 29 15:13:25 2013 +0100

    Remove the partial implementation of ack_on_error
    
    The ack_on_error is not used by the abstraction layer, and only the
    rabbitmq implements it.
    
    This commit remove this feature, and next commit will add a new way for
    this.
    
    Partial implements blueprint notification-subscriber-server
    
    Change-Id: I17eb23f2e3e374630251576438011f186e5b2150

commit 3a2287c9e6a097e0ce67f9263bde0aabb117988f
Merge: e58636c d04fab6
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Dec 5 09:27:48 2013 +0000

    Merge "Ensure context type is handled when using to_dict"

commit e58636c26ac52f649bb73c20cf804f688940459f
Merge: 566c40e ffa5c07
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Dec 5 09:10:27 2013 +0000

    Merge "Properly reconnect subscribing clients when QPID broker restarts"

commit 1a2377c485cacb953dcc1c55c41e9281402407ea
Author: Nikhil Manchanda <SlickNik@gmail.com>
Date:   Wed Dec 4 15:38:27 2013 -0800

    Fixed misspellings of common words
    
    Fixed misspelling of common words found by the misspellings tool.
    
    Change-Id: I4dfa38e84e09fc08fdecf025663351ca62e09fd8
    Closes-Bug: #1257531

commit 566c40e92dc6ad9a368d4e8df09ce9e784500160
Merge: d5285e9 5d046a5
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Dec 4 05:28:53 2013 +0000

    Merge "Remove vim header"

commit d5285e9bda83fa3be73f8d636fa1ddc5b3287455
Merge: ab867fb ae60d4a
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Dec 4 05:28:52 2013 +0000

    Merge "Unify different names between Python2/3 with six.moves"

commit 2937692464a042c24d056d154fe2dc3a6691333e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Tue Dec 3 23:18:42 2013 +0000

    Add release notes for 1.3.0a2
    
    Change-Id: If4cf83d605801047053530ca5c7970e30132b4b0

commit ae60d4ad77adb29de8bdcb3bdbd476fda35b67f4
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Tue Dec 3 15:40:51 2013 +0000

    Unify different names between Python2/3 with six.moves
    
    Some modules use different names in Python2 and Python3. Use six.moves
    to make them work well in Python2 and Python3.
    This is changes mapping:
    
    six.moves      Python 2       Python 3
    reduce         reduce()      functools.reduce()
    
    Implements: blueprint make-python3-compatible
    Change-Id: I97971f2ab40385bfc2c73ae7e8a7620c4d64a03c

commit 5d046a5c97517fcd336e02e089549980bbced83d
Author: Joe Gordon <joe.gordon0@gmail.com>
Date:   Tue Dec 3 15:39:15 2013 +0000

    Remove vim header
    
    No need to set tabstop 189 times, this can be set in your vimrc file
    instead.  Also if set incorrectly gate (pep8 check) will catch your
    mistakes.
    
    Change-Id: Ic6f0c0ef94e8194a5c121598305d1ec3c74e4843

commit d04fab69856e9c03b648f1dea42f9ef1f1cae4c4
Author: Lance Bragstad <ldbragst@us.ibm.com>
Date:   Tue Dec 3 15:18:41 2013 +0000

    Ensure context type is handled when using to_dict
    
    Handle the case where the context passed into def pack_context() is a
    dictionary. If a dictionary is passed in, we don't need to call to_dict
    before updating the msg.
    
    Closes-Bug: #1208971
    Change-Id: I2ce0b28f97634e717868e0ee5525189338d4981c

commit ab867fb7d021a8c5656964b3e5ba7ddbd00005e7
Author: Zhongyue Luo <zhongyue.nah@intel.com>
Date:   Tue Dec 3 15:17:26 2013 +0000

    Refactors boolean returns
    
    Return the boolean evaluation itself rather than
    a boolean after evaluation
    
    Change-Id: I6329d474c921e29eb3a690270de12d51cb863710

commit fda06f68062fcd81817a48e0f8ad2fd1139a59dc
Merge: 2b9bafd 97b9dec
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Dec 3 13:34:30 2013 +0000

    Merge "Remove useless global vars / import"

commit 2b9bafd269a34c2e0b434adf3331fa67b35b5a6d
Author: Julien Danjou <julien@danjou.info>
Date:   Mon Dec 2 15:02:23 2013 +0100

    Simplify common base exception prototype
    
    It seems there's no gain in trying to be smarter and different from the
    base Python Exception, so let's remove our custom code to be more
    compatible and friendly with all Python versions.
    
    Change-Id: I259783ef1f77c6661ea7dc2325605c8d6290b898

commit ffa5c077c98f5489b978f63c507793839e8f2a7d
Author: Kenneth Giusti <kgiusti@gmail.com>
Date:   Fri Nov 15 15:24:37 2013 -0500

    Properly reconnect subscribing clients when QPID broker restarts
    
    When the QPID broker is restarted (or fails over), subscribed clients
    will attempt to re-establish their connections.  In the case of fanout
    subscriptions, this reconnection functionality is broken. For version
    1 topologies, the clients attempt to reconnect twice to the same
    exclusive address - which is illegal.  In the case of version 2
    topologies, the address parsing is broken and an illegal address is
    created on reconnect.  This fix avoids the problem by removing the
    special-case reconnect code that manages UUID addresses; it is
    unnecessary as the QPID broker will generate unique queue names
    automatically when the clients reconnect.
    
    Closes-bug: #1251757
    Change-Id: I6051fb503663bb8c7c5468db6bcde10f6cf1b318

commit 97b9deca88915d2e7af34463e31f52ba3c2c9033
Author: Julien Danjou <julien@danjou.info>
Date:   Mon Dec 2 15:26:53 2013 +0100

    Remove useless global vars / import
    
    This removes a few import and global variables that are not used through
    the code. That cleans things a little.
    
    Change-Id: I7b30bb11e8ad3c2df01ca2107eff2444feed3fe2

commit 86b0750f3e349d7567fbdf94adb3999570af0d28
Merge: f9ab2e1 41c629d
Author: Jenkins <jenkins@review.openstack.org>
Date:   Fri Nov 29 20:58:14 2013 +0000

    Merge "Avoid storing configuration in notifier"

commit 41c629dc030e7af10b34cd68b62ed42f771751c2
Author: Julien Danjou <julien@danjou.info>
Date:   Fri Nov 29 17:50:59 2013 +0100

    Avoid storing configuration in notifier
    
    The notifier itself doesn't use the configuration. So let's not store
    it, that lights the dependency a bit on this configuration object.
    
    Blueprint: messaging-decouple-cfg
    
    Change-Id: Ic4b5ddd93ea0382bd8292f9e31b7dacba9b489d3

commit f9ab2e105fc079d102ce18be1b767eeb44146a4c
Author: Julien Danjou <julien@danjou.info>
Date:   Thu Nov 21 18:29:39 2013 +0100

    Implement a log handler using notifier
    
    Change-Id: Iccac043d46a733e965b3310bbbe9c7d6c07a46ac
    Blueprint: logging-and-notification

commit 010163d8eec0905d510bba851a8ed55c1863ca2e
Author: Julien Danjou <julien@danjou.info>
Date:   Wed Nov 27 11:48:09 2013 +0100

    notifier: add audit level
    
    This maps what is provided by the openstack.common.logging module.
    
    Change-Id: Id581c4c748e2763a2c9a3e576e3bd497595adbff

commit 5912b58233a795d5c6e6a377441c609f15634cb0
Author: Julien Danjou <julien@danjou.info>
Date:   Wed Nov 20 14:31:40 2013 +0100

    Add 'warning' as an alias to 'warn'
    
    The standard Python logging system uses 'warning' and not 'warn'. To
    ease compatibility with it, let's add 'warning' too.
    
    Change-Id: I7778d7960ca7a72be007cb083e5434ede6e3fe6e

commit f137822ab0da65d3d8aaa59fbbc45986bf3799e9
Merge: c98d7ed 9ea06ba
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Nov 26 21:50:22 2013 +0000

    Merge "Supply missing argument to raise_invalid_topology_version()"

commit c98d7edef877b3386634842c66a68a8b75e232b3
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Thu Nov 21 03:06:02 2013 -0800

    Decouple from Oslo uuidutils module
    
    uuidutils module will be deprecated in Icehouse, So need replace it.
    This patch uses str(uuid.uuid4()) instead of method generate_uuid.
    
    Closes-Bug: #1253497
    Change-Id: I35815544429c489096b4db3fa79a649f4cd9459f

commit 9ea06bac57a49c0df947fcaddb005864148b4e8c
Author: Kenneth Giusti <kgiusti@gmail.com>
Date:   Wed Nov 13 14:09:14 2013 -0500

    Supply missing argument to raise_invalid_topology_version()
    
    Change-Id: I110255fd426e61840989a520a8f3708dc4d9b8ab

commit 7e1fddb2171f4ce3ccceb507eea2ee413e81c66d
Author: Russell Bryant <rbryant@redhat.com>
Date:   Wed Aug 28 12:09:54 2013 -0400

    Support a new qpid topology
    
    There has been a bug open for a while pointing out that the way we
    create direct exchanges with qpid results in leaking exchanges since
    qpid doesn't support auto-deleting exchanges.  This was somewhat
    mitigated by change to use a single reply queue.  This meant we created
    far fewer direct exchanges, but the problem persists anyway.
    
    A Qpid expert, William Henry, originally proposed a change to address
    this issue.  Unfortunately, it wasn't backwards compatible with existing
    installations.  This patch takes the same approach, but makes it
    optional and off by default.  This will allow a migration period.
    
    As a really nice side effect, the Qpid experts have told us that this
    change will also allow us to use Qpid broker federation to provide HA.
    
    DocImpact
    Closes-bug: #1178375
    Co-authored-by: William Henry <whenry@redhat.com>
    Change-Id: I09b8317c0d8a298237beeb3105f2b90cb13933d8

commit 2414524c6e3f5bd680d4223aff69b2d64394f247
Merge: 6490ad6 2545a5d
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Nov 14 14:47:45 2013 +0000

    Merge "Remove hosts as property in TransportURL"

commit 6490ad672e71bb6734cddfd0c7d5dcaeeb9a6410
Merge: 0d54ae4 c65bfb7
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Nov 14 14:46:44 2013 +0000

    Merge "Remove property on virtual_host in TransportURL"

commit 2545a5d80654a67535a0ced63773148162310e51
Author: Julien Danjou <julien@danjou.info>
Date:   Tue Nov 12 17:50:19 2013 +0100

    Remove hosts as property in TransportURL
    
    There's no need to use this indirection there.
    
    Change-Id: Ia0d247693509f14b1a0a2faffb7da8884c679170

commit c65bfb7a554bbd0eb4fb1e8b2f779d6b83ab90fa
Author: Julien Danjou <julien@danjou.info>
Date:   Tue Nov 12 17:48:47 2013 +0100

    Remove property on virtual_host in TransportURL
    
    This isn't useful at all.
    
    Change-Id: I1025da66a0f382cc3ecec15acf01890d75257a6a

commit 0d54ae4a2f165458289d6de884f86e99f2e74767
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Mon Nov 11 18:49:45 2013 +0000

    Updated from global requirements
    
    Change-Id: I9d453b1270f82821273b1cc654e031599c1f9f77

commit 0b078b6062892080b9dafc1e454443e1c67ebe9f
Author: Chang Bo Guo <guochbo@cn.ibm.com>
Date:   Sun Nov 3 05:11:05 2013 -0800

    Fix some typos and adjust capitalization
    
    Change-Id: I61cf108f9746fc44a08d83e11d44ed1007a6a1fa

commit b29a1462c2c6706fdf823ff3f30137ad79e389e2
Author: Christian Strack <strack@mathematik.uni-marburg.de>
Date:   Thu Oct 31 12:50:45 2013 +0100

    Changes driver method for notifications
    
    Oslo.messaging.Transport is used as an abstraction to redirect function
    calls to the configured driver. _send_notification called
    self._driver.send instead of self._driver.send_notification
    
    As the test
    oslo.messaging.tests.TestTransportMethodArgs.test_send_notification also
    assumed that send was the correct method, this should be changed
    accordingly
    
    Change-Id: I9406d74f3dc13c44d1aaad5379aafbf1a8580137

commit 7914181398630cbcbc25543d72871ccf812df517
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Oct 23 07:28:58 2013 +0100

    Properly handle transport URL config on the client
    
    On the client side, in the rabbit and qpid drivers, we use a connection
    pool to avoid opening a connection for each message we send. However,
    there is only currently one connection pool per process:
    
     def get_connection_pool(conf, connection_cls):
         with _pool_create_sem:
             # Make sure only one thread tries to create the connection pool.
             if not connection_cls.pool:
                 connection_cls.pool = ConnectionPool(conf, connection_cls)
         return connection_cls.pool
    
    This is a nasty artifact of the original RPC having no conectp of a
    transport context - everything was a global. We'll fix this soon enough.
    
    In the meantime, we need to make sure we only use this connection pool
    where we're not using the default transport configuration from the
    config file - i.e. where we supply a transport URL.
    
    The use case here is cells - we send messages to a remote cell by
    connecting to it using a transport URL. In our devstack testing, the
    two cells are on the same Rabbit broker but under different virtual
    hosts. Because we were always using the connection pool on the client
    side, we were seeing both cells always send messages to the '/' virtual
    host.
    
    Note - avoiding the connection pool in the case of cells is the same
    behaviour as the current RPC code:
    
     def cast_to_server(conf, context, server_params, topic, msg, connection_pool):
         ...
         with ConnectionContext(conf, connection_pool, pooled=False,
                                server_params=server_params) as conn:
    
    Change-Id: I2f35b45ef237bb85ab8faf58a408c03fcb1de9d7

commit 9853fc6ac534a5251010e2695490d22845a17c2e
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Thu Oct 24 13:17:27 2013 +0000

    Updated from global requirements
    
    Change-Id: I8275dd8bfd72d3a71d9606f8822a778023c1f0b9

commit 18a11da1dc52ecd825f56f8988779f7c56cffdf3
Merge: 189c206 2ec1fb7
Author: Jenkins <jenkins@review.openstack.org>
Date:   Thu Oct 24 01:14:51 2013 +0000

    Merge "Properly handle transport:///vhost URL"

commit 189c206b4a07dce819a6e697218ba3d9b60672c3
Merge: 1dc1709 c59e04f
Author: Jenkins <jenkins@review.openstack.org>
Date:   Wed Oct 23 19:50:26 2013 +0000

    Merge "Replace assertEquals with assertEqual"

commit 1dc1709669fc05e66590806e3cd2593deb884308
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Wed Oct 23 14:37:20 2013 +0000

    Updated from global requirements
    
    Change-Id: I7080ecd84738030e9143f6b313522e2e5ebf6540

commit c59e04fbfaee1e042bd0bc82a1152f9d0e87c9a7
Author: Zhongyue Luo <zhongyue.nah@intel.com>
Date:   Fri Oct 11 11:30:24 2013 +0800

    Replace assertEquals with assertEqual
    
    The method assertEquals has been deprecated since python 2.7.
    http://docs.python.org/2/library/unittest.html#deprecated-aliases
    
    Also in Python 3, a deprecated warning is raised when using assertEquals.
    
    Change-Id: Iba0ae72e72470cdf5b122defcd68effc5434f948

commit 2ec1fb7572d97a7c460e0198ddd1922b81ea1d21
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Oct 23 07:25:27 2013 +0100

    Properly handle transport:///vhost URL
    
    Currently, if we are supplied with a transport URL with only the virtual
    host specified, we completely ignore it. Instead, the behaviour should
    be that we use that virtual host with the host, port and credentials
    from the config file.
    
    Change-Id: Ic97aa511ddf9bce69b1a5069d9f6468f4bd6dd4c

commit 0b8f688efd8a08f6202a117fb1d519cdb8f98331
Merge: b2cef24 3a2a4d9
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Oct 21 17:16:30 2013 +0000

    Merge "Make rpc_backend default to 'rabbit'"

commit b2cef2460392e36dda6da434a4493bded2a61bfb
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Sun Oct 20 00:00:50 2013 +0000

    Updated from global requirements
    
    Change-Id: I076e205d326c8da4e72032d81e46be21cba8ebe5

commit 3a2a4d9831f3786b19424ee0d29847d95c5cd871
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Oct 18 14:54:26 2013 +0100

    Make rpc_backend default to 'rabbit'
    
    'rabbit' is the canonical name for the driver and 'kombu' is just an
    alias, so let's set the default to the canonical.
    
    Change-Id: If163ece6793d2a7d6e99d0c8df1745bbcf9a36e6

commit 14310fa45f6716fb83be5f2d6447dd87d904aa6a
Merge: 5f76009 5af4478
Author: Jenkins <jenkins@review.openstack.org>
Date:   Tue Oct 15 11:41:57 2013 +0000

    Merge "Add third element to RPC versions for backports"

commit 5f760096d6f5369acf3632d2c9b6daa11204cf81
Author: Davanum Srinivas <dims@linux.vnet.ibm.com>
Date:   Mon Oct 14 10:42:15 2013 -0400

    Apply six for metaclass
    
    __metaclass__ cannot be used in python3.six be used in general
    for python 3 compatibility.
    
    Porting Change-Id I9fc7a59df3af29b4cc1287c40fa4e883d994a961
    from oslo-incubator
    
    Change-Id: Icdacdcf5556b6d3b8450d1350c6f62b4f5a9690b

commit 5af4478fb265dd6a60c3124e730b3241d5786db9
Author: Davanum Srinivas <dims@linux.vnet.ibm.com>
Date:   Thu Oct 10 12:08:06 2013 -0400

    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).
    
    Porting chages from Change-Id I239c17a3e305f572493498c4b96ee3c7514c5881
    to oslo-incubator
    
    Change-Id: I4fa7b0be14a7afba36136a746b76036355f119b2

commit 91f74d8df0e039bf558e8948f2c8f38d809c16b4
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Oct 13 08:13:43 2013 +0100

    Fix rpc client docs
    
    Missing a colon before the example code, see:
    
      http://docs.openstack.org/developer/oslo.messaging/rpcclient.html
    
    Change-Id: Icd875e509b0057c2c739d43c11cd37ab923b59ee

commit f0ad97b344bd65e62d0a702da67650eeede0edc5
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Thu Oct 10 20:26:31 2013 +0000

    Updated from global requirements
    
    Change-Id: I4f26d3a8790c799e5c1f7f81031406e0c57545f9
    
    Change-Id: Ica7315effe308bd739e90f885849fac27a3c542b

commit a1b57a5452a9e714bb36e3fb038467cd4fdfcd0c
Author: Monty Taylor <mordred@inaugust.com>
Date:   Mon Sep 30 11:07:58 2013 -0400

    Remove cruft from setup.cfg
    
    packages is recursive, so there is no need to list subpackages
    versions are set by tags, so the version in the file is not needed
    non-d2to1-based pbr does not need the hook specification
    
    Change-Id: Id5e6c19dfe81c630862e9b87b7f9e5f67a965945

commit 2aa1dc6ca3a949b71e648bcb1b24d4cd543dfbb2
Author: OpenStack Jenkins <jenkins@openstack.org>
Date:   Tue Oct 1 16:14:29 2013 +0000

    Updated from global requirements
    
    Change-Id: I81e3d4bf4eef833b0b55d17e2a55028972ea4b55

commit 86f2e74e13ca66446ed71922965b491424b4fffb
Author: Kenneth Giusti <kgiusti@gmail.com>
Date:   Mon Sep 16 15:14:39 2013 -0400

    Fixes a typo in the address string syntax
    
    Closes-Bug: #1211338
    Change-Id: I49ffc4f70cfa54a03c47537c16c35646d38f84c6

commit b6d808774683bb0dab13fddddf49543f6bf00627
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 28 13:48:19 2013 +0100

    Implement the server side of ZmqDriver
    
    This implements the server side of the driver without modifying the
    existing code by allowing the driver to spawn off multiple greenthreads
    as before, but queueing any dispatched messages so that the executor
    can still do listener.poll() to dispatch messages itself.
    
    This is a hack, but it's a starting point.
    
    Change-Id: Ie299c2695d81d0473cea81d40114326b89de0011

commit a2d113198c684e585c5bab9e313b4ede8a6aee4f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 28 12:24:04 2013 +0100

    Add zmq-receiver
    
    This is the ZeroMQ server which acts as a proxy for all messages
    destined to a particular host. Again, there are a bunch of FIXMEs
    here. This still needs work.
    
    Change-Id: I9384f486e44b0b0cbca028e219ad66f1990d5181

commit 5d3fc9c18cd030da27b8d2fc0b24b87a69d6d17a
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 28 12:08:18 2013 +0100

    Implement the client side of ZmqDriver
    
    Get sending working with an initial version of the driver. There's a
    bunch of FIXMEs inline reflecting that even the client side needs a
    tonne of work yet.
    
    Change-Id: I6d69ebc9ae3b3999832209e0c4100ffe26e35919

commit ff3a4155bffc7a535e0098a5e5523940b40d7b9e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 28 09:44:59 2013 +0100

    Import zmq driver code with minimal modifications
    
    Modifications are:
    
      - use stdlib logging; no huge need for oslo logging here
    
      - stub out the _() function; we don't have any l10n infrastructure in
        the project and may never have
    
      - change imports to oslo.messaging.openstack.common and
        oslo.messaging._drivers as appropriate
    
    Change-Id: I87b85b79a33dec65e51ed95fff90cc56042240c5

commit 868c085c834b5d20ebe007ce43675b54df8deb7f
Merge: 5c2c320 1806c07
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 26 13:17:49 2013 +0000

    Merge "Remove check_for_lock support in RPCClient"

commit 5c2c32010c557614985eb0bc7a270a937f3089a8
Merge: fd98eba f7cf853
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 26 13:16:42 2013 +0000

    Merge "Don't include msg_id or reply_q in casts"

commit fd98ebadbb4f3fae7d31bb1d90598a259fac0794
Merge: 59299dc aebe53f
Author: Jenkins <jenkins@review.openstack.org>
Date:   Mon Aug 26 13:16:06 2013 +0000

    Merge "Fix race-condition in rabbit reply processing"

commit aebe53f242f40df1b77c61ae60e2ba6a575a1329
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 26 11:10:57 2013 +0100

    Fix race-condition in rabbit reply processing
    
    Concurrency. Sigh.
    
    A sequence of events like this is possible:
    
      - We send a request from thread A
      - Thread B, who is waiting for a response gets scheduled
      - Thread B receives our response and queues it up
      - Thread B receives its own response and drops the connection lock
      - Thread A grabs the connection lock and wait for a response to arrive
    
    The obvious solution is that when we grab the connection lock, we should
    check whether a previous lock-holding thread had already received our
    response and queued it up.
    
    Change-Id: I88b0d55d5a40814a84d82ed4f42d5ba85d2ef7e0

commit 59299dc20243e52b2234b2beb11a23a318fb1012
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 26 10:32:29 2013 +0100

    Fix error message if message handler fails
    
    There are a number of situations in which we log a message if an
    exception occurs during the handling of a message:
    
      1) Something goes wrong pulling the message from the queue and
         de-serializing it - here we print "Failed to process message"
    
      2) An RPC endpoint method raises an expected exception - here we
         print an 'Expected exception during message handling' debug
         message
    
      3) An RPC endpoint method raises any other exception - here we
         should print an 'Exception during message handling' error message
    
    However, in the latter case, we are currently printing out the 'Failed
    to process' error message.
    
    Change-Id: I4f7042b8ec978aaff8f4e20e62ba1ac765fe6ba5

commit f7cf85333c1c8e8df3acc9ec2eb01a2dbc9f7709
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 26 10:09:16 2013 +0100

    Don't include msg_id or reply_q in casts
    
    On the server side, we only send replies if the request included a
    _msg_id key. Also, the _reply_q key is only used when we wish to send a
    reply.
    
    So, in order to retain the exact same on-the-wire behaviour and ensure
    servers aren't sending replies where none is needed, only include these
    keys if we're doing a call (i.e. wait_for_reply=True).
    
    Change-Id: Iac329493252be7d94b1ebe24f00e4d3f5c61d269

commit 1806c0724a8c6c22a53219b9435aa3fcce0b42ab
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Mon Aug 26 09:17:47 2013 +0100

    Remove check_for_lock support in RPCClient
    
    I added check_for_lock because I assumed it was enabled by default and
    actively in use by Nova. However, it actually isn't used by Nova yet and
    enabling spews a tonne of warnings.
    
    It's a rather clunky API and there's a good chance we can design a
    better API for it, so let's leave it out until we're ready to actually
    start using it in Nova.
    
    Related-Bug: #1063222
    Change-Id: Ib890978398059f360cd0f3352f4755262b8111c6

commit 361092a48805e3dedc79ff0f8a18bdc6f35d9e8e
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Wed Aug 21 07:30:49 2013 +0100

    Add a Notifier.prepare() method
    
    Nova sends notifications with a bunch of different publisher_ids, so we
    instantiate quite a lot of Notifier objects. Loading the noification
    drivers for each of these is a substantial amount of overhead.
    
    One obvious answer would be to make publisher_id an argument to the
    error(), info(), etc. methods, but I think it's nice to encapsulate the
    publisher_id in a notifier instance.
    
    Instead, add a prepare() method which mirrors the approach in RPCClient.
    You use this method to create a specialized notifier instance with a new
    publisher_id.
    
    Change-Id: Ia45fda3164086bb7a9ef6dee0587f726ab8b1a97

commit 0555e939be67f1001fd92e7d5b444d95eed51f14
Author: Davanum Srinivas <dims@linux.vnet.ibm.com>
Date:   Sat Aug 17 22:02:02 2013 -0400

    Fix dictionary changed size during iteration
    
    Make a copy of the keys before we operate on it
    
    Fixes LP# : 1212854
    
    Change-Id: I431ffb3878863e9be6d1a35078f7d7c3edf4b133

commit 25647951087d8c8605c60d6231640ddb8acb614f
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sun Aug 18 01:44:37 2013 +0100

    Fix transport URL parsing bug
    
    Handle e.g. foo://u:p@/bar. Right now we get:
    
     IndexError: string index out of range
    
    from:
    
         if hostname[0] == '[':
    
    Change-Id: I0bccebb14ad1d37862955e8988d160240bd1cf6d

commit c79bd1f24c2ee7a0c822db11f5ff0f764b711d03
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Aug 17 21:40:02 2013 +0100

    Fix rabbit driver handling of None, etc. replies
    
    Just like the bug in the fake driver, we have a similar rather
    embarassing and obvious bug - we're currently not allowing endpoint
    methods to send replies of None, '', False, [], {}, etc.
    
    Change-Id: Icf0abdfcf122c5757dd3737f66130b3a53769ef6

commit f0bb1dac2e6df2ad8f4e365e65821fb4ab96f671
Merge: 26722f9 f4e4f45
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Aug 17 17:10:26 2013 +0000

    Merge "Bumps hacking to 0.7.0"

commit 26722f92d97ef8910a56e6a422f99add7410dd0b
Merge: 42c3242 a2f99ad
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Aug 17 16:59:51 2013 +0000

    Merge "Remove ConfFixture from toplevel public API"

commit 42c324293d7bfd79bd1d1223327cc8a290168a90
Merge: a3ffdd1 001d66e
Author: Jenkins <jenkins@review.openstack.org>
Date:   Sat Aug 17 16:58:33 2013 +0000

    Merge "Fix fake driver handling of failure replies"

commit a2f99ad35e9ab7e5bf248b88d939be5b478b1637
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Sat Aug 17 17:49:23 2013 +0100

    Remove ConfFixture from toplevel public API
    
    There's no need to make the fixtures, testtools, etc. libraries a
    runtime requirement, so let's move it from the toplevel oslo.messaging
    API so you need to explicitly import it.
    
    Change-Id: I9e2f32a898d78489f2d8d9c218c81f35cda14e34

commit 001d66e6e56cdc946b5c6115423358206942bc9c
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Aug 16 11:01:26 2013 +0100

    Fix fake driver handling of failure replies
    
    The driver reply() method is actually passed a full sys.exc_info()
    tuple.
    
    This was masked in the unit tests because the driver ended up basically
    doing:
    
      raise (ValueError, ValueError, ...)
    
    which caused a new ValueError to be instantiated and the test was
    satisified. However, if an exception type has some required arguments,
    you'll get a TypeError when this statement attempts to instantiate it
    with no arguments.
    
    Change-Id: I4af9c5084954d7b9c5f02cdae3387d17c206985b

commit f4e4f45433d7e538db1daf2814b14e33f7a90581
Author: Zhongyue Luo <zhongyue.nah@intel.com>
Date:   Fri Aug 16 14:36:30 2013 +0800

    Bumps hacking to 0.7.0
    
    Change-Id: Ife77d8c6a2a479fce0a7879fb72c0b44e1287324

commit a3ffdd1b1666b1fe94910075a93e0418873b5065
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Fri Aug 16 06:31:03 2013 +0100

    Fix transport URL ipv6 parsing support
    
    Just copies code from Nova's cells code.
    
    See I6b18f7643ab694f5ff34206b80865c40b1ec2680 for where this code was
    first introduced.
    
    Change-Id: If9b1503ed47f5910c0ab44edfbe3f42fcce9bf18

commit 747e1a4099e003025d523f6ec49395fc91c43f53
Author: Mark McLoughlin <markmc@redhat.com>
Date:   Thu Aug 15 21:06:31 2013 +0100

    Fix handling of None, etc. replies
    
    A rather embarassing and obvious bug - we're currently not allowing
    endpoint methods to send replies of None, '', False, [], {}, etc.
    
    Change-Id: Ifc5ff8f308f526197559a4df7bed244cff6ed3c1

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