cdc3a486d6
The original idea was weighted B-trees composed out of weighted rbyds, with the two weight systems being independent. Descent down the B-tree uses the same technique in the current metadata data-structure of searching for which branch to take during fetch, basically getting the search for free (well, on top of the already required O(m) fetch operation). But this is fundamentally flawed. While file names provide an absolute reference for finding matches, weights are relative references. So we don't have enough information to do weight-based lookup during fetch. This smells just like the relative-vs-absolute key issues that led to rbyd vs rbd trees in the first place... One option is to do rbyd traversals at each B-tree node to build the necessary information to figure out the weights. But with rbyd traversals taking O(m log m), this makes B-tree lookups O(log n * m log m), and B-tree traversals a messy O(n log n * m log m), which is acceptable, but disapointing for what will likely be the most common operation in the filesystem. But the rbyd trees _are_ already weighted. A better solution might be to go back and rethink the seperation of B-tree weights and rbyd ids. Unfortunately, with only 16-bits available for rbyd ids, this would likely require a rewrite of how rbyd tags are encoded...