feat(3p/nix): Implement similar group of Worker::Query* handlers
These are the queries that are handled in the confusing case statement in the old daemon implementation, because they have very similar structure. Change-Id: Ie7143354f66cef4336dff8072ede9a56271a7e89 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1228 Tested-by: BuildkiteCI Reviewed-by: glittershark <grfn@gws.fyi>
This commit is contained in:
		
							parent
							
								
									32735eebdd
								
							
						
					
					
						commit
						5c9af8faee
					
				
					 1 changed files with 47 additions and 2 deletions
				
			
		|  | @ -6,6 +6,7 @@ namespace nix::daemon { | |||
| 
 | ||||
| using ::grpc::Status; | ||||
| using ::nix::proto::StorePath; | ||||
| using ::nix::proto::StorePaths; | ||||
| using ::nix::proto::Worker; | ||||
| 
 | ||||
| class WorkerServiceImpl final : public Worker::Service { | ||||
|  | @ -13,7 +14,7 @@ class WorkerServiceImpl final : public Worker::Service { | |||
|   WorkerServiceImpl(nix::Store* store) : store_(store) {} | ||||
| 
 | ||||
|   Status IsValidPath(grpc::ServerContext* context, const StorePath* request, | ||||
|                      nix::proto::IsValidPathResponse* response) { | ||||
|                      nix::proto::IsValidPathResponse* response) override { | ||||
|     const auto& path = request->path(); | ||||
|     store_->assertStorePath(path); | ||||
|     response->set_is_valid(store_->isValidPath(path)); | ||||
|  | @ -22,7 +23,7 @@ class WorkerServiceImpl final : public Worker::Service { | |||
|   } | ||||
| 
 | ||||
|   Status HasSubstitutes(grpc::ServerContext* context, const StorePath* request, | ||||
|                         nix::proto::HasSubstitutesResponse* response) { | ||||
|                         nix::proto::HasSubstitutesResponse* response) override { | ||||
|     const auto& path = request->path(); | ||||
|     store_->assertStorePath(path); | ||||
|     PathSet res = store_->querySubstitutablePaths({path}); | ||||
|  | @ -31,6 +32,50 @@ class WorkerServiceImpl final : public Worker::Service { | |||
|     return Status::OK; | ||||
|   } | ||||
| 
 | ||||
|   Status QueryReferrers(grpc::ServerContext* context, const StorePath* request, | ||||
|                         StorePaths* response) override { | ||||
|     const auto& path = request->path(); | ||||
|     store_->assertStorePath(path); | ||||
| 
 | ||||
|     PathSet paths; | ||||
|     store_->queryReferrers(path, paths); | ||||
| 
 | ||||
|     for (const auto& path : paths) { | ||||
|       response->add_paths(path); | ||||
|     } | ||||
| 
 | ||||
|     return Status::OK; | ||||
|   } | ||||
| 
 | ||||
|   Status QueryValidDerivers(grpc::ServerContext* context, | ||||
|                             const StorePath* request, StorePaths* response) { | ||||
|     const auto& path = request->path(); | ||||
|     store_->assertStorePath(path); | ||||
| 
 | ||||
|     PathSet paths = store_->queryValidDerivers(path); | ||||
| 
 | ||||
|     for (const auto& path : paths) { | ||||
|       response->add_paths(path); | ||||
|     } | ||||
| 
 | ||||
|     return Status::OK; | ||||
|   } | ||||
| 
 | ||||
|   Status QueryDerivationOutputs(grpc::ServerContext* context, | ||||
|                                 const StorePath* request, | ||||
|                                 StorePaths* response) override { | ||||
|     const auto& path = request->path(); | ||||
|     store_->assertStorePath(path); | ||||
| 
 | ||||
|     PathSet paths = store_->queryDerivationOutputs(path); | ||||
| 
 | ||||
|     for (const auto& path : paths) { | ||||
|       response->add_paths(path); | ||||
|     } | ||||
| 
 | ||||
|     return Status::OK; | ||||
|   } | ||||
| 
 | ||||
|  private: | ||||
|   // TODO(tazjin): Who owns the store?
 | ||||
|   nix::Store* store_; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue