Skip to content
This repository was archived by the owner on Jul 1, 2022. It is now read-only.

Commit 2527016

Browse files
committed
Fixing RemoteBaggageRestrictionManager NullPointerException on empty response
1 parent c1e73cc commit 2527016

File tree

3 files changed

+44
-8
lines changed

3 files changed

+44
-8
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ local.properties
4949

5050
# IntelliJ
5151
/out/
52+
/jaeger-core/out/
5253

5354
### Intellij Patch ###
5455
# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721

jaeger-core/src/main/java/io/jaegertracing/internal/baggage/RemoteBaggageRestrictionManager.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@ void updateBaggageRestrictions() {
7979
List<BaggageRestrictionResponse> response;
8080
try {
8181
response = proxy.getBaggageRestrictions(serviceName);
82+
if (response == null || response.isEmpty()) {
83+
throw new BaggageRestrictionManagerException("empty restrictions response");
84+
}
8285
} catch (BaggageRestrictionManagerException e) {
8386
metrics.baggageRestrictionsUpdateFailure.inc(1);
8487
return;

jaeger-core/src/test/java/io/jaegertracing/internal/baggage/RemoteBaggageRestrictionManagerTest.java

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ public class RemoteBaggageRestrictionManagerTest {
5151
public void setUp() throws Exception {
5252
metricsFactory = new InMemoryMetricsFactory();
5353
metrics = new Metrics(metricsFactory);
54-
undertest = new RemoteBaggageRestrictionManager.Builder(SERVICE_NAME)
55-
.withProxy(baggageRestrictionProxy)
56-
.withMetrics(metrics)
57-
.withDenyBaggageInitializationFailure(false)
58-
.build();
5954
}
6055

6156
@After
@@ -66,16 +61,53 @@ public void tearDown() {
6661
@Test
6762
public void testUpdateBaggageRestrictions() throws Exception {
6863
when(baggageRestrictionProxy.getBaggageRestrictions(SERVICE_NAME))
69-
.thenReturn(new ArrayList<BaggageRestrictionResponse>(Arrays.asList(RESTRICTION)));
70-
undertest.updateBaggageRestrictions();
64+
.thenReturn(new ArrayList<>(Arrays.asList(RESTRICTION)));
65+
undertest = new RemoteBaggageRestrictionManager.Builder(SERVICE_NAME)
66+
.withProxy(baggageRestrictionProxy)
67+
.withMetrics(metrics)
68+
.withDenyBaggageInitializationFailure(false)
69+
.build();
7170

71+
undertest.updateBaggageRestrictions();
7272
assertEquals(Restriction.of(true, MAX_VALUE_LENGTH), undertest.getRestriction(SERVICE_NAME, BAGGAGE_KEY));
7373
assertFalse(undertest.getRestriction(SERVICE_NAME, "bad-key").isKeyAllowed());
7474
assertTrue(
7575
metricsFactory.getCounter("jaeger_tracer_baggage_restrictions_updates.result=ok",
7676
Collections.emptyMap()) > 0L);
7777
}
7878

79+
@Test
80+
public void testEmptyBaggageRestrictions() throws Exception {
81+
when(baggageRestrictionProxy.getBaggageRestrictions(SERVICE_NAME))
82+
.thenReturn(new ArrayList<>(Arrays.asList(RESTRICTION)))
83+
.thenReturn(null);
84+
undertest = new RemoteBaggageRestrictionManager.Builder(SERVICE_NAME)
85+
.withProxy(baggageRestrictionProxy)
86+
.withMetrics(metrics)
87+
.withDenyBaggageInitializationFailure(false)
88+
.withRefreshIntervalMs(60000)
89+
.withInitialDelayMs(60000)
90+
.build();
91+
92+
// Initialized successfully
93+
undertest.updateBaggageRestrictions();
94+
assertEquals(Restriction.of(true, MAX_VALUE_LENGTH), undertest.getRestriction(SERVICE_NAME, BAGGAGE_KEY));
95+
assertFalse(undertest.getRestriction(SERVICE_NAME, "bad-key").isKeyAllowed());
96+
assertEquals(1L, metricsFactory.getCounter("jaeger_tracer_baggage_restrictions_updates.result=ok",
97+
Collections.emptyMap()));
98+
assertEquals(0L, metricsFactory.getCounter("jaeger_tracer_baggage_restrictions_updates.result=err",
99+
Collections.emptyMap()));
100+
101+
// Empty restrictions response use previously initialized restriction
102+
undertest.updateBaggageRestrictions();
103+
assertEquals(Restriction.of(true, MAX_VALUE_LENGTH), undertest.getRestriction(SERVICE_NAME, BAGGAGE_KEY));
104+
assertFalse(undertest.getRestriction(SERVICE_NAME, "bad-key").isKeyAllowed());
105+
assertEquals(1L, metricsFactory.getCounter("jaeger_tracer_baggage_restrictions_updates.result=ok",
106+
Collections.emptyMap()));
107+
assertEquals(1L, metricsFactory.getCounter("jaeger_tracer_baggage_restrictions_updates.result=err",
108+
Collections.emptyMap()));
109+
}
110+
79111
@Test
80112
public void testAllowBaggageOnInitializationFailure() throws Exception {
81113
when(baggageRestrictionProxy.getBaggageRestrictions(SERVICE_NAME))
@@ -100,7 +132,7 @@ public void testAllowBaggageOnInitializationFailure() throws Exception {
100132
@Test
101133
public void testDenyBaggageOnInitializationFailure() throws Exception {
102134
when(baggageRestrictionProxy.getBaggageRestrictions(SERVICE_NAME))
103-
.thenReturn(new ArrayList<BaggageRestrictionResponse>(Arrays.asList(RESTRICTION)));
135+
.thenReturn(new ArrayList<>(Arrays.asList(RESTRICTION)));
104136
undertest = new RemoteBaggageRestrictionManager.Builder(SERVICE_NAME)
105137
.withProxy(baggageRestrictionProxy)
106138
.withMetrics(metrics)

0 commit comments

Comments
 (0)