@@ -10,6 +10,7 @@ use tonic::{codegen::CompressionEncoding, service::Interceptor, transport::Chann
1010use opentelemetry_proto:: transform:: logs:: tonic:: group_logs_by_resource_and_scope;
1111
1212use super :: BoxInterceptor ;
13+ use tokio:: sync:: Mutex ;
1314
1415pub ( crate ) struct TonicLogsClient {
1516 inner : Option < ClientInner > ,
@@ -20,7 +21,7 @@ pub(crate) struct TonicLogsClient {
2021
2122struct ClientInner {
2223 client : LogsServiceClient < Channel > ,
23- interceptor : BoxInterceptor ,
24+ interceptor : Mutex < BoxInterceptor > ,
2425}
2526
2627impl fmt:: Debug for TonicLogsClient {
@@ -45,7 +46,7 @@ impl TonicLogsClient {
4546 TonicLogsClient {
4647 inner : Some ( ClientInner {
4748 client,
48- interceptor,
49+ interceptor : Mutex :: new ( interceptor ) ,
4950 } ) ,
5051 resource : Default :: default ( ) ,
5152 }
@@ -54,11 +55,13 @@ impl TonicLogsClient {
5455
5556#[ async_trait]
5657impl LogExporter for TonicLogsClient {
57- async fn export ( & mut self , batch : LogBatch < ' _ > ) -> LogResult < ( ) > {
58- let ( mut client, metadata, extensions) = match & mut self . inner {
58+ async fn export ( & self , batch : LogBatch < ' _ > ) -> LogResult < ( ) > {
59+ let ( mut client, metadata, extensions) = match & self . inner {
5960 Some ( inner) => {
6061 let ( m, e, _) = inner
6162 . interceptor
63+ . lock ( )
64+ . await // tokio::sync::Mutex doesn't return a poisoned error, so we can safely use the interceptor here
6265 . call ( Request :: new ( ( ) ) )
6366 . map_err ( |e| LogError :: Other ( Box :: new ( e) ) ) ?
6467 . into_parts ( ) ;
0 commit comments