Skip to content

Commit 0a30cbc

Browse files
committed
Switch to single delegate processor
1 parent dd55ab8 commit 0a30cbc

File tree

10 files changed

+150
-333
lines changed

10 files changed

+150
-333
lines changed

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/internal/SeverityBasedLogRecordProcessorComponentProvider.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
1212
import io.opentelemetry.sdk.logs.LogRecordProcessor;
1313
import io.opentelemetry.sdk.logs.SeverityBasedLogRecordProcessor;
14-
import java.util.ArrayList;
15-
import java.util.List;
1614

1715
/**
1816
* ComponentProvider for SeverityBasedLogRecordProcessor to support declarative configuration.
@@ -48,21 +46,15 @@ public LogRecordProcessor create(DeclarativeConfigProperties config) {
4846
throw new IllegalArgumentException("Invalid severity value: " + minimumSeverityStr, e);
4947
}
5048

51-
List<DeclarativeConfigProperties> processorConfigs = config.getStructuredList("processors");
52-
if (processorConfigs == null || processorConfigs.isEmpty()) {
49+
DeclarativeConfigProperties delegateConfig = config.getStructured("delegate");
50+
if (delegateConfig == null) {
5351
throw new IllegalArgumentException(
54-
"At least one processor is required for severity_based log processors");
52+
"delegate is required for severity_based log processors");
5553
}
5654

57-
List<LogRecordProcessor> processors = new ArrayList<>();
58-
for (DeclarativeConfigProperties processorConfig : processorConfigs) {
59-
LogRecordProcessor processor =
60-
DeclarativeConfiguration.createLogRecordProcessor(processorConfig);
61-
processors.add(processor);
62-
}
55+
LogRecordProcessor delegate = DeclarativeConfiguration.createLogRecordProcessor(delegateConfig);
6356

64-
return SeverityBasedLogRecordProcessor.builder(minimumSeverity)
65-
.addProcessors(processors)
57+
return SeverityBasedLogRecordProcessor.builder(minimumSeverity, delegate)
6658
.build();
6759
}
6860
}

sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/internal/TraceBasedLogRecordProcessorComponentProvider.java

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
import io.opentelemetry.sdk.extension.incubator.fileconfig.DeclarativeConfiguration;
1111
import io.opentelemetry.sdk.logs.LogRecordProcessor;
1212
import io.opentelemetry.sdk.logs.TraceBasedLogRecordProcessor;
13-
import java.util.ArrayList;
14-
import java.util.List;
1513

1614
/**
1715
* ComponentProvider for TraceBasedLogRecordProcessor to support declarative configuration.
@@ -34,19 +32,14 @@ public String getName() {
3432

3533
@Override
3634
public LogRecordProcessor create(DeclarativeConfigProperties config) {
37-
List<DeclarativeConfigProperties> processorConfigs = config.getStructuredList("processors");
38-
if (processorConfigs == null || processorConfigs.isEmpty()) {
35+
DeclarativeConfigProperties delegateConfig = config.getStructured("delegate");
36+
if (delegateConfig == null) {
3937
throw new IllegalArgumentException(
40-
"At least one processor is required for trace_based log processors");
38+
"delegate is required for trace_based log processors");
4139
}
4240

43-
List<LogRecordProcessor> processors = new ArrayList<>();
44-
for (DeclarativeConfigProperties processorConfig : processorConfigs) {
45-
LogRecordProcessor processor =
46-
DeclarativeConfiguration.createLogRecordProcessor(processorConfig);
47-
processors.add(processor);
48-
}
41+
LogRecordProcessor delegate = DeclarativeConfiguration.createLogRecordProcessor(delegateConfig);
4942

50-
return TraceBasedLogRecordProcessor.builder().addProcessors(processors).build();
43+
return TraceBasedLogRecordProcessor.builder(delegate).build();
5144
}
5245
}

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/SeverityBasedLogRecordProcessorComponentProviderTest.java

Lines changed: 20 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,10 @@ void createSeverityBasedProcessor_ValidConfig() {
3434
DeclarativeConfigProperties config =
3535
getConfig(
3636
"minimum_severity: \"WARN\"\n"
37-
+ "processors:\n"
38-
+ " - simple:\n"
39-
+ " exporter:\n"
40-
+ " console: {}\n");
37+
+ "delegate:\n"
38+
+ " simple:\n"
39+
+ " exporter:\n"
40+
+ " console: {}\n");
4141

4242
SeverityBasedLogRecordProcessorComponentProvider provider =
4343
new SeverityBasedLogRecordProcessorComponentProvider();
@@ -56,10 +56,10 @@ void createSeverityBasedProcessor_ValidConfig() {
5656
void createSeverityBasedProcessor_MissingMinimumSeverity() {
5757
DeclarativeConfigProperties config =
5858
getConfig(
59-
"processors:\n" // this comment exists only to influence spotless formatting
60-
+ " - simple:\n"
61-
+ " exporter:\n"
62-
+ " console: {}\n");
59+
"delegate:\n" // this comment exists only to influence spotless formatting
60+
+ " simple:\n"
61+
+ " exporter:\n"
62+
+ " console: {}\n");
6363

6464
SeverityBasedLogRecordProcessorComponentProvider provider =
6565
new SeverityBasedLogRecordProcessorComponentProvider();
@@ -75,10 +75,10 @@ void createSeverityBasedProcessor_InvalidSeverity() {
7575
DeclarativeConfigProperties config =
7676
getConfig(
7777
"minimum_severity: \"INVALID\"\n"
78-
+ "processors:\n"
79-
+ " - simple:\n"
80-
+ " exporter:\n"
81-
+ " console: {}\n");
78+
+ "delegate:\n"
79+
+ " simple:\n"
80+
+ " exporter:\n"
81+
+ " console: {}\n");
8282

8383
SeverityBasedLogRecordProcessorComponentProvider provider =
8484
new SeverityBasedLogRecordProcessorComponentProvider();
@@ -89,41 +89,26 @@ void createSeverityBasedProcessor_InvalidSeverity() {
8989
}
9090

9191
@Test
92-
void createSeverityBasedProcessor_MissingProcessors() {
93-
DeclarativeConfigProperties config = getConfig("");
92+
void createSeverityBasedProcessor_MissingDelegate() {
93+
DeclarativeConfigProperties config = getConfig("minimum_severity: \"WARN\"\n");
9494

9595
SeverityBasedLogRecordProcessorComponentProvider provider =
9696
new SeverityBasedLogRecordProcessorComponentProvider();
9797

9898
assertThatThrownBy(() -> provider.create(config))
9999
.isInstanceOf(IllegalArgumentException.class)
100-
.hasMessage("minimum_severity is required for severity_based log processors");
101-
}
102-
103-
@Test
104-
void createSeverityBasedProcessor_EmptyProcessors() {
105-
DeclarativeConfigProperties config = getConfig("minimum_severity: \"WARN\"\nprocessors: []\n");
106-
107-
SeverityBasedLogRecordProcessorComponentProvider provider =
108-
new SeverityBasedLogRecordProcessorComponentProvider();
109-
110-
assertThatThrownBy(() -> provider.create(config))
111-
.isInstanceOf(IllegalArgumentException.class)
112-
.hasMessage("At least one processor is required for severity_based log processors");
100+
.hasMessage("delegate is required for severity_based log processors");
113101
}
114102

115103
@Test
116-
void createSeverityBasedProcessor_MultipleProcessors() {
104+
void createSeverityBasedProcessor_SingleDelegate() {
117105
DeclarativeConfigProperties config =
118106
getConfig(
119107
"minimum_severity: \"INFO\"\n"
120-
+ "processors:\n"
121-
+ " - simple:\n"
122-
+ " exporter:\n"
123-
+ " console: {}\n"
124-
+ " - simple:\n"
125-
+ " exporter:\n"
126-
+ " console: {}\n");
108+
+ "delegate:\n"
109+
+ " simple:\n"
110+
+ " exporter:\n"
111+
+ " console: {}\n");
127112

128113
SeverityBasedLogRecordProcessorComponentProvider provider =
129114
new SeverityBasedLogRecordProcessorComponentProvider();

sdk-extensions/incubator/src/test/java/io/opentelemetry/sdk/extension/incubator/fileconfig/TraceBasedLogRecordProcessorComponentProviderTest.java

Lines changed: 11 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,10 @@ void createTraceBasedProcessor_DirectComponentProvider() {
3333
void createTraceBasedProcessor_ValidConfig() {
3434
DeclarativeConfigProperties config =
3535
getConfig(
36-
"processors:\n" // this comment exists only to influence spotless formatting
37-
+ " - simple:\n"
38-
+ " exporter:\n"
39-
+ " console: {}\n");
36+
"delegate:\n" // this comment exists only to influence spotless formatting
37+
+ " simple:\n"
38+
+ " exporter:\n"
39+
+ " console: {}\n");
4040

4141
TraceBasedLogRecordProcessorComponentProvider provider =
4242
new TraceBasedLogRecordProcessorComponentProvider();
@@ -52,40 +52,25 @@ void createTraceBasedProcessor_ValidConfig() {
5252
}
5353

5454
@Test
55-
void createTraceBasedProcessor_MissingProcessors() {
55+
void createTraceBasedProcessor_MissingDelegate() {
5656
DeclarativeConfigProperties config = getConfig("");
5757

5858
TraceBasedLogRecordProcessorComponentProvider provider =
5959
new TraceBasedLogRecordProcessorComponentProvider();
6060

6161
assertThatThrownBy(() -> provider.create(config))
6262
.isInstanceOf(IllegalArgumentException.class)
63-
.hasMessage("At least one processor is required for trace_based log processors");
63+
.hasMessage("delegate is required for trace_based log processors");
6464
}
6565

6666
@Test
67-
void createTraceBasedProcessor_EmptyProcessors() {
68-
DeclarativeConfigProperties config = getConfig("processors: []\n");
69-
70-
TraceBasedLogRecordProcessorComponentProvider provider =
71-
new TraceBasedLogRecordProcessorComponentProvider();
72-
73-
assertThatThrownBy(() -> provider.create(config))
74-
.isInstanceOf(IllegalArgumentException.class)
75-
.hasMessage("At least one processor is required for trace_based log processors");
76-
}
77-
78-
@Test
79-
void createTraceBasedProcessor_MultipleProcessors() {
67+
void createTraceBasedProcessor_SingleDelegate() {
8068
DeclarativeConfigProperties config =
8169
getConfig(
82-
"processors:\n"
83-
+ " - simple:\n"
84-
+ " exporter:\n"
85-
+ " console: {}\n"
86-
+ " - simple:\n"
87-
+ " exporter:\n"
88-
+ " console: {}\n");
70+
"delegate:\n"
71+
+ " simple:\n"
72+
+ " exporter:\n"
73+
+ " console: {}\n");
8974

9075
TraceBasedLogRecordProcessorComponentProvider provider =
9176
new TraceBasedLogRecordProcessorComponentProvider();

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SeverityBasedLogRecordProcessor.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import io.opentelemetry.api.logs.Severity;
1111
import io.opentelemetry.context.Context;
1212
import io.opentelemetry.sdk.common.CompletableResultCode;
13-
import java.util.List;
1413

1514
/**
1615
* Implementation of {@link LogRecordProcessor} that filters log records based on minimum severity
@@ -23,21 +22,21 @@ public final class SeverityBasedLogRecordProcessor implements LogRecordProcessor
2322
private final Severity minimumSeverity;
2423
private final LogRecordProcessor delegate;
2524

26-
SeverityBasedLogRecordProcessor(Severity minimumSeverity, List<LogRecordProcessor> processors) {
25+
SeverityBasedLogRecordProcessor(Severity minimumSeverity, LogRecordProcessor delegate) {
2726
this.minimumSeverity = requireNonNull(minimumSeverity, "minimumSeverity");
28-
requireNonNull(processors, "processors");
29-
this.delegate = LogRecordProcessor.composite(processors);
27+
this.delegate = requireNonNull(delegate, "delegate");
3028
}
3129

3230
/**
3331
* Returns a new {@link SeverityBasedLogRecordProcessorBuilder} to construct a {@link
3432
* SeverityBasedLogRecordProcessor}.
3533
*
3634
* @param minimumSeverity the minimum severity level required for processing
35+
* @param delegate the processor to delegate to
3736
* @return a new {@link SeverityBasedLogRecordProcessorBuilder}
3837
*/
39-
public static SeverityBasedLogRecordProcessorBuilder builder(Severity minimumSeverity) {
40-
return new SeverityBasedLogRecordProcessorBuilder(minimumSeverity);
38+
public static SeverityBasedLogRecordProcessorBuilder builder(Severity minimumSeverity, LogRecordProcessor delegate) {
39+
return new SeverityBasedLogRecordProcessorBuilder(minimumSeverity, delegate);
4140
}
4241

4342
@Override

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/SeverityBasedLogRecordProcessorBuilder.java

Lines changed: 4 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -8,59 +8,24 @@
88
import static java.util.Objects.requireNonNull;
99

1010
import io.opentelemetry.api.logs.Severity;
11-
import java.util.ArrayList;
12-
import java.util.Arrays;
13-
import java.util.List;
1411

1512
/** Builder class for {@link SeverityBasedLogRecordProcessor}. */
1613
public final class SeverityBasedLogRecordProcessorBuilder {
1714

1815
private final Severity minimumSeverity;
19-
private final List<LogRecordProcessor> processors = new ArrayList<>();
16+
private final LogRecordProcessor delegate;
2017

21-
SeverityBasedLogRecordProcessorBuilder(Severity minimumSeverity) {
18+
SeverityBasedLogRecordProcessorBuilder(Severity minimumSeverity, LogRecordProcessor delegate) {
2219
this.minimumSeverity = requireNonNull(minimumSeverity, "minimumSeverity");
23-
}
24-
25-
/**
26-
* Adds multiple {@link LogRecordProcessor}s to the list of downstream processors.
27-
*
28-
* @param processors the processors to add
29-
* @return this builder
30-
*/
31-
public SeverityBasedLogRecordProcessorBuilder addProcessors(LogRecordProcessor... processors) {
32-
requireNonNull(processors, "processors");
33-
addProcessors(Arrays.asList(processors));
34-
return this;
35-
}
36-
37-
/**
38-
* Adds multiple {@link LogRecordProcessor}s to the list of downstream processors.
39-
*
40-
* @param processors the processors to add
41-
* @return this builder
42-
*/
43-
public SeverityBasedLogRecordProcessorBuilder addProcessors(
44-
Iterable<LogRecordProcessor> processors) {
45-
46-
requireNonNull(processors, "processors");
47-
for (LogRecordProcessor processor : processors) {
48-
requireNonNull(processor, "processor");
49-
this.processors.add(processor);
50-
}
51-
return this;
20+
this.delegate = requireNonNull(delegate, "delegate");
5221
}
5322

5423
/**
5524
* Returns a new {@link SeverityBasedLogRecordProcessor} with the configuration of this builder.
5625
*
5726
* @return a new {@link SeverityBasedLogRecordProcessor}
58-
* @throws IllegalArgumentException if no processors have been added
5927
*/
6028
public SeverityBasedLogRecordProcessor build() {
61-
if (processors.isEmpty()) {
62-
throw new IllegalArgumentException("At least one processor must be added");
63-
}
64-
return new SeverityBasedLogRecordProcessor(minimumSeverity, processors);
29+
return new SeverityBasedLogRecordProcessor(minimumSeverity, delegate);
6530
}
6631
}

sdk/logs/src/main/java/io/opentelemetry/sdk/logs/TraceBasedLogRecordProcessor.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99

1010
import io.opentelemetry.context.Context;
1111
import io.opentelemetry.sdk.common.CompletableResultCode;
12-
import java.util.List;
1312

1413
/**
1514
* A {@link LogRecordProcessor} that filters out log records associated with
@@ -21,19 +20,19 @@ public final class TraceBasedLogRecordProcessor implements LogRecordProcessor {
2120

2221
private final LogRecordProcessor delegate;
2322

24-
TraceBasedLogRecordProcessor(List<LogRecordProcessor> processors) {
25-
requireNonNull(processors, "processors");
26-
this.delegate = LogRecordProcessor.composite(processors);
23+
TraceBasedLogRecordProcessor(LogRecordProcessor delegate) {
24+
this.delegate = requireNonNull(delegate, "delegate");
2725
}
2826

2927
/**
3028
* Returns a new {@link TraceBasedLogRecordProcessorBuilder} to construct a {@link
3129
* TraceBasedLogRecordProcessor}.
3230
*
31+
* @param delegate the processor to delegate to
3332
* @return a new {@link TraceBasedLogRecordProcessorBuilder}
3433
*/
35-
public static TraceBasedLogRecordProcessorBuilder builder() {
36-
return new TraceBasedLogRecordProcessorBuilder();
34+
public static TraceBasedLogRecordProcessorBuilder builder(LogRecordProcessor delegate) {
35+
return new TraceBasedLogRecordProcessorBuilder(delegate);
3736
}
3837

3938
@Override

0 commit comments

Comments
 (0)