Initial fib algo implementation was build on a very simple set of principles w.r.t updates:
- algorithm is ether able to apply the change synchronously (DXR) or requires full rebuild (bsearch, lradix).
- fall back to rebuild on every error (memory allocation, nhg limit, other internal algo errors, etc).
This changes brings the new "intermediate" concept - batched updates.
Algotirhm can indicate that the particular update has to be handled in batched fashion (FLM_BATCH).
The framework will write this update and other updates to the temporary buffer instead of pushing them to the algo callback.
Depending on the update rate, the framework will batch 50..1024 ms of updates and submit them to a different algo callback.
This functionality is handy for the slow-to-rebuild algorithms like DXR.
While here, update the batch/rebuild policy. Instead of an 50ms / 1k route (whichever comes faster) rebuilds, do the following:
- bucket the number of updates in 50ms buckets
- if number of updates exceeds the threshold rate (1k routes/sec), delay the update
- repeat until the maximum update delay is reached (1sec)