mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 16:36:20 +00:00
Make backupdb use dbutil.
Signed-off-by: Daira Hopwood <daira@jacaranda.org>
This commit is contained in:
parent
769de61a90
commit
6e9a602df6
@ -6,6 +6,8 @@ from allmydata.util.hashutil import backupdb_dirhash
|
|||||||
from allmydata.util import base32
|
from allmydata.util import base32
|
||||||
from allmydata.util.fileutil import abspath_expanduser_unicode
|
from allmydata.util.fileutil import abspath_expanduser_unicode
|
||||||
from allmydata.util.encodingutil import to_str
|
from allmydata.util.encodingutil import to_str
|
||||||
|
from allmydata.util.dbutil import get_db, DBError
|
||||||
|
|
||||||
|
|
||||||
DAY = 24*60*60
|
DAY = 24*60*60
|
||||||
MONTH = 30*DAY
|
MONTH = 30*DAY
|
||||||
@ -58,47 +60,22 @@ UPDATE_v1_to_v2 = TABLE_DIRECTORY + """
|
|||||||
UPDATE version SET version=2;
|
UPDATE version SET version=2;
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
UPDATERS = {
|
||||||
|
2: UPDATE_v1_to_v2,
|
||||||
|
}
|
||||||
|
|
||||||
def get_backupdb(dbfile, stderr=sys.stderr,
|
def get_backupdb(dbfile, stderr=sys.stderr,
|
||||||
create_version=(SCHEMA_v2, 2), just_create=False):
|
create_version=(SCHEMA_v2, 2), just_create=False):
|
||||||
# open or create the given backupdb file. The parent directory must
|
# open or create the given backupdb file. The parent directory must
|
||||||
# exist.
|
# exist.
|
||||||
import sqlite3
|
|
||||||
|
|
||||||
must_create = not os.path.exists(dbfile)
|
|
||||||
try:
|
try:
|
||||||
db = sqlite3.connect(dbfile)
|
(sqlite3, db) = get_db(dbfile, stderr, create_version, updaters=UPDATERS,
|
||||||
except (EnvironmentError, sqlite3.OperationalError), e:
|
just_create=just_create, dbname="backupdb")
|
||||||
print >>stderr, "Unable to create/open backupdb file %s: %s" % (dbfile, e)
|
|
||||||
return None
|
|
||||||
|
|
||||||
c = db.cursor()
|
|
||||||
if must_create:
|
|
||||||
schema, version = create_version
|
|
||||||
c.executescript(schema)
|
|
||||||
c.execute("INSERT INTO version (version) VALUES (?)", (version,))
|
|
||||||
db.commit()
|
|
||||||
|
|
||||||
try:
|
|
||||||
c.execute("SELECT version FROM version")
|
|
||||||
version = c.fetchone()[0]
|
|
||||||
except sqlite3.DatabaseError, e:
|
|
||||||
# this indicates that the file is not a compatible database format.
|
|
||||||
# Perhaps it was created with an old version, or it might be junk.
|
|
||||||
print >>stderr, "backupdb file is unusable: %s" % e
|
|
||||||
return None
|
|
||||||
|
|
||||||
if just_create: # for tests
|
|
||||||
return True
|
|
||||||
|
|
||||||
if version == 1:
|
|
||||||
c.executescript(UPDATE_v1_to_v2)
|
|
||||||
db.commit()
|
|
||||||
version = 2
|
|
||||||
if version == 2:
|
|
||||||
return BackupDB_v2(sqlite3, db)
|
return BackupDB_v2(sqlite3, db)
|
||||||
print >>stderr, "Unable to handle backupdb version %s" % version
|
except DBError, e:
|
||||||
return None
|
print >>stderr, e
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class FileResult:
|
class FileResult:
|
||||||
def __init__(self, bdb, filecap, should_check,
|
def __init__(self, bdb, filecap, should_check,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user