Skip to content

It's possible to load a torn blueprint / sitrep / inventory #9594

@smklein

Description

@smklein

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 foobar is deleted
  • ... then the "loading" will happen concurrently with foobar being 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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions