Skip to content

Commit d82f36d

Browse files
authored
chore: add peer address context to client error logging (GreptimeTeam#6793)
chore: add context to client error logging Signed-off-by: WenyXu <wenymedia@gmail.com>
1 parent 68ac374 commit d82f36d

1 file changed

Lines changed: 40 additions & 9 deletions

File tree

src/client/src/database.rs

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,24 @@ pub struct Database {
7575
}
7676

7777
pub struct DatabaseClient {
78+
pub addr: String,
7879
pub inner: GreptimeDatabaseClient<Channel>,
7980
}
8081

82+
impl DatabaseClient {
83+
/// Returns a closure that logs the error when the request fails.
84+
pub fn inspect_err<'a>(&'a self, context: &'a str) -> impl Fn(&tonic::Status) + 'a {
85+
let addr = &self.addr;
86+
move |status| {
87+
error!("Failed to {context} request, peer: {addr}, status: {status:?}");
88+
}
89+
}
90+
}
91+
8192
fn make_database_client(client: &Client) -> Result<DatabaseClient> {
82-
let (_, channel) = client.find_channel()?;
93+
let (addr, channel) = client.find_channel()?;
8394
Ok(DatabaseClient {
95+
addr,
8496
inner: GreptimeDatabaseClient::new(channel)
8597
.max_decoding_message_size(client.max_grpc_recv_message_size())
8698
.max_encoding_message_size(client.max_grpc_send_message_size()),
@@ -167,14 +179,19 @@ impl Database {
167179
requests: InsertRequests,
168180
hints: &[(&str, &str)],
169181
) -> Result<u32> {
170-
let mut client = make_database_client(&self.client)?.inner;
182+
let mut client = make_database_client(&self.client)?;
171183
let request = self.to_rpc_request(Request::Inserts(requests));
172184

173185
let mut request = tonic::Request::new(request);
174186
let metadata = request.metadata_mut();
175187
Self::put_hints(metadata, hints)?;
176188

177-
let response = client.handle(request).await?.into_inner();
189+
let response = client
190+
.inner
191+
.handle(request)
192+
.await
193+
.inspect_err(client.inspect_err("insert_with_hints"))?
194+
.into_inner();
178195
from_grpc_response(response)
179196
}
180197

@@ -189,14 +206,19 @@ impl Database {
189206
requests: RowInsertRequests,
190207
hints: &[(&str, &str)],
191208
) -> Result<u32> {
192-
let mut client = make_database_client(&self.client)?.inner;
209+
let mut client = make_database_client(&self.client)?;
193210
let request = self.to_rpc_request(Request::RowInserts(requests));
194211

195212
let mut request = tonic::Request::new(request);
196213
let metadata = request.metadata_mut();
197214
Self::put_hints(metadata, hints)?;
198215

199-
let response = client.handle(request).await?.into_inner();
216+
let response = client
217+
.inner
218+
.handle(request)
219+
.await
220+
.inspect_err(client.inspect_err("row_inserts_with_hints"))?
221+
.into_inner();
200222
from_grpc_response(response)
201223
}
202224

@@ -217,9 +239,14 @@ impl Database {
217239

218240
/// Make a request to the database.
219241
pub async fn handle(&self, request: Request) -> Result<u32> {
220-
let mut client = make_database_client(&self.client)?.inner;
242+
let mut client = make_database_client(&self.client)?;
221243
let request = self.to_rpc_request(request);
222-
let response = client.handle(request).await?.into_inner();
244+
let response = client
245+
.inner
246+
.handle(request)
247+
.await
248+
.inspect_err(client.inspect_err("handle"))?
249+
.into_inner();
223250
from_grpc_response(response)
224251
}
225252

@@ -231,7 +258,7 @@ impl Database {
231258
max_retries: u32,
232259
hints: &[(&str, &str)],
233260
) -> Result<u32> {
234-
let mut client = make_database_client(&self.client)?.inner;
261+
let mut client = make_database_client(&self.client)?;
235262
let mut retries = 0;
236263

237264
let request = self.to_rpc_request(request);
@@ -240,7 +267,11 @@ impl Database {
240267
let mut tonic_request = tonic::Request::new(request.clone());
241268
let metadata = tonic_request.metadata_mut();
242269
Self::put_hints(metadata, hints)?;
243-
let raw_response = client.handle(tonic_request).await;
270+
let raw_response = client
271+
.inner
272+
.handle(tonic_request)
273+
.await
274+
.inspect_err(client.inspect_err("handle"));
244275
match (raw_response, retries < max_retries) {
245276
(Ok(resp), _) => return from_grpc_response(resp.into_inner()),
246277
(Err(err), true) => {

0 commit comments

Comments
 (0)