You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/* Global safety monitors for the anchor-before-first-fragment design.
2
+
3
+
NoReapLive is the headline: a reap may happen only after the queue is deleted.
4
+
It catches both load-bearing failures - a stale anchor read and an
5
+
anchor-written-after-the-fragment ordering violation each cause the sweep to
6
+
reap a live stream, which trips here. EventuallyEmpty is the by-construction
7
+
reclaim: once the stream is deleted and sweeps quiesce, no object remains, even
8
+
across a crash mid-sweep. */
9
+
10
+
/* A reap is legitimate only for a deleted stream. */
11
+
specNoReapLiveobserveseQueueDeleted, eObjReaped {
12
+
varqueueDeleted: bool;
13
+
14
+
startstateWatching {
15
+
oneQueueDeleteddo {
16
+
queueDeleted=true;
17
+
}
18
+
oneObjReapeddo (k: ObjKey) {
19
+
assertqueueDeleted,
20
+
format("INV NOREAPLIVE violated: GC reaped object (offset={0}, uid={1}) while the stream's queue is still live (the anchor read was stale, or the anchor was written after the fragment)",
21
+
k.offset, k.uid);
22
+
}
23
+
}
24
+
}
25
+
26
+
/* Once the stream is deleted and sweeps quiesce, nothing is left under the prefix. */
0 commit comments