try all possible vservers when bootstrap joining
adjust
isJoined to kchoices semantics
refactor vs joining to always use
fediChordJoinNewVs
update node ID validity check to allow different vserver IDs
extend measurement logging to include sensible load metrics
k-choices: manage v-servers
data structure refactoring
- vservers are a map from node ID to LocalNodeStateSTM
- move node cache to RealNode level to share it between vservers
- first initialise the RealNode, then do a k-choices sampling before allocating VSes
- intermediate step: still join exactly 1 vserver without sampling
- dispatch incoming requests to correct VSes
- decide which periodic background tasks need their own threads and which don't