mirror of
https://github.com/weaveworks/scope.git
synced 2026-03-02 17:50:39 +00:00
The rendering code checks whether endpoint IPs are part of cluster-local networks. Due to the prevalence of endpoints - medium sized reports can contain many thousands of endpoints - this is performance critical. Alas the existing code performs the check via a linear scan of a list of networks. That is slow when there are more than a few. Unfortunately in some common k8s network setups, e.g. on AWS, a cluster can contain hundreds of networks, due to /32 networks derived from interfaces with multiple IPs. Here we change representation of the set of networks to a prefix tree (aka trie), which is well-suited for IP network membership checks since networks are in fact a bitstring prefixes. The specific representation is a crit-bit tree, but that choice was purely based on implementation convenience - the chosen library is the only one I could find that directly supports IP networks.