The root cause is in the difference of how rpc listeners are started.
core plugin (ml2) doesn't start rpc listeners in __init__ method, unlike l3_router plugin.
So for l3 queues we have rpc_workers+1 listener (+1 goes from parent process).
For cases when rpc_workers > 0, q-plugin is only consumed from rpc_workers, but not from the parent process.
This doesn't indicate any malfunction and we don't need to fix it.
The root cause is in the difference of how rpc listeners are started.
core plugin (ml2) doesn't start rpc listeners in __init__ method, unlike l3_router plugin.
So for l3 queues we have rpc_workers+1 listener (+1 goes from parent process).
For cases when rpc_workers > 0, q-plugin is only consumed from rpc_workers, but not from the parent process.
This doesn't indicate any malfunction and we don't need to fix it.