We've built our multibackend support by abusing oslo.messaging's
Target.server and appending '@backend-name' prefix to the hostname.
This made implementation easier, as we're simply treating multibackends
as totally separated services.
While this worked in RabbitMQ, zmq is communicating explicitly using
hostnames, so appending anything to hostname in Target.server breaks
communication.
This commit modifies the messaging layer of cinder-volume to use
Target.topic to distinguish backends. This is done by:
* Making cinder-volume listen on new RPC server, with Target.server
set to raw hostname, and topic is set to 'cinder-volume.host@backend'.
'cinder-volume' prefix is added to keep compatibility with Newton's
services (we're relying on how RabbitMQ transport is implemented in
oslo.messaging).
* Note that old RPC server listening on 'cinder-volume' topic is left
there, as we need it to recieve fanout messages from scheduler.
* When sending a message to cinder-volume, we're sending it using
Target.topic to route it to correct host and backend. For backward
compatibility it's controlled by conditional based on RPC version pin.
Closes-Bug: 1630975
Related-Bug: 1440631
Implements: cinder-zeromq-support
Change-Id: I22efbeb97e11838139e2b33226d1c10094d27c1d