saveSync method

Manifest saveSync(
  1. List<SegmentInfo> segments
)

Writes segments as the next generation into the alternating slot.

A previous save that failed before its bytes landed can leave one empty slot; that must not make every later save fail, so a single unusable slot is tolerated here. Two unusable slots still raise through loadSync.

Implementation

Manifest saveSync(List<SegmentInfo> segments) {
  final current = loadSync(allowTornSingleSlot: true);
  final generation = (current?.generation ?? 0) + 1;
  final manifest = Manifest(generation: generation, segments: segments);
  final file = directory.openSync(slotNames[generation % 2]);
  try {
    file.writeAllSync(manifest.encode());
    file.flushSync();
  } finally {
    file.closeSync();
  }
  return manifest;
}