DedSec Project

Ανθεκτικά σημεία επανεκκίνησης και αντικατάσταση αρχείων — DedSec Project

Ανθεκτικά σημεία επανεκκίνησης και αντικατάσταση αρχείων Μηχανισμός και συμβόλαιο Ένα σημείο επανεκκίνησης επιτρέπει συνέχιση από επιβεβαιωμένη εργασία. Δεδομένα και θέση πρέπει να…

Μηχανισμός και συμβόλαιο

Ένα σημείο επανεκκίνησης επιτρέπει συνέχιση από επιβεβαιωμένη εργασία. Δεδομένα και θέση πρέπει να περιγράφουν το ίδιο ολοκληρωμένο όριο: αν αποθηκεύσεις θέση 500 πριν διατηρηθεί το αποτέλεσμα 500, μπορεί να χαθεί εργασία. Αν γράψεις πρώτα το αποτέλεσμα, μπορεί να επαναληφθεί· σχεδίασέ το ώστε να ανέχεται διπλή εκτέλεση. Πρόκειται για συμβόλαιο ανάκαμψης.

Για ένα τοπικό αρχείο JSON, γράψε προσωρινό αρχείο στον κατάλογο προορισμού, άδειασε τον buffer, συγχρόνισε το αρχείο και αντικατάστησε το τελικό όνομα. Έτσι αποφεύγεται μετακίνηση ανάμεσα σε συστήματα αρχείων. Η ατομική αντικατάσταση ονόματος αποτρέπει μισό JSON στους αναγνώστες, αλλά δεν συντονίζει πολλούς συγγραφείς. Στο POSIX ο συγχρονισμός καταλόγου είναι επιπλέον βήμα ανθεκτικότητας. Δικτυακές προσαρτήσεις και υλικό αποθήκευσης μπορεί να δίνουν διαφορετικές εγγυήσεις.

Τοπικό παράδειγμα

import json, os, tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as folder:
    root = Path(folder)
    target = root / "checkpoint.json"
    with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8", dir=root,
                                     delete=False) as staged:
        json.dump({"completed": 500, "schema": 1}, staged)
        staged.flush()
        os.fsync(staged.fileno())
    os.replace(staged.name, target)
    assert json.loads(target.read_text())["completed"] == 500
print("checkpoint readable")

Έλεγχοι αποτυχίας και όρια

Το απόσπασμα δείχνει τη σειρά εγγραφής και αντικατάστασης, όχι διακοπή ρεύματος ή πλήρη ανθεκτικότητα καταλόγου POSIX. Σε απομονωμένο περιβάλλον διέκοψε πριν την εγγραφή, μετά το flush και μετά την αντικατάσταση. Η επανεκκίνηση πρέπει να αποδέχεται παλιό ή νέο πλήρες σημείο, χωρίς να συμπεραίνει πρόοδο από προσωρινό όνομα.

Πρωτογενής αναφορά

Επίσημη τεκμηρίωση