From e2031aff0f2c031048da2e732d7dce89a4c9d51d Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 27 Apr 2010 22:08:03 -0700 Subject: [PATCH] backupdb.did_create_directory: use REPLACE INTO, not INSERT INTO + ignore error This handles the case where we upload a new tahoe directory for a previously-processed local directory, possibly creating a new dircap (if the metadata had changed). Now we replace the old dirhash->dircap record. The previous behavior left the old record in place (with the old dircap and timestamps), so we'd never stop creating new directories and never converge on a null backup. --- src/allmydata/scripts/backupdb.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/allmydata/scripts/backupdb.py b/src/allmydata/scripts/backupdb.py index f5e3e073..f134e142 100644 --- a/src/allmydata/scripts/backupdb.py +++ b/src/allmydata/scripts/backupdb.py @@ -353,14 +353,11 @@ class BackupDB_v2: def did_create_directory(self, dircap, dirhash): now = time.time() - try: - self.cursor.execute("INSERT INTO directories VALUES (?,?,?,?)", - (dirhash, dircap, now, now)) - except (self.sqlite_module.IntegrityError, - self.sqlite_module.OperationalError): - # dirhash was already added: maybe they did mkdir and called us - # even though we told them the didn't have to - pass + # if the dirhash is already present (i.e. we've re-uploaded an + # existing directory, possibly replacing the dircap with a new one), + # update the record in place. Otherwise create a new record.) + self.cursor.execute("REPLACE INTO directories VALUES (?,?,?,?)", + (dirhash, dircap, now, now)) self.connection.commit() def did_check_directory_healthy(self, dircap, results): -- 2.45.2