diff options
author | Erik Hugne <erik.hugne@ericsson.com> | 2014-08-28 09:08:47 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-09-01 17:51:48 -0700 |
commit | a5325ae5b8bff051933a754db7727fc9823e6414 (patch) | |
tree | cd9c0a8f9609387c286d5c4462b890c1c082394e /net/tipc/core.h | |
parent | f4ad8a4b8b9f490a15c3239e0d6ac99e7e438d34 (diff) | |
download | op-kernel-dev-a5325ae5b8bff051933a754db7727fc9823e6414.zip op-kernel-dev-a5325ae5b8bff051933a754db7727fc9823e6414.tar.gz |
tipc: add name distributor resiliency queue
TIPC name table updates are distributed asynchronously in a cluster,
entailing a risk of certain race conditions. E.g., if two nodes
simultaneously issue conflicting (overlapping) publications, this may
not be detected until both publications have reached a third node, in
which case one of the publications will be silently dropped on that
node. Hence, we end up with an inconsistent name table.
In most cases this conflict is just a temporary race, e.g., one
node is issuing a publication under the assumption that a previous,
conflicting, publication has already been withdrawn by the other node.
However, because of the (rtt related) distributed update delay, this
may not yet hold true on all nodes. The symptom of this failure is a
syslog message: "tipc: Cannot publish {%u,%u,%u}, overlap error".
In this commit we add a resiliency queue at the receiving end of
the name table distributor. When insertion of an arriving publication
fails, we retain it in this queue for a short amount of time, assuming
that another update will arrive very soon and clear the conflict. If so
happens, we insert the publication, otherwise we drop it.
The (configurable) retention value defaults to 2000 ms. Knowing from
experience that the situation described above is extremely rare, there
is no risk that the queue will accumulate any large number of items.
Signed-off-by: Erik Hugne <erik.hugne@ericsson.com>
Signed-off-by: Jon Maloy <jon.maloy@ericsson.com>
Acked-by: Ying Xue <ying.xue@windriver.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/tipc/core.h')
-rw-r--r-- | net/tipc/core.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/tipc/core.h b/net/tipc/core.h index d2607a8..f773b14 100644 --- a/net/tipc/core.h +++ b/net/tipc/core.h @@ -81,6 +81,7 @@ extern u32 tipc_own_addr __read_mostly; extern int tipc_max_ports __read_mostly; extern int tipc_net_id __read_mostly; extern int sysctl_tipc_rmem[3] __read_mostly; +extern int sysctl_tipc_named_timeout __read_mostly; /* * Other global variables |