Slightly simplify the logic around changing the queue size counter by
only modifying it when we're _actually_ scrying, instead of
synchronously processing the forward.
While stateless forwarding doesn't need to touch disk, there's still
overhead in needing to communicate with the serf over IPC. By caching
lanes, we get to skip the IPC pipeline, and can respond to forwarding
requests synchronously.
We include timestamps alongside the entries in the cache, and consider
entries older than two minutes as stale.
The cache is capped at around ~100mb of memory use. Further commentary
is provided inline.
Previously, ~nus would drop 3 forward requests, for every one it
fulfilled. Now, it seems able to keep up with demand, only dropping
forwards shortly after boot, while the cache isn't primed yet.
Instead of giving up on scrying at the first sight of a u3_none result,
keep trying for a little bit. If five scries fail in direct succession,
consider scrying not worth the effort, and stop trying as before.
Previously, if ames told us there was no lane for a target, we would
drop the packet, but fail to register this in the queue, or even reclaim
the memory it was using.
Now, we do all the required book-keeping when dropping packets in the
"no lane for this" case.
Barebones 2-way diff thread. Further development should include:
- recognize at least %txt and %hoon diff types as (urge:clay cord) and
print them prettily
- check if they're directories and recurse through them, noting files
that exist in one or the other and diffing ones that exist in both
- support 3-way diffs. Since we know the desks they're on, we can find
a mergebase (see how +trouble gets the base-hash in #3378) and do a
3-way diff.
- extend the above to support all the useful diffs, including
diff3(a,b), diff2(mergebase(a,b),a) and any other useful ones.
This was hidden in urbit-os-v1.0.44 until we could ensure it actually
logged you out of all sessions. It requires a hidden input to function,
so it's added here.
Fixes#2649.