I think a better way to think about this limit than we have so far (by calling it max_capacity) is to see it as a trigger to expand the section, and ultimately split.
It means it’s a variable that Elders monitor to decide when it’s time to split (via allowing more nodes to join, to hit the 2 * MinSectionSize needed to split).
Having it hardcoded is just a way to decide upfront (together with MinSectionSize) how large the network tree will be relative to data hosted, or in other words approx. GB / section, nodes / TB, or any of the other view angles on the same thing.
So really, it’s not a limit on the node hardware.
Under the hood the node can pack trillions of zettabytes if it likes. We don’t interfere with that.
But with this growth trigger level, we tell nodes that they need to have at least this amount of space available to play, otherwise they are likely to be kicked out (when we find out that it is full, or can’t deliver what it is supposed to hold).
The max_capacity variable that we use in node config, should really be min_capacity.
Then we can have the Elders abstract a GrowthTriggerLevel to be, say 90% of that, for some additional variance margins.
I know that the trigger level could theoretically be dynamic (as well as section min size), but it’s far simpler to start like this (as you of course already know).
Yes, it’s a good question.
The specifics of when to allow an additional node to join (i.e. beyond replacing a lost node) on the sections’ path to reaching the GrowthTriggerLevel (where we will make sure to grow until split), is yet to be defined I think.
There is currently (I think) one source: relocations (the source section replaces it with a new node, so that gives net growth of the network).
Do we need an additional source? Or can we stick to a single one for simplicity, and just work with the relocation rate to govern the network growth? Or would that be a coupling of needs detrimental to both aims (sybil protection and network growth)?
There are still some things to figure out.
But a join queue, where nodes pre-load what they need to hold to join in a specific sub-range of the section xorspace, could act as a useful PoW and trigger/barrier to allow nodes to join (and have them hit the road running as well). Probably a bit too easy as a sole barrier, so perhaps combined with some randomness and probability proportional to used space…