Browse Source

Register gRPC reflection service

rust-volume-server
Chris Lu 4 days ago
parent
commit
276e5f5796
  1. 14
      seaweed-volume/Cargo.lock
  2. 1
      seaweed-volume/Cargo.toml
  3. 2
      seaweed-volume/build.rs
  4. 3
      seaweed-volume/src/lib.rs
  5. 20
      seaweed-volume/src/main.rs

14
seaweed-volume/Cargo.lock

@ -4272,6 +4272,19 @@ dependencies = [
"syn",
]
[[package]]
name = "tonic-reflection"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "878d81f52e7fcfd80026b7fdb6a9b578b3c3653ba987f87f0dce4b64043cba27"
dependencies = [
"prost 0.13.5",
"prost-types 0.13.5",
"tokio",
"tokio-stream",
"tonic",
]
[[package]]
name = "tower"
version = "0.4.13"
@ -4744,6 +4757,7 @@ dependencies = [
"toml",
"tonic",
"tonic-build",
"tonic-reflection",
"tower 0.4.13",
"tower-http 0.5.2",
"tracing",

1
seaweed-volume/Cargo.toml

@ -25,6 +25,7 @@ tokio-stream = "0.1"
# gRPC + protobuf
tonic = { version = "0.12", features = ["tls"] }
tonic-reflection = "0.12"
prost = "0.13"
prost-types = "0.13"

2
seaweed-volume/build.rs

@ -1,7 +1,9 @@
fn main() -> Result<(), Box<dyn std::error::Error>> {
let out_dir = std::path::PathBuf::from(std::env::var("OUT_DIR")?);
tonic_build::configure()
.build_server(true)
.build_client(true)
.file_descriptor_set_path(out_dir.join("seaweed_descriptor.bin"))
.compile_protos(
&[
"proto/volume_server.proto",

3
seaweed-volume/src/lib.rs

@ -9,6 +9,9 @@ pub mod version;
/// Generated protobuf modules.
pub mod pb {
pub const FILE_DESCRIPTOR_SET: &[u8] =
tonic::include_file_descriptor_set!("seaweed_descriptor");
pub mod remote_pb {
tonic::include_proto!("remote_pb");
}

20
seaweed-volume/src/main.rs

@ -455,8 +455,18 @@ async fn run(config: VolumeServerConfig) -> Result<(), Box<dyn std::error::Error
.await
.unwrap_or_else(|e| panic!("Failed to bind gRPC to {}: {}", grpc_addr, e));
let incoming = grpc_tls_incoming(listener, tls_acceptor);
let reflection_v1 = tonic_reflection::server::Builder::configure()
.register_encoded_file_descriptor_set(seaweed_volume::pb::FILE_DESCRIPTOR_SET)
.build_v1()
.expect("Failed to build gRPC reflection v1 service");
let reflection_v1alpha = tonic_reflection::server::Builder::configure()
.register_encoded_file_descriptor_set(seaweed_volume::pb::FILE_DESCRIPTOR_SET)
.build_v1alpha()
.expect("Failed to build gRPC reflection v1alpha service");
info!("gRPC server listening on {} (TLS enabled)", addr);
if let Err(e) = tonic::transport::Server::builder()
.add_service(reflection_v1)
.add_service(reflection_v1alpha)
.add_service(VolumeServerServer::new(grpc_service))
.serve_with_incoming_shutdown(incoming, async move {
let _ = shutdown_rx.recv().await;
@ -466,8 +476,18 @@ async fn run(config: VolumeServerConfig) -> Result<(), Box<dyn std::error::Error
error!("gRPC server error: {}", e);
}
} else {
let reflection_v1 = tonic_reflection::server::Builder::configure()
.register_encoded_file_descriptor_set(seaweed_volume::pb::FILE_DESCRIPTOR_SET)
.build_v1()
.expect("Failed to build gRPC reflection v1 service");
let reflection_v1alpha = tonic_reflection::server::Builder::configure()
.register_encoded_file_descriptor_set(seaweed_volume::pb::FILE_DESCRIPTOR_SET)
.build_v1alpha()
.expect("Failed to build gRPC reflection v1alpha service");
info!("gRPC server listening on {}", addr);
if let Err(e) = tonic::transport::Server::builder()
.add_service(reflection_v1)
.add_service(reflection_v1alpha)
.add_service(VolumeServerServer::new(grpc_service))
.serve_with_shutdown(addr, async move {
let _ = shutdown_rx.recv().await;

Loading…
Cancel
Save