diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-13T18·33-0400 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2012-09-13T18·33-0400 |
commit | e6e495649cc1f324cd0a66cfaf3c4bdf21522e63 (patch) | |
tree | 48730d41c13b4ac7dbfada7203f0d542aefe02f5 | |
parent | 2923b55f9d67bda340053a27e08f7bcddc025f7c (diff) |
Vacuum the SQLite DB after running the garbage collector
-rw-r--r-- | src/libstore/gc.cc | 3 | ||||
-rw-r--r-- | src/libstore/local-store.cc | 7 | ||||
-rw-r--r-- | src/libstore/local-store.hh | 2 |
3 files changed, 12 insertions, 0 deletions
diff --git a/src/libstore/gc.cc b/src/libstore/gc.cc index dc1de48ea605..4a025a8feb92 100644 --- a/src/libstore/gc.cc +++ b/src/libstore/gc.cc @@ -740,6 +740,9 @@ void LocalStore::collectGarbage(const GCOptions & options, GCResults & results) printMsg(lvlError, format("deleting unused links...")); removeUnusedLinks(state); } + + /* While we're at it, vacuum the database. */ + if (options.action == GCOptions::gcDeleteDead) vacuumDB(); } diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index bd63ce55d095..793ec89d918b 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -1703,4 +1703,11 @@ void LocalStore::upgradeStore6() } +void LocalStore::vacuumDB() +{ + if (sqlite3_exec(db, "vacuum;", 0, 0, 0) != SQLITE_OK) + throwSQLiteError(db, "vacuuming SQLite database"); +} + + } diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index ba0582922121..d2b13d6a9028 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -195,6 +195,8 @@ public: void clearFailedPaths(const PathSet & paths); + void vacuumDB(); + private: Path schemaPath; |