summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPanu Matilainen <pmatilai@redhat.com>2012-02-02 14:31:17 +0200
committerPanu Matilainen <pmatilai@redhat.com>2012-02-02 14:39:49 +0200
commit89eadf7f1465cfb4ec71f1c4dd17b3fec2afc5b3 (patch)
tree5eac8f7aebeab26071349e5d3574b3f4d237ec5e
parent290fcbbe6b3ca2fb1d5e4a7269a32a94f8a1563a (diff)
downloadlibrpm-tizen-89eadf7f1465cfb4ec71f1c4dd17b3fec2afc5b3.tar.gz
librpm-tizen-89eadf7f1465cfb4ec71f1c4dd17b3fec2afc5b3.tar.bz2
librpm-tizen-89eadf7f1465cfb4ec71f1c4dd17b3fec2afc5b3.zip
Use private environment for database rebuilds too, document
- One of the more common reasons for users to do --rebuilddb is a paniced environment. Throwing DB_RUNRECOVER errors at the user who is trying to recover by rebuilding the db isn't terribly productive (RhBug:590710). Use a private environment while rebuilding for both the original and new database, and dont bother with CDB which only slows things down when there are no other players present. - Verify wants the same flags but for different reasons...
-rw-r--r--lib/backend/db3.c12
-rw-r--r--lib/rpmdb.c3
2 files changed, 9 insertions, 6 deletions
diff --git a/lib/backend/db3.c b/lib/backend/db3.c
index 38f14deee..30ed7acd5 100644
--- a/lib/backend/db3.c
+++ b/lib/backend/db3.c
@@ -131,11 +131,13 @@ static int db_init(rpmdb rdb, const char * dbhome)
return 0;
}
- /* By no means necessary but speeds things up a bit */
- if (rdb->db_flags & RPMDB_FLAG_REBUILD)
- eflags &= ~DB_INIT_CDB;
- /* XXX Something bizarre with verify... use private environment, no cdb */
- if (rdb->db_flags & RPMDB_FLAG_VERIFYONLY) {
+ /*
+ * Both verify and rebuild are rather special, if for different reasons:
+ * On rebuild we dont want to be affected by eg paniced environment, and
+ * CDB only slows things down there. Verify is a quirky beast unlike
+ * anything else in BDB, and does not like shared env or CDB.
+ */
+ if (rdb->db_flags & (RPMDB_FLAG_VERIFYONLY|RPMDB_FLAG_REBUILD)) {
eflags |= DB_PRIVATE;
eflags &= ~DB_INIT_CDB;
}
diff --git a/lib/rpmdb.c b/lib/rpmdb.c
index d3a5e2366..79abde734 100644
--- a/lib/rpmdb.c
+++ b/lib/rpmdb.c
@@ -2838,7 +2838,8 @@ int rpmdbRebuild(const char * prefix, rpmts ts,
}
removedir = 1;
- if (openDatabase(prefix, dbpath, &olddb, O_RDONLY, 0644, 0)) {
+ if (openDatabase(prefix, dbpath, &olddb,
+ O_RDONLY, 0644, RPMDB_FLAG_REBUILD)) {
rc = 1;
goto exit;
}