From: Michael Schroeder Date: Wed, 15 Nov 2017 15:14:45 +0000 (+0100) Subject: repo_rpmdb: retry with DB_PRIVATE if dbenv open fails with DB_VERSION_MISMATCH X-Git-Tag: 0.6.31~30 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=510eb40a618388be640b4c1b3b7beaf8fa066686;p=thirdparty%2Flibsolv.git repo_rpmdb: retry with DB_PRIVATE if dbenv open fails with DB_VERSION_MISMATCH This is also what rpm does, see rpm commit 2822ccbcdf3e898b960fafb23c4d571e26cef0a4 --- diff --git a/ext/repo_rpmdb.c b/ext/repo_rpmdb.c index ceaf3519..3916f9f3 100644 --- a/ext/repo_rpmdb.c +++ b/ext/repo_rpmdb.c @@ -1247,7 +1247,15 @@ opendbenv(struct rpmdbstate *state) { #if defined(FEDORA) || defined(MAGEIA) int serialize_fd = serialize_dbenv_ops(state); - r = dbenv->open(dbenv, dbpath, DB_CREATE|DB_INIT_CDB|DB_INIT_MPOOL, 0644); + int eflags = DB_CREATE|DB_INIT_CDB|DB_INIT_MPOOL; + r = dbenv->open(dbenv, dbpath, eflags, 0644); + /* see rpm commit 2822ccbcdf3e898b960fafb23c4d571e26cef0a4 */ + if (r == DB_VERSION_MISMATCH) + { + eflags |= DB_PRIVATE; + dbenv->errx(dbenv, "warning: DB_VERSION_MISMATCH, retrying with DB_PRIVATE"); + r = dbenv->open(dbenv, dbpath, eflags, 0644); + } if (serialize_fd >= 0) close(serialize_fd); #else