diff options
author | Michael Schroeder <mls@suse.de> | 2015-07-16 17:42:10 +0200 |
---|---|---|
committer | Michael Schroeder <mls@suse.de> | 2015-07-16 17:42:10 +0200 |
commit | e8a38dba598c4d089d723c0650bd662fc2fdbafc (patch) | |
tree | bb8959f9d0cb10542a449247cb0ee607a06e9abf /lib/backend/ndb/glue.c | |
parent | 278216e6b326ba0e2612b937cf3dc8e6d8d99685 (diff) | |
download | rpm-e8a38dba598c4d089d723c0650bd662fc2fdbafc.tar.gz |
Add INDEXSYNC db control op
We do this for two purposes: to fsync the index database and to
update the generation count so that we can detect when the database
is out of sync.
Diffstat (limited to 'lib/backend/ndb/glue.c')
-rw-r--r-- | lib/backend/ndb/glue.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/backend/ndb/glue.c b/lib/backend/ndb/glue.c index 2ccc8bdf8..3ed8bd3b5 100644 --- a/lib/backend/ndb/glue.c +++ b/lib/backend/ndb/glue.c @@ -166,8 +166,27 @@ static void ndb_SetFSync(rpmdb rdb, int enable) { } +static int indexSync(rpmpkgdb pkgdb, rpmxdb xdb) +{ + unsigned int generation; + int rc; + if (!pkgdb || !xdb) + return 1; + if (rpmpkgLock(pkgdb, 1)) + return 1; + if (rpmpkgGeneration(pkgdb, &generation)) { + rpmpkgUnlock(pkgdb, 1); + return 1; + } + rc = rpmxdbSetUserGeneration(xdb, generation); + rpmpkgUnlock(pkgdb, 1); + return rc; +} + static int ndb_Ctrl(rpmdb rdb, dbCtrlOp ctrl) { + struct ndbEnv_s *ndbenv = rdb->db_dbenv; + switch (ctrl) { case DB_CTRL_LOCK_RO: if (!rdb->db_pkgs) @@ -185,6 +204,10 @@ static int ndb_Ctrl(rpmdb rdb, dbCtrlOp ctrl) if (!rdb->db_pkgs) return 1; return rpmpkgUnlock(rdb->db_pkgs->dbi_db, 1); + case DB_CTRL_INDEXSYNC: + if (!ndbenv) + return 1; + return indexSync(ndbenv->pkgdb, ndbenv->xdb); default: break; } |