3975: Accessing an incompatible database corrupts the database

svn: r16212
This commit is contained in:
Doug Blank
2010-11-19 01:08:07 +00:00
parent 065b167c75
commit b439b377eb
3 changed files with 37 additions and 6 deletions

View File

@ -52,7 +52,7 @@ from sys import maxint
from gen.lib import (GenderStats, Person, Family, Event, Place, Source,
MediaObject, Repository, Note, Tag)
from gen.db import (DbBsddbRead, DbWriteBase, BSDDBTxn,
DbTxn, BsddbBaseCursor, DbVersionError,
DbTxn, BsddbBaseCursor, DbVersionError, DbEnvironmentError,
DbUpgradeRequiredError, find_surname, find_surname_name,
DbUndoBSDDB as DbUndo)
from gen.db.dbconst import *
@ -402,13 +402,17 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
db.DB_INIT_MPOOL | db.DB_INIT_LOCK |\
db.DB_INIT_LOG | db.DB_INIT_TXN | db.DB_THREAD
# As opposed to before, we always try recovery on databases
env_flags |= db.DB_RECOVER
# Environment name is now based on the filename
env_name = name
self.env.open(env_name, env_flags)
try:
self.env.open(env_name, env_flags)
except Exception, msg:
try:
self.__close_early()
except:
pass
raise DbEnvironmentError(msg)
self.env.txn_checkpoint()
if callback:
@ -1724,7 +1728,7 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
if version < 15:
upgrade.gramps_upgrade_15(self)
print "Upgrade time:", int(time.time()-t), "seconds"
_LOG.debug("Upgrade time: %d seconds" % int(time.time()-t))
def set_auto_remove(self):
"""