Fix error when opening bsddb db in read-only mode (#624)

Fixes #10615

BSDDB had errors when trying to open in read-only mode.
This commit is contained in:
Paul Culley 2018-06-09 23:11:33 -05:00 committed by Sam Manzi
parent 31eecac590
commit 21408ab9d2

View File

@ -619,11 +619,11 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
# The DB_PRIVATE flag must go if we ever move to multi-user setup # The DB_PRIVATE flag must go if we ever move to multi-user setup
env_flags = db.DB_CREATE | db.DB_PRIVATE |\ env_flags = db.DB_CREATE | db.DB_PRIVATE |\
db.DB_INIT_MPOOL |\ db.DB_INIT_MPOOL
db.DB_INIT_LOG | db.DB_INIT_TXN if not self.readonly:
env_flags |= db.DB_INIT_LOG | db.DB_INIT_TXN
# As opposed to before, we always try recovery on databases # As opposed to before, we always try recovery on databases
env_flags |= db.DB_RECOVER env_flags |= db.DB_RECOVER
# Environment name is now based on the filename # Environment name is now based on the filename
env_name = name env_name = name
@ -638,7 +638,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
pass pass
raise DbEnvironmentError(msg) raise DbEnvironmentError(msg)
self.env.txn_checkpoint() if not self.readonly:
self.env.txn_checkpoint()
if callback: if callback:
callback(25) callback(25)
@ -1330,7 +1331,8 @@ class DbBsddb(DbBsddbRead, DbWriteBase, UpdateCallback):
return return
if self.txn: if self.txn:
self.transaction_abort(self.transaction) self.transaction_abort(self.transaction)
self.env.txn_checkpoint() if not self.readonly:
self.env.txn_checkpoint()
self.__close_metadata() self.__close_metadata()
self.name_group.close() self.name_group.close()