If the driver is used with dockers connected to a shared database (currently, this is determined with a --kvstore flag to docker (and the driver being marked as Global(?)), all plugin processes will see each create and delete call.
In the case of CreateEndpoint, nodes other than the one that received the command get a populated interfaces list.
In the case of CreateNetwork, there is nothing to distinguish the calls.
Join and Leave requests only happen on the node where the command happened
DeleteEndpoint is called identically on all nodes
DeleteNetwork is called identically on all nodes
If our operations are either local or idempotent, all we need (ha!) is that everything is propagated in the correct order. That means:
endpoint creation can be ignored if the interfaces already exist;
endpoint deletion can just release the IP (if it's a local one? if it fails on other hosts that's fine)
network creation has to be a "first one wins, others get the information" operation
network deletion has to be "first one succeeds, everyone else succeeds or fails trivially" operation
If the driver is used with dockers connected to a shared database (currently, this is determined with a
--kvstore
flag to docker (and the driver being marked as Global(?)), all plugin processes will see each create and delete call.If our operations are either local or idempotent, all we need (ha!) is that everything is propagated in the correct order. That means: