Skip to content
This repository was archived by the owner on Dec 23, 2023. It is now read-only.

Commit dab6d6f

Browse files
authored
Exporter/OcAgent: Add deadline option. (#1899)
1 parent 2c844db commit dab6d6f

File tree

5 files changed

+39
-7
lines changed

5 files changed

+39
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Also provide a `MetricServiceStub` option so that advanced users can use a custo
77
Monitoring client to make RPCs.
88
- Use `Configuration` builder pattern for creating `JaegerTraceExporter`, `ZipkinTraceExporter` and
99
`InstanaTraceExporter`. Provide a `Deadline` option with default value 10 seconds.
10-
- Provide a `Deadline` option to Datadog and Elasticsearch exporter. Default value is 10 seconds.
10+
- Provide a `Deadline` option to Datadog, Elasticsearch and OcAgent exporter. Default value is 10 seconds.
1111
- Extract the common timeout logic of Trace exporters to `opencensus-exporter-trace-util`.
1212

1313
## 0.21.0 - 2019-04-30

exporters/trace/ocagent/src/main/java/io/opencensus/exporter/trace/ocagent/OcAgentTraceExporter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,8 @@ public static void createAndRegister(OcAgentTraceExporterConfiguration configura
7979
configuration.getUseInsecure(),
8080
configuration.getSslContext(),
8181
configuration.getRetryInterval(),
82-
configuration.getEnableConfig());
82+
configuration.getEnableConfig(),
83+
configuration.getDeadline());
8384
registerInternal(newHandler);
8485
}
8586
}

exporters/trace/ocagent/src/main/java/io/opencensus/exporter/trace/ocagent/OcAgentTraceExporterConfiguration.java

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public abstract class OcAgentTraceExporterConfiguration {
3636
@VisibleForTesting static final String DEFAULT_END_POINT = "localhost:55678";
3737
@VisibleForTesting static final String DEFAULT_SERVICE_NAME = "OpenCensus";
3838
@VisibleForTesting static final Duration DEFAULT_RETRY_INTERVAL = Duration.create(300, 0);
39+
@VisibleForTesting static final Duration DEFAULT_DEADLINE = Duration.create(10, 0);
3940
@VisibleForTesting static final Duration ZERO = Duration.create(0, 0);
4041

4142
OcAgentTraceExporterConfiguration() {}
@@ -101,6 +102,16 @@ public abstract class OcAgentTraceExporterConfiguration {
101102
*/
102103
public abstract boolean getEnableConfig();
103104

105+
/**
106+
* Returns the deadline for exporting to Agent/Collector.
107+
*
108+
* <p>Default value is 10 seconds.
109+
*
110+
* @return the export deadline.
111+
* @since 0.22
112+
*/
113+
public abstract Duration getDeadline();
114+
104115
/**
105116
* Returns a new {@link Builder}.
106117
*
@@ -113,7 +124,8 @@ public static Builder builder() {
113124
.setServiceName(DEFAULT_SERVICE_NAME)
114125
.setEnableConfig(true)
115126
.setUseInsecure(true)
116-
.setRetryInterval(DEFAULT_RETRY_INTERVAL);
127+
.setRetryInterval(DEFAULT_RETRY_INTERVAL)
128+
.setDeadline(DEFAULT_DEADLINE);
117129
}
118130

119131
/**
@@ -181,19 +193,31 @@ public abstract static class Builder {
181193
*/
182194
public abstract Builder setEnableConfig(boolean enableConfig);
183195

196+
/**
197+
* Sets the deadline for exporting to Agent/Collector.
198+
*
199+
* @param deadline the export deadline.
200+
* @return this
201+
* @since 0.22
202+
*/
203+
public abstract Builder setDeadline(Duration deadline);
204+
184205
// TODO(songya): add an option that controls whether to always keep the RPC connection alive.
185206

186207
abstract Duration getRetryInterval();
187208

188209
abstract OcAgentTraceExporterConfiguration autoBuild();
189210

211+
abstract Duration getDeadline();
212+
190213
/**
191214
* Builds a {@link OcAgentTraceExporterConfiguration}.
192215
*
193216
* @return a {@code OcAgentTraceExporterConfiguration}.
194217
* @since 0.20
195218
*/
196219
public OcAgentTraceExporterConfiguration build() {
220+
Preconditions.checkArgument(getDeadline().compareTo(ZERO) > 0, "Deadline must be positive.");
197221
Preconditions.checkArgument(
198222
getRetryInterval().compareTo(ZERO) > 0, "Retry interval must be positive.");
199223
return autoBuild();

exporters/trace/ocagent/src/main/java/io/opencensus/exporter/trace/ocagent/OcAgentTraceExporterHandler.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,21 @@
2222
import io.grpc.netty.NettyChannelBuilder;
2323
import io.netty.handler.ssl.SslContext;
2424
import io.opencensus.common.Duration;
25+
import io.opencensus.exporter.trace.util.TimeLimitedHandler;
2526
import io.opencensus.proto.agent.common.v1.Node;
2627
import io.opencensus.proto.agent.trace.v1.ExportTraceServiceRequest;
2728
import io.opencensus.proto.agent.trace.v1.TraceServiceGrpc;
2829
import io.opencensus.trace.export.SpanData;
29-
import io.opencensus.trace.export.SpanExporter.Handler;
3030
import java.util.Collection;
3131
import java.util.logging.Logger;
3232
import javax.annotation.Nullable;
3333

3434
/** Exporting handler for OC-Agent Tracing. */
35-
final class OcAgentTraceExporterHandler extends Handler {
35+
final class OcAgentTraceExporterHandler extends TimeLimitedHandler {
3636

3737
private static final Logger logger =
3838
Logger.getLogger(OcAgentTraceExporterHandler.class.getName());
39+
private static final String EXPORT_SPAN_NAME = "ExportOpenCensusProtoSpans";
3940

4041
private final String endPoint;
4142
private final Node node;
@@ -51,15 +52,17 @@ final class OcAgentTraceExporterHandler extends Handler {
5152
boolean useInsecure,
5253
@Nullable SslContext sslContext,
5354
Duration retryInterval,
54-
boolean enableConfig) {
55+
boolean enableConfig,
56+
Duration deadline) {
57+
super(deadline, EXPORT_SPAN_NAME);
5558
this.endPoint = endPoint;
5659
this.node = OcAgentNodeUtils.getNodeInfo(serviceName);
5760
this.useInsecure = useInsecure;
5861
this.sslContext = sslContext;
5962
}
6063

6164
@Override
62-
public void export(Collection<SpanData> spanDataList) {
65+
public void timeLimitedExport(Collection<SpanData> spanDataList) {
6366
if (exportRpcHandler == null || exportRpcHandler.isCompleted()) {
6467
// If not connected, try to initiate a new connection when a new batch of spans arrive.
6568
// Export RPC doesn't respect the retry interval.

exporters/trace/ocagent/src/test/java/io/opencensus/exporter/trace/ocagent/OcAgentTraceExporterConfigurationTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public void defaultConfiguration() {
4343
assertThat(configuration.getRetryInterval())
4444
.isEqualTo(OcAgentTraceExporterConfiguration.DEFAULT_RETRY_INTERVAL);
4545
assertThat(configuration.getEnableConfig()).isTrue();
46+
assertThat(configuration.getDeadline())
47+
.isEqualTo(OcAgentTraceExporterConfiguration.DEFAULT_DEADLINE);
4648
}
4749

4850
@Test
@@ -57,12 +59,14 @@ public void setAndGet() throws SSLException {
5759
.setSslContext(sslContext)
5860
.setRetryInterval(oneMinute)
5961
.setEnableConfig(false)
62+
.setDeadline(oneMinute)
6063
.build();
6164
assertThat(configuration.getEndPoint()).isEqualTo("192.168.0.1:50051");
6265
assertThat(configuration.getServiceName()).isEqualTo("service");
6366
assertThat(configuration.getUseInsecure()).isFalse();
6467
assertThat(configuration.getSslContext()).isEqualTo(sslContext);
6568
assertThat(configuration.getRetryInterval()).isEqualTo(oneMinute);
6669
assertThat(configuration.getEnableConfig()).isFalse();
70+
assertThat(configuration.getDeadline()).isEqualTo(oneMinute);
6771
}
6872
}

0 commit comments

Comments
 (0)