Skip to content

Storage recovery: isolate corrupt metadata and clean incomplete save revisions #30

Description

@joeblack2k

Probleem

De file store gebruikt atomische writes per bestand, maar payload en metadata vormen samen nog geen herstelbare transactie.

Corrupt metadata blokkeert de volledige store

saveStore.load() stopt en retourneert een fout zodra één metadata.json niet gelezen of gedecodeerd kan worden. Daardoor kan één beschadigde revision voorkomen dat alle overige geldige saves bij startup geladen worden.

Incomplete revision kan achterblijven

saveStore.create() maakt eerst de revision-directory en schrijft daarna de payload. Pas vervolgens wordt metadata.json gemarshalld en geschreven. Wanneer metadata-encoding of -write faalt, blijft de al geschreven payloaddirectory bestaan. De normale loader ziet die directory niet, omdat hij uitsluitend metadata.json scant.

Gewenst herstelmodel

  • schrijf een nieuwe revision eerst in een stagingdirectory onder dezelfde filesystem/parent;
  • schrijf payload en metadata volledig, sync bestanden en commit daarna met één directory-rename of een expliciete commitmarker;
  • ruim stagingdirectories op bij iedere fout vóór commit;
  • detecteer incomplete oude directories tijdens startup/rescan en verplaats ze naar quarantaine of verwijder ze wanneer veilig;
  • behandel een beschadigde metadata.json per revision: registreer/quarantaineer die revision en laad de rest van de store door;
  • rapporteer degradatie duidelijk via health/status en logs;
  • behoud het originele bestand voor handmatig herstel zolang de integriteit onbekend is.

Testdekking

  • geïnjecteerde payload-, metadata-encode-, metadata-write- en renamefouten laten geen zichtbare half-commit achter;
  • één corrupte revision verhindert niet dat andere revisions geladen worden;
  • corrupte/incomplete revisions worden deterministisch gelogd en gequarantaineerd;
  • rescan is idempotent;
  • een crash vóór en na de commitgrens levert na restart respectievelijk nul of precies één geldige revision op.

Prioriteit

P1 vóór brede Android- en WAN-uitrol. Mobiele clients en meerdere gelijktijdige apparaten vergroten de kans dat stroomverlies, processtop of onderbroken opslag zichtbaar wordt.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions