1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-11-20 17:29:36 +01:00

Merge branch 'read-only-local-store' into overlayfs-store

This commit is contained in:
Ben Radford 2023-06-15 13:37:57 +01:00
commit 04d8f202a7
No known key found for this signature in database
GPG key ID: 9DF5D4640AB888D5
4 changed files with 22 additions and 17 deletions

View file

@ -363,7 +363,7 @@ LocalStore::LocalStore(const Params & params)
if (!readOnly) {
migrateCASchema(state->db, dbDir + "/ca-schema", globalLock);
} else {
throw Error("need to migrate to CA schema, but this cannot be done in read-only mode");
throw Error("need to migrate to content-addressed schema, but this cannot be done in read-only mode");
}
}
@ -502,7 +502,7 @@ int LocalStore::getSchema()
void LocalStore::openDB(State & state, bool create)
{
if (create && readOnly) {
throw Error("unable to create database while in read-only mode");
throw Error("cannot create database while in read-only mode");
}
if (access(dbDir.c_str(), R_OK | (readOnly ? 0 : W_OK)))

View file

@ -50,16 +50,16 @@ struct LocalStoreConfig : virtual LocalFSStoreConfig
false,
"read-only",
R"(
Allow this store to be opened when its database is on a read-only filesystem.
Allow this store to be opened when its [database](@docroot@/glossary.md#gloss-nix-database) is on a read-only filesystem.
Normally Nix will attempt to open the store database in read-write mode, even
for querying (when write access is not needed). This causes it to fail if the
database is on a read-only filesystem.
Normally Nix will attempt to open the store database in read-write mode, even for querying (when write access is not needed).
This causes it to fail if the database is on a read-only filesystem.
Enable read-only mode to disable locking and open the SQLite database with the
**immutable** parameter set. Do not use this unless the filesystem is read-only.
Using it when the filesystem is writable can cause incorrect query results or
corruption errors if the database is changed by another process.
Enable read-only mode to disable locking and open the SQLite database with the [`immutable` parameter](https://www.sqlite.org/c3ref/open.html) set.
**Warning**
Do not use this unless the filesystem is read-only.
Using it when the filesystem is writable can cause incorrect query results or corruption errors if the database is changed by another process.
)"};
const std::string name() override { return "Local Store"; }
@ -292,6 +292,10 @@ public:
private:
/**
* Retrieve the current version of the database schema.
* If the database does not exist yet, the version returned will be 0.
*/
int getSchema();
void openDB(State & state, bool create);