From 3757ee589f46a401fdacaa2126e6bf4902eee23d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 13 Aug 2007 11:37:39 +0000 Subject: [PATCH] * Bump the Nix database schema version number; delete the substitutes table. --- src/libstore/local-store.cc | 32 ++++++++++++++++++++++++++++++-- src/libstore/local-store.hh | 6 +++--- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/libstore/local-store.cc b/src/libstore/local-store.cc index bffefbaa7..4378f0ba6 100644 --- a/src/libstore/local-store.cc +++ b/src/libstore/local-store.cc @@ -58,6 +58,7 @@ static TableId dbDerivers = 0; static void upgradeStore07(); static void upgradeStore09(); +static void upgradeStore11(); void checkStoreNotSymlink() @@ -131,6 +132,8 @@ LocalStore::LocalStore(bool reserveSpace) upgradeStore07(); if (curSchema == 2) upgradeStore09(); + if (curSchema == 3) + upgradeStore11(); writeFile(schemaFN, (format("%1%") % nixSchemaVersion).str()); } } @@ -1042,10 +1045,10 @@ static void upgradeStore09() { /* !!! we should disallow concurrent upgrades */ - printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); - if (!pathExists(nixDBPath + "/referers")) return; + printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); + Transaction txn(nixDB); std::cerr << "converting referers to referrers..."; @@ -1082,4 +1085,29 @@ static void upgradeStore09() } +/* Upgrade from schema 3 (Nix 0.10) to schema 4 (Nix >= 0.11). The + only thing to do here is to delete the substitutes table and get + rid of invalid but substitutable references/referrers. */ +static void upgradeStore11() +{ + if (!pathExists(nixDBPath + "/substitutes")) return; + + printMsg(lvlError, "upgrading Nix store to new schema (this may take a while)..."); + + Transaction txn(nixDB); + TableId dbSubstitutes = nixDB.openTable("substitutes"); + + Paths subKeys; + nixDB.enumTable(txn, dbSubstitutes, subKeys); + for (Paths::iterator i = subKeys.begin(); i != subKeys.end(); ++i) { + if (!isValidPathTxn(txn, *i)) + invalidatePath(txn, *i); + } + + txn.commit(); + nixDB.closeTable(dbSubstitutes); + nixDB.deleteTable("substitutes"); +} + + } diff --git a/src/libstore/local-store.hh b/src/libstore/local-store.hh index ffcef6071..8bd37bc0a 100644 --- a/src/libstore/local-store.hh +++ b/src/libstore/local-store.hh @@ -13,9 +13,9 @@ class Transaction; /* Nix store and database schema version. Version 1 (or 0) was Nix <= - 0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10 and - up. */ -const int nixSchemaVersion = 3; + 0.7. Version 2 was Nix 0.8 and 0.9. Version 3 is Nix 0.10. + Version 4 is Nix 0.11. */ +const int nixSchemaVersion = 4; extern string drvsLogDir;