[Port rc.2.0] fix(id-compressor): Prevent resubmission of ID allocation ops
DO NOT MERGE UNTIL CONFIRMED
https://github.com/microsoft/FluidFramework/pull/21043
Reviewer Guidance
There were a ton of commits since the commit we're interested in. I tried to take the minimum subset of changes and hot fix certain merge conflicts around Outbox and BatchManager
Could not find a usable baseline build with search starting at CI 1a00982adc59c52aca208c0deeb738601c2cc9cc
Generated by :no_entry_sign: dangerJS against 9ba9b8ef7a38c651d6a3423eab93f899e96925aa
@taylorsw04, do we need to port it to RC2? What is the scenario where it's needed?
I have a feeling that the only use (before 2.0) is for Loop & others to leverage it for short DDS/Datastore IDs, and that requires https://github.com/microsoft/FluidFramework/pull/20531, https://github.com/microsoft/FluidFramework/pull/19859. The former was merged on April 8th, which looks like after RC2 was snapped. Maybe we do not care (as enabling it in new files is good starting point). Just trying to understand what we are trying to achieve...
@vladsud this fix prevents a document corruption bug; any clients without this fix that use the compressor (for anything, so ST or datastore IDs) and hit the resubmit path with allocation ops in pending state will make the document permanently fail on load.