]> git.proxmox.com Git - mirror_frr.git/commit - isisd/isis_adjacency.c
isisd: Fast RIB recovery from BFD recognized link failures
authorGalaxyGorilla <sascha@netdef.org>
Tue, 19 May 2020 11:52:04 +0000 (11:52 +0000)
committerGalaxyGorilla <sascha@netdef.org>
Fri, 3 Jul 2020 08:46:17 +0000 (08:46 +0000)
commit690497fb1071f9959ed39362027f2c5e79124061
treefc19a546a2ca9ae7d562a921122f848305beb65e
parenta01cb26cae232545629df0f2ef90dc4bdaf2f0b1
isisd: Fast RIB recovery from BFD recognized link failures

Unfortunately as the topotests show a fast recovery after failure
detection due to BFD is currently not possible because of the following
issue:

There are multiple scheduling mechanisms within isisd to prevent
overload situations. Regarding our problem these two are important:

* scheduler for regenerating ISIS Link State PDUs scheduler for managing
* consecutive SPF calculations

In fact both schedulers are coupled, the first one triggers the second
one, which again is triggered by isis_adj_state_change (which again is
triggered by a BFD 'down' message). The re-calculation of SPF paths
finally triggers updates in zebra for the RIB.

Both schedulers work as a throttle, e.g. they allow the regeneration of
Link State PDUs or a re-calculation for SPF paths only once within a
certain time interval which is configurable (and by default different!).

This means that a request can go through the first scheduler but might
still be 'stuck' at the second one for a while. Or a request can be
'stuck' at the first scheduler even though the second one is ready. This
also explains the 'random' behaviour one can observe testing since a
'fast' recovery is only possible if both schedulers are ready to process
this request.

Note that the solution in this commit is 'thread safe' in the sense that
both schedulers use the same thread master such that the introduced
flags are only used exactly one time (and one after another) for a
'fast' execution.

Further there are some irritating comments and logs which I partially
removed. They seems to be not valid anymore due to changes in thread
management (or they were never valid in the first place).

Signed-off-by: GalaxyGorilla <sascha@netdef.org>
isisd/isis_adjacency.c
isisd/isis_bfd.c
isisd/isis_lsp.c
isisd/isis_spf.c
isisd/isisd.c
isisd/isisd.h