I exchanged a mail for investigating details.

Before getting started, please remind the following fact.
- The latest snapshot is always valid, even if corruption has not occurred.

> Why is a separated script needed? / A single script cannot automatically
detect a corrupted database and load the latest snapshot?

So, the author said a separate script is never needed,
if the user reads from the latest snapshot file, it will always be
recovered.
so the user code will be like this.

import dbm.gnu as dbm

# skip check code that all files are exists, origin, even_snapshot, odd_snapshot


if origin is None:

    db = dbm.open(origin, 'nx') # For extension format

    db.gdbm_failure_atomic(even_snapshot, odd_snapshot) # For snapshot
declaration

else:

    latest_snapshot = dbm.gdbm_latest_snapshot(even_snapshot odd_snapshot)

          db = dbm.open(latest_snapshot, 'r') # Open the latest valid snapshot

for k, v in zip('abcdef', 'ghijkl'):
    db[k] = v

db.sync()
db.close()


> How is different from simply copying the whole database file?


Under the hood, the gdbm crash-tolerance mechanism *does* (logically) copy
the whole database file, but it does so efficiently, using "reflink"
copies, so the amount of physical storage resources used is minimal.

You may good to read this paper:
https://dl.acm.org/doi/pdf/10.1145/3487019.3487353


Warm Regards,

Dong-hee


2022년 1월 18일 (화) 오후 10:54, Victor Stinner <vstin...@python.org>님이 작성:

> How does someone know if a database is corrupted? Why is a separated
> script needed?
>
> A single script cannot automatically detect a corrupted database and
> load the latest snapshot?
>
> How is different from simply copying the whole database file?
>
> Victor
> --
> Night gathers, and now my watch begins. It shall not end until my death.
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/JB5JKWEYQI5A44W4J5JTECZ73YAIF3Y3/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to