704 Commits

Author SHA1 Message Date
James Page
cd71c47d32 Add functional and unit 0mq driver tests
Basic functional and unit tests for zmq driver.

Note as the zmq driver is directly dependent on eventlet, this
change also updates the notify logger tests to remove the
direct dependency on threading which was being monkey patched,
causing test failures.

As the zmq driver has a direct dependency on eventlet, tests are
skipped under py3.

Co-Authored-By: Kapil Thangavelu <kapil.thangavelu@canonical.com>
Co-Authored-By: Edward Hope-Morley <edward.hope-morley@canonical.com>

Change-Id: I93b8b2e92d0f2a353d3357a5e61f6d472ec84944
Partial-bug: #1302941
2014-12-09 15:02:31 +00:00
Jenkins
f4bb707bc3 Merge "Workflow documentation is now in infra-manual" 2014-12-05 15:35:22 +00:00
Jenkins
a7f3ecb360 Merge "Touch up grammar in warning messages" 2014-12-05 09:58:33 +00:00
Jeremy Stanley
737afde2e1 Workflow documentation is now in infra-manual
Replace URLs for workflow documentation to appropriate parts of the
OpenStack Project Infrastructure Manual.

Change-Id: I1ba19377ed279ccb9f8d698b15678c528cbeade3
2014-12-05 03:30:39 +00:00
Jenkins
d2105f61f8 Merge "Add more TLS protocols to rabbit impl" 2014-12-04 22:18:09 +00:00
Jenkins
1834167b4f Merge "Warn user if needed when the process is forked" 2014-12-04 21:47:03 +00:00
Doug Hellmann
66db2b310d Touch up grammar in warning messages
Change-Id: I556e6e646417be3732a7c31987ec964f9808f079
2014-12-04 16:04:37 -05:00
Jenkins
bf9fd263f9 Merge "Fix reconnect race condition with RabbitMQ cluster" 2014-12-04 14:52:28 +00:00
Mehdi Abaakouk
712f6e3c5e Reintroduces fake_rabbit config option
This change reintroduces the fake_rabbit only for backward compatibility,
but mark it as deprecated.

Now, to use the kombu in-memory driver (that is not thread safe) we must
set the transport_url config option to 'kombu+memory:////" or the
rpc_backend to kombu+memory.

Or we can use the fake driver of oslo.messaging by setting the
transport_url to 'fake:///' or the rpc_backend to 'fake'

This is effectively reverting commit bcb3b23b8f6e7d01e38fdc031982558711bb7586.

Closes-bug: #1399085

Change-Id: I7b6fb3811fc6f695f75ecd350e04e69afd26c428
2014-12-04 11:54:58 +00:00
OpenStack Proposal Bot
554ad9d035 Imported Translations from Transifex
For more information about this automatic import see:
https://wiki.openstack.org/wiki/Translations/Infrastructure

Change-Id: I294617d3042094e367200d9df739932190d43983
2014-12-03 06:10:22 +00:00
Jenkins
3828357c71 Merge "Rabbit: Fixes debug message format" 2014-12-02 16:00:55 +00:00
Mehdi Abaakouk
cb78f2e43d Rabbit: Fixes debug message format
Add the missing 's' for the message format and
just print the number queues instead of print a list
full of '<object object at 0xXXXXXXXXXX>'.

Change-Id: Idaab4057bc6a41523a1944ae0c8e15e5e885b390
2014-12-02 15:32:34 +01:00
Mehdi Abaakouk
2dd7de989f Rabbit: iterconsume must honor timeout
The iterconsume method of the rabbit driver must
honor timeout parameter when reconnection to the broker
occurs.

Change-Id: I666d818449750c6bae9dde02f519842687a8e4fa
2014-12-02 14:42:04 +01:00
Mehdi Abaakouk
bcb3b23b8f Don't use oslo.cfg to set kombu in-memory driver
This removes a TODO and also fixes a issue due to the
global state of oslo.config.cfg.CONF.

Closes bug: #1397339

Change-Id: Ib366f35678f899fda93821e6f07897baf8f631b4
2014-12-02 14:42:04 +01:00
Jenkins
42a2df15dd Merge "Have the timeout decrement inside the wait() method" 2014-12-02 11:10:50 +00:00
Mehdi Abaakouk
f3370da11a Don't share connection pool between driver object
Each driver instance must use it's own connection pool.

This removes the last global state of qpid and rabbitmq driver
Make the relation between classes more simple.

The previous behavior was not very safe, as explained in the bug report.

And also, this is a first step to replace this custom connection pool
handling by the kombu one.

Closes bug: #1397925
Partial bug: #1397339

Change-Id: Iecd2b39c76417d9ac081d46810f72eb6e38edfda
2014-12-02 08:26:17 +01:00
Jenkins
f2234d291f Merge "Show what the threshold is being increased to" 2014-12-02 07:05:38 +00:00
Joshua Harlow
c7d99bf28f Show what the threshold is being increased to
Change-Id: I2182ca88126d636970885fe4403779a879f32aa7
2014-12-01 21:14:23 -08:00
Jenkins
ba8c8d4665 Merge "Wait for expected messages in listener pool test" 2014-12-01 13:11:25 +00:00
Jenkins
5ff5d335e4 Merge "Always use a poll timeout in the executor" 2014-12-01 13:11:18 +00:00
Mehdi Abaakouk
30a5b12eb4 Wait for expected messages in listener pool test
In the listener pool test, we must wait that all expected messages
have been receive before stopping the listener.

Closes bug: #1397338

Change-Id: I5e4b39b54e3b99c014f5f9c77926108b90f94192
2014-11-29 10:04:48 +01:00
Jenkins
f58d03e0de Merge "Set correctly the messaging driver to use in tests" 2014-11-28 17:42:14 +00:00
Jenkins
87a82496a4 Merge "Reduces the unit tests run times" 2014-11-28 17:32:12 +00:00
Mehdi Abaakouk
c8e02e989d Dispath messages in all listeners in a pool
This change ensures that we have messages in each listener of
a pool.

Change-Id: I2bbb830760b7f9c271e6cebe2e3852e2a5a19722
Closes-bug: #1397338
2014-11-28 16:59:07 +01:00
Mehdi Abaakouk
cb96666135 Reduces the unit tests run times
This change reduces all rabbit delay related to retring calls.

Change-Id: Ie50f1a66aefde40d85c194729007182d4f6f6e0c
2014-11-28 15:15:58 +01:00
Mehdi Abaakouk
b369826e42 Set correctly the messaging driver to use in tests
Depending of the order of the tests executions, the driver can be the
previous configured one. But some tests are written to work on a
specific driver

This change sets the fake driver by default.

It also removes useless mock in test_log_handler.

Change-Id: Ic49bb9aec2e537e55a98315eba8dc97fbb18f96b
2014-11-28 15:00:05 +01:00
Jenkins
bd56131b58 Merge "Remove the use of PROTOCOL_SSLv3" 2014-11-28 08:09:13 +00:00
Mehdi Abaakouk
7bce31a2d1 Always use a poll timeout in the executor
This change allows to stop the eventlet executor without
using eventlet.kill.

And also, the kombu docs actually recommend that drain_events
by default have a 1 timeout.

Co-Authored-by: Joshua Harlow <harlowja@yahoo-inc.com>

Change-Id: I3a3919e38d08267439843a127346300fd2131540
2014-11-28 08:39:28 +01:00
Jenkins
b631f46c7f Merge "Renamed PublishErrorsHandler" 2014-11-27 22:03:54 +00:00
Joshua Harlow
f1c7e78a56 Have the timeout decrement inside the wait() method
Currently it appears the timeout provided to the wait()
method will be reused X number of times (where X may be
indeterminate depending on reconnections, loss of messages
and so-on) so instead of reusing it which can potentially
result in a infinite number of calls have a new object be
used that will cause the subsequent timeouts used elsewhere
in the wait function to actually decay correctly.

Closes-bug: #1379394

Change-Id: I12c4ea1eef6b857d12246db0483adaf7c87e740c
2014-11-27 11:22:20 -08:00
Mehdi Abaakouk
eb21f6b263 Warn user if needed when the process is forked
This change warns the library consumer when the process if forked and
we can't be sure that the library work as expected.

This also add some documentation about forking oslo.messaging Transport
object.

Change-Id: I2938421775aa72866adac198d70214856d45e165
Related-bug: #1330199
2014-11-27 16:29:20 +01:00
Ilya Pekelny
e15cd36cd5 Renamed PublishErrorsHandler
For greater clarity, that the class is related to logging, PublishErrorsHandler
renamed to LoggingErrorNotificationHandler. Included an alias from the
old name to the new class for backwards-compatibility.

Change-Id: Iae8e26901bab6d5aa7532add31b49a4345b067fe
Closes-Bug: #1287420
2014-11-27 16:04:07 +02:00
Jens Rosenboom
7ad0d7eaf9 Fix reconnect race condition with RabbitMQ cluster
Retry Queue creation to workaround race condition
that may happen when both the client and broker race over
exchange creation and deletion respectively which happen only
when the Queue/Exchange were created with auto-delete flag.

Queues/Exchange declared with auto-delete instruct the Broker to
delete the Queue when the last Consumer disconnect from it, and
the Exchange when the last Queue is deleted from this Exchange.

Now in a RabbitMQ cluster setup, if the cluster node that we are
connected to go down, 2 things will happen:

 1. From RabbitMQ side, the Queues w/ auto-delete will be deleted
    from the other cluster nodes and then the Exchanges that the
    Queues are bind to if they were also created w/ auto-delete.
 2. From client side, client will reconnect to another cluster
    node and call queue.declare() which  create Exchanges then
    Queues then Binding in that order.

Now in a happy path the queues/exchanges will be deleted from the
broker before client start re-creating them again, but it also
possible that the client first start by creating queues/exchange
as part of the queue.declare() call, which are no-op operations
b/c they alreay existed, but before it could bind Queue to
Exchange, RabbitMQ nodes just received the 'signal' that the
queue doesn't have any consumer so it should be delete, and the
same with exchanges, which will lead to binding fail with
NotFound error.

Illustration of the time line from Client and RabbitMQ cluster
respectively when the race condition happen:

       e-declare(E)      q-declare(Q)       q-bind(Q, E)
     -----+------------------+----------------+----------->
                               e-delete(E)
     ------------------------------+---------------------->

Change-Id: Ideb73af6f246a8282780cdb204d675d5d4555bf0
Closes-Bug: #1318721
2014-11-27 13:49:52 +01:00
Jenkins
590896caeb Merge "Add qpid and amqp 1.0 tox targets" 2014-11-27 12:34:44 +00:00
Jenkins
6e4ccfa60c Merge "Create a new connection when a process fork has been detected" 2014-11-27 12:34:36 +00:00
Jenkins
0b839c57b7 Merge "Notification listener pools" 2014-11-27 11:56:42 +00:00
Kenneth Giusti
80e62aed7d Create a new connection when a process fork has been detected
This patch attempts to deal with applications that have forked the
process after connecting to the broker.  First, the creation of the
connection is delayed until the application attempts to perform a
messaging operation.  Second, each time the application performs a
messaging operation the current process id is checked against the id
of the process that created the connection.  If the process ids do not
match, the application has called os.fork().  The new child process
discards the existing connection and creates a new one.

Change-Id: I5455cb0f8d380d6b65f1268b34a91355cbb14aa2
Closes-Bug: #1392868
2014-11-26 21:24:54 -05:00
Brant Knudson
1624793088 Add more TLS protocols to rabbit impl
Python 2.7.9 added PROTOCOL_TLSv1_1 and PROTOCOL_TLSv1_2, so these
are added to the allowed kombu_ssl_version values.

See https://docs.python.org/2/library/ssl.html#ssl.PROTOCOL_TLSv1_1

Change-Id: I1dd590d916ab524284a941db91b9cb81fd4639bb
2014-11-25 10:59:05 -06:00
Thomas Goirand
42f55a1dda Remove the use of PROTOCOL_SSLv3
The PROTOCOL_SSLv3 should not be used, as it can be exploited with
a protocol downgrade attack. Also, its support has been removed in
Debian, so it simply doesn't work at all now in Sid.

This patch removes PROTOCOL_SSLv3 from one of the possible protocols
used by oslo.messaging.

Closes-Bug: #1395095
Change-Id: I2c1977c3bfc1923bcb03744e909f2e70c7fdb14c
2014-11-25 10:47:16 -06:00
Jenkins
0650bde775 Merge "Documentation anomaly in TransportURL parse classmethod" 2014-11-21 13:36:26 +00:00
Jenkins
e67e9a6aa9 Merge "rabbit: uses kombu instead of builtin stuffs" 2014-11-20 23:19:33 +00:00
Mehdi Abaakouk
a8d3da228c Add qpid and amqp 1.0 tox targets
This change adds two targets for qpid and amqp to
be able to run the functional tests suite on them in gate

This also run only functional tests for the functional tox testenv

Change-Id: Ibf1db3fe55f82dd6dc02f2e57d73608fcad80d0e
2014-11-20 15:11:24 +00:00
OpenStack Proposal Bot
a5ffc62dc8 Updated from global requirements
Change-Id: Ic229d9afdaf01abeff54d1087c21c70b25dcb0dd
2014-11-20 14:11:29 +00:00
Jenkins
b4a1e02691 Merge "Imported Translations from Transifex" 2014-11-20 12:10:14 +00:00
Jenkins
bc237be16e Merge "Remove unuseful param of the ConnectionContext" 2014-11-20 11:53:10 +00:00
OpenStack Proposal Bot
ee6a729644 Imported Translations from Transifex
For more information about this automatic import see:
https://wiki.openstack.org/wiki/Translations/Infrastructure

Change-Id: If7c3172f74f4fede4d2b900d73a396c0834b0fc9
2014-11-20 06:11:41 +00:00
Jenkins
437915b3db Merge "Add basic tests for 0mq matchmakers" 2014-11-19 18:34:58 +00:00
Jenkins
1a53d3ed30 Merge "Enable user authentication in the AMQP 1.0 driver" 2014-11-19 16:34:00 +00:00
Mehdi Abaakouk
973301aa70 rabbit: uses kombu instead of builtin stuffs
The rabbit driver have a custom code to reconnect to a broker,
to change the broker in HA configuration, to retry a to send
a message, to handle the interval between reconnection.

But all of that exists in kombu, so just use it.

Using the kombu Connection object with the url make also the rabbit
driver more generic.

Futher patches can rename rabbit* oslo.config options to a more generic
name and add a new driver entry_point 'kombu' to allow to use this driver
with any borker supported by kombu.

Change-Id: Id6b89d5448126ca652b46fe6ce5a9b3ed5839795
2014-11-19 17:21:02 +01:00
Jenkins
c81880365a Merge "Create ZeroMQ Context per socket" 2014-11-19 14:17:08 +00:00