Skip to content

Commit 74d7f15

Browse files
authored
Merge pull request #117 from zalando-nakadi/116
#116: create a new trace if none has been started yet during snapshot…
2 parents 463240e + aa8c1ee commit 74d7f15

File tree

9 files changed

+70
-12
lines changed

9 files changed

+70
-12
lines changed

nakadi-producer-spring-boot-starter/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>org.zalando</groupId>
1212
<artifactId>nakadi-producer-reactor</artifactId>
13-
<version>20.1.0</version>
13+
<version>20.2.0</version>
1414
</parent>
1515

1616
<artifactId>nakadi-producer-spring-boot-starter</artifactId>

nakadi-producer-spring-boot-starter/src/main/java/org/zalando/nakadiproducer/NakadiProducerAutoConfiguration.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,14 @@
66
import java.util.List;
77
import java.util.Optional;
88

9+
import lombok.extern.slf4j.Slf4j;
910
import org.springframework.beans.factory.annotation.Autowired;
1011
import org.springframework.beans.factory.annotation.Value;
1112
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
1213
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
1314
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
1415
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
1516
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass;
16-
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
1717
import org.springframework.boot.autoconfigure.flyway.FlywayProperties;
1818
import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties;
1919
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -45,6 +45,7 @@
4545
@AutoConfigureAfter(name="org.zalando.tracer.spring.TracerAutoConfiguration")
4646
@EnableScheduling
4747
@EnableConfigurationProperties({ DataSourceProperties.class, FlywayProperties.class })
48+
@Slf4j
4849
public class NakadiProducerAutoConfiguration {
4950

5051
@ConditionalOnMissingBean({NakadiPublishingClient.class, NakadiClient.class})
@@ -111,8 +112,8 @@ public FlowIdComponent flowIdComponent() {
111112
@Bean
112113
@ConditionalOnMissingBean
113114
public SnapshotEventCreationEndpoint snapshotEventCreationEndpoint(
114-
SnapshotCreationService snapshotCreationService) {
115-
return new SnapshotEventCreationEndpoint(snapshotCreationService);
115+
SnapshotCreationService snapshotCreationService, FlowIdComponent flowIdComponent) {
116+
return new SnapshotEventCreationEndpoint(snapshotCreationService, flowIdComponent);
116117
}
117118

118119
@Bean

nakadi-producer-spring-boot-starter/src/main/java/org/zalando/nakadiproducer/flowid/NoopFlowIdComponent.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@ public class NoopFlowIdComponent implements FlowIdComponent {
77

88
@Override
99
public String getXFlowIdValue() {
10-
log.debug("No bean of class FlowIdComponent was found. Returning null.");
1110
return null;
1211
}
12+
13+
@Override
14+
public void startTraceIfNoneExists() {
15+
}
1316
}

nakadi-producer-spring-boot-starter/src/main/java/org/zalando/nakadiproducer/flowid/TracerFlowIdComponent.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,21 @@ public String getXFlowIdValue() {
3737
}
3838
return null;
3939
}
40+
41+
@Override
42+
public void startTraceIfNoneExists() {
43+
if (tracer != null) {
44+
try {
45+
tracer.get(X_FLOW_ID).getValue();
46+
} catch (IllegalArgumentException e) {
47+
log.warn("No trace was configured for the name {}. Returning null. " +
48+
"To configure Tracer provide an application property: " +
49+
"tracer.traces.X-Flow-ID=flow-id", X_FLOW_ID);
50+
} catch (IllegalStateException e) {
51+
tracer.start();
52+
}
53+
} else {
54+
log.warn("No bean of class Tracer was found.");
55+
}
56+
}
4057
}

nakadi-producer-spring-boot-starter/src/main/java/org/zalando/nakadiproducer/snapshots/impl/SnapshotEventCreationEndpoint.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,16 @@
1010
import lombok.AllArgsConstructor;
1111
import lombok.Getter;
1212
import org.springframework.lang.Nullable;
13+
import org.zalando.nakadiproducer.flowid.FlowIdComponent;
1314

1415
@Endpoint(id = "snapshot-event-creation")
1516
public class SnapshotEventCreationEndpoint {
1617
private final SnapshotCreationService snapshotCreationService;
18+
private final FlowIdComponent flowIdComponent;
1719

18-
public SnapshotEventCreationEndpoint(SnapshotCreationService snapshotCreationService) {
20+
public SnapshotEventCreationEndpoint(SnapshotCreationService snapshotCreationService, FlowIdComponent flowIdComponent) {
1921
this.snapshotCreationService = snapshotCreationService;
22+
this.flowIdComponent = flowIdComponent;
2023
}
2124

2225
@ReadOperation
@@ -31,6 +34,7 @@ public void createFilteredSnapshotEvents(
3134
// Test in the IDE. So let's stick with arg0 for now.
3235
@Selector String arg0,
3336
@Nullable String filter) {
37+
flowIdComponent.startTraceIfNoneExists();
3438
snapshotCreationService.createSnapshotEvents(arg0, filter);
3539
}
3640

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package org.zalando.nakadiproducer.flowid;
22

33
import static org.junit.Assert.assertThat;
4+
import static org.mockito.Mockito.never;
5+
import static org.mockito.Mockito.verify;
6+
import static org.mockito.Mockito.when;
47

58
import org.hamcrest.Matchers;
69
import org.junit.Test;
710
import org.junit.runner.RunWith;
811
import org.mockito.Answers;
912
import org.mockito.Mock;
10-
import org.mockito.Mockito;
11-
import org.mockito.runners.MockitoJUnitRunner;
12-
import org.zalando.nakadiproducer.flowid.TracerFlowIdComponent;
13+
import org.mockito.junit.MockitoJUnitRunner;
1314
import org.zalando.tracer.Tracer;
1415

1516
@RunWith(MockitoJUnitRunner.class)
@@ -21,10 +22,40 @@ public class TracerFlowIdComponentTest {
2122
@Test
2223
public void makeSureItWorks() {
2324
TracerFlowIdComponent flowIdComponent = new TracerFlowIdComponent(tracer);
24-
Mockito.when(tracer.get("X-Flow-ID").getValue()).thenReturn("A_FUNKY_VALUE");
25+
when(tracer.get("X-Flow-ID").getValue()).thenReturn("A_FUNKY_VALUE");
2526

2627
assertThat(flowIdComponent.getXFlowIdKey(), Matchers.equalTo("X-Flow-ID"));
2728
assertThat(flowIdComponent.getXFlowIdValue(), Matchers.equalTo("A_FUNKY_VALUE"));
2829
}
2930

31+
@Test
32+
public void makeSureTraceWillBeStartedIfNoneHasBeenStartedBefore() {
33+
TracerFlowIdComponent flowIdComponent = new TracerFlowIdComponent(tracer);
34+
when(tracer.get("X-Flow-ID").getValue()).thenThrow(new IllegalStateException());
35+
36+
flowIdComponent.startTraceIfNoneExists();
37+
38+
verify(tracer).start();
39+
}
40+
41+
@Test
42+
public void wontFailIfTraceHasNotBeenConfiguredInStartTrace() {
43+
TracerFlowIdComponent flowIdComponent = new TracerFlowIdComponent(tracer);
44+
when(tracer.get("X-Flow-ID")).thenThrow(new IllegalArgumentException());
45+
46+
flowIdComponent.startTraceIfNoneExists();
47+
48+
// then no exception is thrown
49+
}
50+
51+
@Test
52+
public void makeSureTraceWillNotStartedIfOneExists() {
53+
TracerFlowIdComponent flowIdComponent = new TracerFlowIdComponent(tracer);
54+
when(tracer.get("X-Flow-ID").getValue()).thenReturn("A_FUNKY_VALUE");
55+
56+
flowIdComponent.startTraceIfNoneExists();
57+
58+
verify(tracer, never()).start();
59+
}
60+
3061
}

nakadi-producer/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<parent>
1111
<groupId>org.zalando</groupId>
1212
<artifactId>nakadi-producer-reactor</artifactId>
13-
<version>20.1.0</version>
13+
<version>20.2.0</version>
1414
</parent>
1515

1616
<artifactId>nakadi-producer</artifactId>

nakadi-producer/src/main/java/org/zalando/nakadiproducer/flowid/FlowIdComponent.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,6 @@
22

33
public interface FlowIdComponent {
44
String getXFlowIdValue();
5+
6+
void startTraceIfNoneExists();
57
}

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
<artifactId>nakadi-producer-reactor</artifactId>
1717
<groupId>org.zalando</groupId>
18-
<version>20.1.0</version>
18+
<version>20.2.0</version>
1919
<packaging>pom</packaging>
2020
<name>Nakadi Event Producer Reactor</name>
2121

0 commit comments

Comments
 (0)