Browse Source

Register gRPC reflection service

rust-volume-server
Chris Lu 5 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", "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]] [[package]]
name = "tower" name = "tower"
version = "0.4.13" version = "0.4.13"
@ -4744,6 +4757,7 @@ dependencies = [
"toml", "toml",
"tonic", "tonic",
"tonic-build", "tonic-build",
"tonic-reflection",
"tower 0.4.13", "tower 0.4.13",
"tower-http 0.5.2", "tower-http 0.5.2",
"tracing", "tracing",

1
seaweed-volume/Cargo.toml

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

2
seaweed-volume/build.rs

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

3
seaweed-volume/src/lib.rs

@ -9,6 +9,9 @@ pub mod version;
/// Generated protobuf modules. /// Generated protobuf modules.
pub mod pb { pub mod pb {
pub const FILE_DESCRIPTOR_SET: &[u8] =
tonic::include_file_descriptor_set!("seaweed_descriptor");
pub mod remote_pb { pub mod remote_pb {
tonic::include_proto!("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 .await
.unwrap_or_else(|e| panic!("Failed to bind gRPC to {}: {}", grpc_addr, e)); .unwrap_or_else(|e| panic!("Failed to bind gRPC to {}: {}", grpc_addr, e));
let incoming = grpc_tls_incoming(listener, tls_acceptor); 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); info!("gRPC server listening on {} (TLS enabled)", addr);
if let Err(e) = tonic::transport::Server::builder() if let Err(e) = tonic::transport::Server::builder()
.add_service(reflection_v1)
.add_service(reflection_v1alpha)
.add_service(VolumeServerServer::new(grpc_service)) .add_service(VolumeServerServer::new(grpc_service))
.serve_with_incoming_shutdown(incoming, async move { .serve_with_incoming_shutdown(incoming, async move {
let _ = shutdown_rx.recv().await; 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); error!("gRPC server error: {}", e);
} }
} else { } 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); info!("gRPC server listening on {}", addr);
if let Err(e) = tonic::transport::Server::builder() if let Err(e) = tonic::transport::Server::builder()
.add_service(reflection_v1)
.add_service(reflection_v1alpha)
.add_service(VolumeServerServer::new(grpc_service)) .add_service(VolumeServerServer::new(grpc_service))
.serve_with_shutdown(addr, async move { .serve_with_shutdown(addr, async move {
let _ = shutdown_rx.recv().await; let _ = shutdown_rx.recv().await;

Loading…
Cancel
Save