@@ -75,12 +75,24 @@ pub struct Database {
7575}
7676
7777pub 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+
8192fn 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