Add a transport options from client to drivers

Registered by Gabriele Santomaggio on 2019-06-13

Per conversation with Hervé Beraud, Ken Giusti and Ben Nemec.

New feature: Transport Options
With this feature, it is possible to pass parameters to the drivers so that we can use some specific driver options/features.

The idea is to create a generic "transport options", and then each driver will convert from generic to a specific option.

One example is the mandatory flag in RabbitMQ (currently not used, and there is no way to set it).

something like:
```
transport_options = oslo_messaging.get_transport_options(transport, at-least-once=True)
oslo_messaging.RPCClient(transport, target, transport_options)
```

The RabbitMQ driver implementation will convert:
at-least-once -----> mandatory=True

Since this feature requires several changes, we split it into three different steps:
1- Add a new parameter called "transport_options" from client to _drivers
2- Implement the drivers decode functions
3- Implement mandatory flag for RabbitMQ

For the other drivers, we will open a new issue.

-
Gabriele Santomaggio
Developer @SUSE

Blueprint information

Status:
Not started
Approver:
Ken Giusti
Priority:
Undefined
Drafter:
Gabriele Santomaggio
Direction:
Needs approval
Assignee:
Gabriele Santomaggio
Definition:
Approved
Series goal:
None
Implementation:
Unknown
Milestone target:
None

Whiteboard

Gerrit topic: https://review.opendev.org/#/q/topic:bp/transport-options

Addressed by: https://review.opendev.org/660373
    Add transport_options parameter

Addressed by: https://review.opendev.org/666241
    WIP Implement the transport options

Gerrit topic: https://review.opendev.org/#/q/topic:transport-options

Addressed by: https://review.opendev.org/666726
    Add the "transport_options" parameter to the amqp1 and kafka drivers.

Addressed by: https://review.opendev.org/667902
    WIP: Implement mandatory flag for RabbitMQ driver

Addressed by: https://review.opendev.org/672073
    WIP Add the mandatory flag for direct send

(?)

Work Items

This blueprint contains Public information 
Everyone can see this information.