-
Notifications
You must be signed in to change notification settings - Fork 66
Open
Description
Original context: #9552 (comment) - specifically, the issue @hawkw mentioned in #9552 (comment)
The implementation of the "blueprint loader" and the "sitrep loader" both use the following approach:
- Identify the target (by UUID)
- Load that target {blueprint, sitrep} by querying individual tables
- Return the in-memory structure, constructed from the underlying tables
This setup does not play nice with concurrent deletion:
- If we start loading target
foobar - ... and the target is changed to something else, and
foobaris deleted - ... then the "loading" will happen concurrently with
foobarbeing deleted
This means: It'll be possible to read a {blueprint, sitrep} with any number of rows missing.
In practice, we are not deleting these objects frequently enough to hit this, but if we had a "laggy Nexus", or a rapid turnaround for deletion, this seems possible.