backup: If a database exists write an intial snapshot

This commit is contained in:
Christian Decker
2020-04-04 17:05:20 +02:00
parent a44284d04d
commit 1e6b55b3cb
2 changed files with 46 additions and 1 deletions

View File

@@ -1,8 +1,10 @@
#!/usr/bin/env python3
from backup import FileBackend, get_backend
from backup import FileBackend, get_backend, Change
import os
import click
import json
import sqlite3
import sys
@click.command()
@@ -17,6 +19,7 @@ def init(lightning_dir, backend_url):
backend.write_metadata()
lock_file = os.path.join(lightning_dir, "backup.lock")
db_file = os.path.join(lightning_dir, "lightningd.sqlite3")
with open(lock_file, "w") as f:
f.write(json.dumps({
@@ -25,6 +28,28 @@ def init(lightning_dir, backend_url):
# TODO Take a snapshot
data_version = 0
if os.path.exists(db_file):
print("Found an existing database at {db_file}, initializing the backup with a snapshot".format(db_file=db_file))
# Peek into the DB to see if we have
db = sqlite3.connect(db_file)
cur = db.cursor()
rows = cur.execute("SELECT intval FROM vars WHERE name = 'data_version'")
data_version = rows.fetchone()[0]
snapshot = Change(
version=data_version,
snapshot=open(db_file, 'rb').read(),
transaction=None
)
if not backend.add_change(snapshot):
print("Could not write snapshot to backend")
sys.exit(1)
else:
print("Successfully written initial snapshot to {destination}".format(destination=destination))
else:
print("Database does not exist yet, created an empty backup file")
print("Initialized backup backend {destination}, you can now start c-lightning".format(
destination=destination,
))