Add a ‘verifyStore’ RPC

Hello!

The patch below adds a ‘verifyStore’ RPC with the same signature as the
current LocalStore::verifyStore method.

Thanks,
Ludo’.

>From aef46c03ca77eb6344f4892672eb6d9d06432041 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Mon, 1 Jun 2015 23:17:10 +0200
Subject: [PATCH] Add a 'verifyStore' remote procedure call.
This commit is contained in:
Ludovic Courtès 2015-06-01 23:20:11 +02:00 committed by Eelco Dolstra
parent 53dd97bb9d
commit b755752f76
5 changed files with 27 additions and 1 deletions

View file

@ -587,6 +587,16 @@ void RemoteStore::optimiseStore()
readInt(from);
}
bool RemoteStore::verifyStore(bool checkContents, bool repair)
{
openConnection();
writeInt(wopVerifyStore, to);
writeInt(checkContents, to);
writeInt(repair, to);
processStderr();
return readInt(from) != 0;
}
void RemoteStore::processStderr(Sink * sink, Source * source)
{
to.flush();

View file

@ -85,6 +85,7 @@ public:
void optimiseStore();
bool verifyStore(bool checkContents, bool repair);
private:
AutoCloseFD fdSocket;
FdSink to;

View file

@ -254,6 +254,10 @@ public:
/* Optimise the disk space usage of the Nix store by hard-linking files
with the same contents. */
virtual void optimiseStore() = 0;
/* Check the integrity of the Nix store. Returns true if errors
remain. */
virtual bool verifyStore(bool checkContents, bool repair) = 0;
};

View file

@ -42,7 +42,8 @@ typedef enum {
wopQueryValidPaths = 31,
wopQuerySubstitutablePaths = 32,
wopQueryValidDerivers = 33,
wopOptimiseStore = 34
wopOptimiseStore = 34,
wopVerifyStore = 35
} WorkerOp;

View file

@ -519,6 +519,16 @@ static void performOp(bool trusted, unsigned int clientVersion,
writeInt(1, to);
break;
case wopVerifyStore: {
bool checkContents = readInt(from) != 0;
bool repair = readInt(from) != 0;
startWork();
bool errors = store->verifyStore(checkContents, repair);
stopWork();
writeInt(errors, to);
break;
}
default:
throw Error(format("invalid operation %1%") % op);
}