feat(tvix/store): implement reflection
This implements grpc.reflection.v1alpha.ServerReflection, and will make tools like evans automatically discover available services, without having to specify the path to the .proto files client-side. It's behind a reflection feature flag, which is enabled by default. Change-Id: Icbcb5eb05ceede5b9952e38a2ba72eaa6fa8a437 Reviewed-on: https://cl.tvl.fyi/c/depot/+/7435 Reviewed-by: tazjin <tazjin@tvl.su> Tested-by: BuildkiteCI
This commit is contained in:
parent
51243007f6
commit
0bf2b0ef11
7 changed files with 144 additions and 27 deletions
|
|
@ -2,6 +2,9 @@ use crate::proto::blob_service_server::BlobServiceServer;
|
|||
use crate::proto::directory_service_server::DirectoryServiceServer;
|
||||
use crate::proto::path_info_service_server::PathInfoServiceServer;
|
||||
|
||||
#[cfg(feature = "reflection")]
|
||||
use crate::proto::FILE_DESCRIPTOR_SET;
|
||||
|
||||
use clap::Parser;
|
||||
use tonic::{transport::Server, Result};
|
||||
|
||||
|
|
@ -31,18 +34,28 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|||
.parse()
|
||||
.unwrap();
|
||||
|
||||
let mut server = Server::builder();
|
||||
|
||||
let blob_service = dummy_blob_service::DummyBlobService {};
|
||||
let directory_service = dummy_directory_service::DummyDirectoryService {};
|
||||
let path_info_service = dummy_path_info_service::DummyPathInfoService {};
|
||||
|
||||
println!("tvix-store listening on {}", listen_address);
|
||||
|
||||
Server::builder()
|
||||
let mut router = server
|
||||
.add_service(BlobServiceServer::new(blob_service))
|
||||
.add_service(DirectoryServiceServer::new(directory_service))
|
||||
.add_service(PathInfoServiceServer::new(path_info_service))
|
||||
.serve(listen_address)
|
||||
.await?;
|
||||
.add_service(PathInfoServiceServer::new(path_info_service));
|
||||
|
||||
#[cfg(feature = "reflection")]
|
||||
{
|
||||
let reflection_svc = tonic_reflection::server::Builder::configure()
|
||||
.register_encoded_file_descriptor_set(FILE_DESCRIPTOR_SET)
|
||||
.build()?;
|
||||
router = router.add_service(reflection_svc);
|
||||
}
|
||||
|
||||
println!("tvix-store listening on {}", listen_address);
|
||||
|
||||
router.serve(listen_address).await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue