@@ -42,7 +42,7 @@ struct OtlpGrpcForwardProxy::Impl
42
42
{
43
43
bool active{ false };
44
44
45
- OtlpGrpcClientOptions clientOptions;
45
+ OtlpGrpcClientOptions clientOptions{} ;
46
46
std::shared_ptr<OtlpGrpcClient> client;
47
47
48
48
grpc::ServerBuilder serverBuilder;
@@ -65,10 +65,6 @@ struct OtlpGrpcForwardProxy::Impl
65
65
std::unique_ptr<MetricsService::StubInterface> metricExporterStub;
66
66
67
67
#if defined(ENABLE_ASYNC_EXPORT)
68
- ExportMode logExporterMode{ ExportMode::Unknown };
69
- ExportMode traceExporterMode{ ExportMode::Unknown };;
70
- ExportMode metricExporterMode{ ExportMode::Unknown };;
71
-
72
68
struct LogExporterProxyAsync ;
73
69
struct TraceExporterProxyAsync ;
74
70
struct MetricExporterProxyAsync ;
@@ -123,11 +119,8 @@ struct OtlpGrpcForwardProxy::Impl
123
119
OTEL_INTERNAL_LOG_ERROR (" [otlp_grpc_forward_proxy] Loop detected!" );
124
120
return true ;
125
121
}
126
- else
127
- {
128
- // Add what we've got so far
129
- context->AddMetadata (kFwProxyRidHeader , value );
130
- }
122
+ // Add what we've got so far
123
+ context->AddMetadata (kFwProxyRidHeader , value );
131
124
}
132
125
// Add ourselves too.
133
126
context->AddMetadata (kFwProxyRidHeader , fw_proxy_id);
@@ -154,7 +147,6 @@ OtlpGrpcForwardProxy::Impl::Impl(const OtlpGrpcClientOptions& options)
154
147
uint64_t p1 = (uint64_t (rd ())<<32 ) | uint64_t (rd ());
155
148
sprintf_s (buf, " %08.8lx%08.8lx" , p0, p1);
156
149
fw_proxy_id = buf;
157
-
158
150
}
159
151
160
152
#if defined(ENABLE_ASYNC_EXPORT)
@@ -222,9 +214,8 @@ grpc::ServerUnaryReactor* OtlpGrpcForwardProxy::Impl::Finish(grpc::CallbackServe
222
214
}
223
215
#endif
224
216
225
- // This is bit ugly, but still easier to understand (at least by me) than template<>'s
226
217
#if defined(ENABLE_ASYNC_EXPORT)
227
- #define MAKE_PROXY_ASYNC (NAME, STUB, SERVICE, REQUEST, RESPONSE, TEXT, MODE ) \
218
+ #define MAKE_PROXY_ASYNC (NAME, STUB, SERVICE, REQUEST, RESPONSE, TEXT ) \
228
219
struct OtlpGrpcForwardProxy ::Impl::NAME final : public SERVICE::CallbackService { \
229
220
OtlpGrpcForwardProxy::Impl& impl; \
230
221
explicit NAME (OtlpGrpcForwardProxy::Impl& impl_): impl(impl_){} \
@@ -234,22 +225,16 @@ grpc::ServerUnaryReactor* OtlpGrpcForwardProxy::Impl::Finish(grpc::CallbackServe
234
225
auto context{ impl.client ->MakeClientContext (impl.clientOptions ) }; \
235
226
if ( impl.CheckForLoop (context.get (), cbServerContext->client_metadata ()) ) \
236
227
return impl.Finish (cbServerContext, exportResult, grpc::Status (grpc::StatusCode::FAILED_PRECONDITION, " OtlpGrpcForwardProxy detected loop." )); \
237
- OTEL_INTERNAL_LOG_DEBUG (" [otlp_grpc_forward_proxy] " TEXT " export" ); \
238
- auto syncStatus{ grpc::Status (grpc::Status (grpc::StatusCode::DO_NOT_USE, " " )) }; \
228
+ OTEL_INTERNAL_LOG_DEBUG (" [otlp_grpc_forward_proxy] async " TEXT " export" ); \
239
229
auto arena{ std::make_unique<google::protobuf::Arena>(impl.arenaOptions ) }; \
240
- auto request { *req }; \
241
- exportResult = impl.client ->DelegateAsyncExport ( impl.clientOptions , impl.STUB .get (), std::move (context), std::move (arena), std::move (request ), \
230
+ auto reqCopy { *req }; \
231
+ exportResult = impl.client ->DelegateAsyncExport ( impl.clientOptions , impl.STUB .get (), std::move (context), std::move (arena), std::move (reqCopy ), \
242
232
[implPtr = &impl] (sdk::common::ExportResult r, std::unique_ptr<google::protobuf::Arena>&&, const REQUEST&, RESPONSE* ) -> bool { \
243
233
return implPtr->HandleExportResult (r); \
244
234
}); \
245
- if ( exportResult == sdk::common::ExportResult::kFailureFull && impl.MODE == OtlpGrpcForwardProxy::ExportMode::AsyncBlockOnFull ) { \
246
- OTEL_INTERNAL_LOG_DEBUG (" [otlp_grpc_forward_proxy] " TEXT " export (blocking)" ); \
247
- auto syncContext{ impl.client ->MakeClientContext (impl.clientOptions ) }; \
248
- syncStatus = impl.STUB ->Export ( syncContext.get (), *req, resp ); \
249
- } \
250
- return impl.Finish (cbServerContext, exportResult, syncStatus); \
235
+ return impl.Finish (cbServerContext, exportResult, grpc::Status (grpc::StatusCode::DO_NOT_USE, " " )); \
251
236
} \
252
- return impl.Finish (cbServerContext, exportResult, grpc::Status (grpc::StatusCode::FAILED_PRECONDITION , " OtlpGrpcForwardProxy is not active. " )); \
237
+ return impl.Finish (cbServerContext, exportResult, grpc::Status (grpc::StatusCode::DO_NOT_USE , " " )); \
253
238
}};
254
239
#endif
255
240
@@ -269,18 +254,19 @@ grpc::ServerUnaryReactor* OtlpGrpcForwardProxy::Impl::Finish(grpc::CallbackServe
269
254
}};
270
255
271
256
#if defined(ENABLE_ASYNC_EXPORT)
272
- MAKE_PROXY_ASYNC (MetricExporterProxyAsync, metricExporterStub, MetricsService, ExportMetricsServiceRequest, ExportMetricsServiceResponse, " Async Metric " , metricExporterMode )
273
- MAKE_PROXY_ASYNC(TraceExporterProxyAsync, traceExporterStub, TraceService, ExportTraceServiceRequest, ExportTraceServiceResponse, " Async Trace " , traceExporterMode )
274
- MAKE_PROXY_ASYNC(LogExporterProxyAsync, logExporterStub, LogsService, ExportLogsServiceRequest, ExportLogsServiceResponse, " Async Log " , logExporterMode )
257
+ MAKE_PROXY_ASYNC (MetricExporterProxyAsync, metricExporterStub, MetricsService, ExportMetricsServiceRequest, ExportMetricsServiceResponse, " metric " )
258
+ MAKE_PROXY_ASYNC(TraceExporterProxyAsync, traceExporterStub, TraceService, ExportTraceServiceRequest, ExportTraceServiceResponse, " trace " )
259
+ MAKE_PROXY_ASYNC(LogExporterProxyAsync, logExporterStub, LogsService, ExportLogsServiceRequest, ExportLogsServiceResponse, " log " )
275
260
#endif
276
261
277
- MAKE_PROXY (MetricExporterProxy, metricExporterStub, MetricsService, ExportMetricsServiceRequest, ExportMetricsServiceResponse, " Metric " )
278
- MAKE_PROXY (TraceExporterProxy, traceExporterStub, TraceService, ExportTraceServiceRequest, ExportTraceServiceResponse, " Trace " )
279
- MAKE_PROXY (LogExporterProxy, logExporterStub, LogsService, ExportLogsServiceRequest, ExportLogsServiceResponse, " Log " )
262
+ MAKE_PROXY (MetricExporterProxy, metricExporterStub, MetricsService, ExportMetricsServiceRequest, ExportMetricsServiceResponse, " metric " )
263
+ MAKE_PROXY (TraceExporterProxy, traceExporterStub, TraceService, ExportTraceServiceRequest, ExportTraceServiceResponse, " trace " )
264
+ MAKE_PROXY (LogExporterProxy, logExporterStub, LogsService, ExportLogsServiceRequest, ExportLogsServiceResponse, " log " )
280
265
281
266
OtlpGrpcForwardProxy::OtlpGrpcForwardProxy (const OtlpGrpcClientOptions& options_)
282
267
: impl(std::make_unique<Impl>(options_))
283
268
{
269
+ assert (impl != nullptr );
284
270
}
285
271
286
272
OtlpGrpcForwardProxy::~OtlpGrpcForwardProxy ()
@@ -306,67 +292,58 @@ void OtlpGrpcForwardProxy::AddListenAddress(const std::string& listenAddress)
306
292
impl->serverBuilder .AddListeningPort (listenAddress, grpc::InsecureServerCredentials (), &( pair.port ));
307
293
}
308
294
309
- void OtlpGrpcForwardProxy::RegisterMetricExporter ( ExportMode exportMode )
295
+ void OtlpGrpcForwardProxy::RegisterMetricExporter ( )
310
296
{
311
297
assert (impl != nullptr );
312
298
assert (impl->metricExporterStub == nullptr );
313
299
assert (impl->metricExporterProxy == nullptr );
314
300
impl->metricExporterStub = impl->client ->MakeMetricsServiceStub ();
315
301
#if defined(ENABLE_ASYNC_EXPORT)
316
302
assert (impl->metricExporterProxyAsync == nullptr );
317
- assert (impl->metricExporterMode == ExportMode::Unknown);
318
- if ( exportMode != ExportMode::Sync && impl->clientOptions .max_concurrent_requests > 1 )
303
+ if ( impl->clientOptions .max_concurrent_requests > 1 )
319
304
{
320
- impl->metricExporterMode = exportMode;
321
305
impl->metricExporterProxyAsync = std::make_unique<Impl::MetricExporterProxyAsync>(*impl);
322
306
impl->serverBuilder .RegisterService (impl->metricExporterProxyAsync .get ());
323
307
return ;
324
308
}
325
- impl->metricExporterMode = ExportMode::Sync;
326
309
#endif
327
310
impl->metricExporterProxy = std::make_unique<Impl::MetricExporterProxy>(*impl);
328
311
impl->serverBuilder .RegisterService (impl->metricExporterProxy .get ());
329
312
}
330
313
331
- void OtlpGrpcForwardProxy::RegisterTraceExporter ( ExportMode exportMode )
314
+ void OtlpGrpcForwardProxy::RegisterTraceExporter ( )
332
315
{
333
316
assert (impl != nullptr );
334
317
assert (impl->traceExporterStub == nullptr );
335
318
assert (impl->traceExporterProxy == nullptr );
336
319
impl->traceExporterStub = impl->client ->MakeTraceServiceStub ();
337
320
#if defined(ENABLE_ASYNC_EXPORT)
338
321
assert (impl->traceExporterProxyAsync == nullptr );
339
- assert (impl->traceExporterMode == ExportMode::Unknown);
340
- if ( exportMode != ExportMode::Sync && impl->clientOptions .max_concurrent_requests > 1 )
322
+ if ( impl->clientOptions .max_concurrent_requests > 1 )
341
323
{
342
- impl->traceExporterMode = exportMode;
343
324
impl->traceExporterProxyAsync = std::make_unique<Impl::TraceExporterProxyAsync>(*impl);
344
325
impl->serverBuilder .RegisterService (impl->traceExporterProxyAsync .get ());
345
326
return ;
346
327
}
347
- impl->traceExporterMode = ExportMode::Sync;
348
328
#endif
349
329
impl->traceExporterProxy = std::make_unique<Impl::TraceExporterProxy>(*impl);
350
330
impl->serverBuilder .RegisterService (impl->traceExporterProxy .get ());
351
331
}
352
332
353
- void OtlpGrpcForwardProxy::RegisterLogRecordExporter ( ExportMode exportMode )
333
+ void OtlpGrpcForwardProxy::RegisterLogRecordExporter ( )
354
334
{
355
335
assert (impl != nullptr );
356
336
assert (impl->logExporterStub == nullptr );
357
337
assert (impl->logExporterProxy == nullptr );
358
338
impl->logExporterStub = impl->client ->MakeLogsServiceStub ();
359
339
#if defined(ENABLE_ASYNC_EXPORT)
360
340
assert (impl->logExporterProxyAsync == nullptr );
361
- assert (impl->logExporterMode == ExportMode::Unknown);
362
- if ( exportMode != ExportMode::Sync && impl->clientOptions .max_concurrent_requests > 1 )
341
+ if ( impl->clientOptions .max_concurrent_requests > 1 )
363
342
{
364
- impl->logExporterMode = exportMode;
365
343
impl->logExporterProxyAsync = std::make_unique<Impl::LogExporterProxyAsync>(*impl);
366
344
impl->serverBuilder .RegisterService (impl->logExporterProxyAsync .get ());
367
345
return ;
368
346
}
369
- impl->logExporterMode = ExportMode::Sync;
370
347
#endif
371
348
impl->logExporterProxy = std::make_unique<Impl::LogExporterProxy>(*impl);
372
349
impl->serverBuilder .RegisterService (impl->logExporterProxy .get ());
0 commit comments