Skip to content

Commit 6cb274c

Browse files
committed
Add logging for RPCs; fixed warnings
1 parent f01d3fa commit 6cb274c

File tree

6 files changed

+33
-28
lines changed

6 files changed

+33
-28
lines changed

crates/grpc_server/build.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::error::Error;
2-
31
fn main() -> Result<(), Box<dyn std::error::Error>> {
42
tonic_prost_build::compile_protos("proto/vector-db.proto")?;
53
Ok(())

crates/grpc_server/src/config.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ impl GRPCServerConfig {
6363
.map_err(|_| errors::ConfigError::InvalidDimension)?;
6464

6565
// fetch data path; create tempdir if not specified
66-
let mut data_path: PathBuf;
66+
let data_path: PathBuf;
6767
if let Ok(data_path_str) = env::var(ENV_DATA_PATH) {
6868
data_path = PathBuf::from(data_path_str);
6969
fs::create_dir_all(&data_path).map_err(|_| errors::ConfigError::InvalidDataPath)?;
@@ -85,9 +85,9 @@ impl GRPCServerConfig {
8585
let addr: SocketAddr = format!("{}:{}", host, port).parse().unwrap();
8686

8787
// check if logging is enabled
88-
let mut logging: bool = false; // default to no logging
88+
let mut logging: bool = true; // default to no logging
8989
if let Ok(logging_str) = env::var(ENV_LOGGING) {
90-
logging = logging_str.parse().unwrap_or(false);
90+
logging = logging_str.parse().unwrap_or(true);
9191
}
9292

9393
Ok(GRPCServerConfig {

crates/grpc_server/src/interceptors.rs

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,6 @@
1-
use tonic::{GrpcMethod, Request, Status, service::Interceptor};
1+
use tonic::{Status, service::Interceptor};
22
use tracing::{Level, event};
33

4-
pub fn logging_interceptor(req: Request<()>) -> Result<Request<()>, Status> {
5-
if let Some(method) = req.extensions().get::<GrpcMethod>() {
6-
println!(
7-
"RPC to {}:{} : From {:?}",
8-
method.service(),
9-
method.method(),
10-
req.remote_addr()
11-
);
12-
}
13-
Ok(req)
14-
}
15-
164
#[derive(Clone)]
175
pub struct AuthInterceptor {
186
root_password: String,

crates/grpc_server/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@ pub mod config;
22
pub mod constants;
33
pub mod errors;
44
pub mod interceptors;
5+
pub mod utils;

crates/grpc_server/src/main.rs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
use api;
22
use defs;
3+
use grpc_server::config::GRPCServerConfig;
34
use grpc_server::constants::SIMILARITY_PROTOBUF_MAP;
45
use grpc_server::interceptors;
5-
use grpc_server::{config::GRPCServerConfig, interceptors::logging_interceptor};
6+
use grpc_server::utils::log_rpc;
67
use std::panic;
78
use tonic::{Request, Response, Status, service::InterceptorLayer, transport::Server};
8-
use tracing_subscriber;
9-
109
use tracing::{Level, event};
10+
use tracing_subscriber;
1111
use vectordb::{
12-
DenseVector, InsertVectorRequest, Point, PointId, SearchRequest, SearchResponse, Similarity,
12+
DenseVector, InsertVectorRequest, Point, PointId, SearchRequest, SearchResponse,
1313
vector_db_server::{VectorDb, VectorDbServer},
1414
};
1515
pub mod vectordb {
@@ -18,6 +18,7 @@ pub mod vectordb {
1818

1919
pub struct VectorDBService {
2020
pub vector_db: api::VectorDb,
21+
pub logging: bool,
2122
}
2223

2324
#[tonic::async_trait]
@@ -26,16 +27,19 @@ impl VectorDb for VectorDBService {
2627
&self,
2728
request: Request<InsertVectorRequest>,
2829
) -> Result<Response<PointId>, Status> {
30+
log_rpc("insert_vector", self.logging);
31+
2932
let inner_request = request.into_inner();
3033

3134
let dense_vector = inner_request.vector;
3235
if dense_vector.is_none() {
3336
return Err(Status::invalid_argument("dense_vector is empty"));
3437
}
35-
// fetch payload and default to empty struct otherwise
36-
let payload = inner_request.payload.unwrap_or_default();
3738

3839
// TODO: Implement payload handling once its defined
40+
// fetch payload and default to empty struct otherwise
41+
// let payload = inner_request.payload.unwrap_or_default();
42+
3943
let point_id = self
4044
.vector_db
4145
.insert(dense_vector.unwrap().values, defs::Payload {});
@@ -53,6 +57,8 @@ impl VectorDb for VectorDBService {
5357
}
5458

5559
async fn get_point(&self, request: Request<PointId>) -> Result<Response<Point>, Status> {
60+
log_rpc("get_point", self.logging);
61+
5662
let inner_request = request.into_inner();
5763

5864
let point_id = inner_request.id;
@@ -79,6 +85,8 @@ impl VectorDb for VectorDBService {
7985
&self,
8086
request: Request<SearchRequest>,
8187
) -> Result<Response<SearchResponse>, Status> {
88+
log_rpc("search_points", self.logging);
89+
8290
let search_request = request.into_inner();
8391

8492
//TODO: distance function panics if different dimensions; no dimension enforcement
@@ -105,12 +113,14 @@ impl VectorDb for VectorDBService {
105113
}
106114

107115
async fn delete_point(&self, request: Request<PointId>) -> Result<Response<()>, Status> {
116+
log_rpc("delete_point", self.logging);
117+
108118
let point_id = request.into_inner().id;
109119

110120
// TODO: delete call needs to return a boolean indicating if point is present or not
111-
// if self.vector_db.delete(point_id)? {
112-
// return Err(Status::not_found("Point not found"));
113-
// };
121+
if self.vector_db.delete(point_id).is_err() {
122+
return Err(Status::not_found("Error deleting point"));
123+
};
114124

115125
Ok(Response::new(()))
116126
}
@@ -129,6 +139,7 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
129139

130140
let vector_db_service = VectorDBService {
131141
vector_db: vector_db_api,
142+
logging: config.logging,
132143
};
133144

134145
event!(
@@ -140,7 +151,6 @@ async fn main() -> Result<(), Box<dyn std::error::Error>> {
140151
let auth_interceptor = interceptors::AuthInterceptor::new(config.root_password);
141152

142153
let _ = Server::builder()
143-
.layer(InterceptorLayer::new(logging_interceptor))
144154
.layer(InterceptorLayer::new(auth_interceptor))
145155
.add_service(VectorDbServer::new(vector_db_service))
146156
.serve(config.addr)

crates/grpc_server/src/utils.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
use tracing;
2+
3+
#[inline(always)] // doing function inlining for optimization
4+
pub fn log_rpc(rpc: &str, logging: bool) {
5+
if logging {
6+
tracing::event!(tracing::Level::INFO, "{} RPC called", rpc);
7+
}
8+
}

0 commit comments

Comments
 (0)