Release stops on a standing Mirror that pulled a Move's cut snapshot, on a Server that enforces device approval#4144

opened5h agobyNNick
GitHub writeback is off. Issues and comments you change here stay in GitCafe. Sync settings

Found in review of E6 (#4143).

A Release after a Move's cut forgets every slot besides the source whose newest snapshot is the cut's snapshot (forgets in volume-run.server.ts, the forget loop in releaseVolume). Under device enforcement, since E6, a Forget of a slot that holds data needs an approval for that slot. The Move's approval allows MirrorToForget only on the Move's target.

If a standing Mirror on a third Server pulled the cut's snapshot from the read-only root during the cut, its Server refuses that Forget, and the Release stops with the Service still stopped on the source.

Workaround. ployz volume mirror rm <volume>-<server> from an approved device, then ployz volume release <volume> again.

Fix direction. Leave a standing Mirror out of the Release's forgets (it is not the Move's copy), or have it re-pull instead of being forgotten.

Scores. Frequency 2 (a Mirror sync must land inside a cut, on an enforcing Cluster). Severity 5 (a broken flow with a workaround).