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:
		
							parent
							
								
									53dd97bb9d
								
							
						
					
					
						commit
						b755752f76
					
				
					 5 changed files with 27 additions and 1 deletions
				
			
		|  | @ -587,6 +587,16 @@ void RemoteStore::optimiseStore() | ||||||
|     readInt(from); |     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) | void RemoteStore::processStderr(Sink * sink, Source * source) | ||||||
| { | { | ||||||
|     to.flush(); |     to.flush(); | ||||||
|  |  | ||||||
|  | @ -85,6 +85,7 @@ public: | ||||||
| 
 | 
 | ||||||
|     void optimiseStore(); |     void optimiseStore(); | ||||||
| 
 | 
 | ||||||
|  |     bool verifyStore(bool checkContents, bool repair); | ||||||
| private: | private: | ||||||
|     AutoCloseFD fdSocket; |     AutoCloseFD fdSocket; | ||||||
|     FdSink to; |     FdSink to; | ||||||
|  |  | ||||||
|  | @ -254,6 +254,10 @@ public: | ||||||
|     /* Optimise the disk space usage of the Nix store by hard-linking files
 |     /* Optimise the disk space usage of the Nix store by hard-linking files
 | ||||||
|        with the same contents. */ |        with the same contents. */ | ||||||
|     virtual void optimiseStore() = 0; |     virtual void optimiseStore() = 0; | ||||||
|  | 
 | ||||||
|  |     /* Check the integrity of the Nix store.  Returns true if errors
 | ||||||
|  |        remain. */ | ||||||
|  |     virtual bool verifyStore(bool checkContents, bool repair) = 0; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -42,7 +42,8 @@ typedef enum { | ||||||
|     wopQueryValidPaths = 31, |     wopQueryValidPaths = 31, | ||||||
|     wopQuerySubstitutablePaths = 32, |     wopQuerySubstitutablePaths = 32, | ||||||
|     wopQueryValidDerivers = 33, |     wopQueryValidDerivers = 33, | ||||||
|     wopOptimiseStore = 34 |     wopOptimiseStore = 34, | ||||||
|  |     wopVerifyStore = 35 | ||||||
| } WorkerOp; | } WorkerOp; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -519,6 +519,16 @@ static void performOp(bool trusted, unsigned int clientVersion, | ||||||
|         writeInt(1, to); |         writeInt(1, to); | ||||||
|         break; |         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: |     default: | ||||||
|         throw Error(format("invalid operation %1%") % op); |         throw Error(format("invalid operation %1%") % op); | ||||||
|     } |     } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue