Skip to content

Commit f4168c7

Browse files
breedx-splkMateusz Rzeszutek
andauthored
Prepare v1.14.1 (#859)
* [bugfix] Memory profiler should turn on metrics (#857) * cherry pick #857 and prepare v1.14.1 patch release Co-authored-by: Mateusz Rzeszutek <[email protected]>
1 parent 11c183f commit f4168c7

File tree

7 files changed

+123
-65
lines changed

7 files changed

+123
-65
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@ the [Splunk GDI specification](https://github.com/signalfx/gdi-specification/blo
77
and this repository adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
88

99
## Unreleased
10-
- tbd
10+
11+
## v1.14.1 - 2022-07-27
12+
13+
### Bugfixes
14+
- Metrics are once again enabled when memory profiling is turned on (#857)
1115

1216
## v1.14.0 - 2022-07-22
1317

18+
_This release is superseded by v1.14.1, please use that version._
19+
1420
### Bugfixes
1521
- Exclude transitive gson dependency (mitigates [CVE-2022-25647](https://nvd.nist.gov/vuln/detail/CVE-2022-25647)) (#829)
1622

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ To extend the instrumentation with the OpenTelemetry Instrumentation for Java,
157157
you have to use a compatible API version.
158158

159159
<!-- IMPORTANT: do not change comments or break those lines below -->
160-
The Splunk Distribution of OpenTelemetry Java version <!--SPLUNK_VERSION-->1.14.0<!--SPLUNK_VERSION--> is compatible
160+
The Splunk Distribution of OpenTelemetry Java version <!--SPLUNK_VERSION-->1.14.1<!--SPLUNK_VERSION--> is compatible
161161
with:
162162

163163
* OpenTelemetry API version <!--OTEL_VERSION-->1.15.0<!--OTEL_VERSION-->

custom/src/main/java/com/splunk/opentelemetry/SplunkConfiguration.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,13 @@ public Map<String, String> defaultProperties() {
7070
public Config customize(Config config) {
7171
ConfigBuilder builder = config.toBuilder();
7272

73-
boolean metricsEnabled = config.getBoolean(METRICS_ENABLED_PROPERTY, false);
73+
boolean memoryProfilerEnabled = config.getBoolean(PROFILER_MEMORY_ENABLED_PROPERTY, false);
74+
// memory profiler implies metrics
75+
if (memoryProfilerEnabled) {
76+
builder.addProperty(METRICS_ENABLED_PROPERTY, "true");
77+
}
78+
79+
boolean metricsEnabled = config.getBoolean(METRICS_ENABLED_PROPERTY, memoryProfilerEnabled);
7480
String metricsImplementation = config.getString(METRICS_IMPLEMENTATION);
7581

7682
if (!metricsEnabled || "micrometer".equals(metricsImplementation)) {

custom/src/main/java/com/splunk/opentelemetry/micrometer/SplunkMetricsConfig.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_ENDPOINT_PROPERTY;
2121
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_EXPORT_INTERVAL_PROPERTY;
2222
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_IMPLEMENTATION;
23-
import static com.splunk.opentelemetry.SplunkConfiguration.PROFILER_MEMORY_ENABLED_PROPERTY;
2423
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_ACCESS_TOKEN;
2524
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_REALM_NONE;
2625
import static io.micrometer.core.instrument.config.MeterRegistryConfigValidator.checkAll;
@@ -56,9 +55,8 @@ class SplunkMetricsConfig implements SignalFxConfig {
5655

5756
@Override
5857
public boolean enabled() {
59-
return "micrometer".equals(config.getString(METRICS_IMPLEMENTATION))
60-
&& (config.getBoolean(METRICS_ENABLED_PROPERTY, false)
61-
|| config.getBoolean(PROFILER_MEMORY_ENABLED_PROPERTY, false));
58+
return config.getBoolean(METRICS_ENABLED_PROPERTY, false)
59+
&& "micrometer".equals(config.getString(METRICS_IMPLEMENTATION));
6260
}
6361

6462
@Override

custom/src/test/java/com/splunk/opentelemetry/SplunkConfigurationTest.java

Lines changed: 105 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -16,32 +16,51 @@
1616

1717
package com.splunk.opentelemetry;
1818

19+
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_ENABLED_PROPERTY;
20+
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_IMPLEMENTATION;
1921
import static com.splunk.opentelemetry.SplunkConfiguration.OTEL_EXPORTER_JAEGER_ENDPOINT;
22+
import static com.splunk.opentelemetry.SplunkConfiguration.PROFILER_MEMORY_ENABLED_PROPERTY;
2023
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_REALM_NONE;
2124
import static org.junit.jupiter.api.Assertions.assertEquals;
25+
import static org.junit.jupiter.api.Assertions.assertFalse;
26+
import static org.junit.jupiter.api.Assertions.assertNotEquals;
2227
import static org.junit.jupiter.api.Assertions.assertNull;
28+
import static org.junit.jupiter.api.Assertions.assertTrue;
2329

2430
import io.opentelemetry.instrumentation.api.config.Config;
31+
import io.opentelemetry.instrumentation.api.config.ConfigBuilder;
32+
import java.util.function.Consumer;
2533
import org.junit.jupiter.api.Test;
2634

2735
class SplunkConfigurationTest {
28-
private static final String TEST_REALM = "test0";
36+
2937
private static final String OTLP_ENDPOINT = "otel.exporter.otlp.endpoint";
3038

3139
@Test
32-
void usesRealmIngestUrlsIfRealmDefined() {
33-
assertRealmDefaults(configuration(TEST_REALM));
40+
void usesLocalIngestIfNoRealmIsConfigured() {
41+
Config config = configuration();
42+
43+
assertEquals("http://localhost:9080/v1/trace", config.getString(OTEL_EXPORTER_JAEGER_ENDPOINT));
44+
assertNull(config.getString(OTLP_ENDPOINT));
3445
}
3546

3647
@Test
37-
void usesLocalIngestIfRealmIsNullOrNone() {
38-
assertLocalDefaults(configuration(null));
39-
assertLocalDefaults(configuration(SPLUNK_REALM_NONE));
48+
void usesLocalIngestIfRealmIsNone() {
49+
Config config =
50+
configuration(
51+
builder ->
52+
builder.addProperty(SplunkConfiguration.SPLUNK_REALM_PROPERTY, SPLUNK_REALM_NONE));
53+
54+
assertEquals("http://localhost:9080/v1/trace", config.getString(OTEL_EXPORTER_JAEGER_ENDPOINT));
55+
assertNull(config.getString(OTLP_ENDPOINT));
4056
}
4157

4258
@Test
4359
void realmIsNotHardcoded() {
44-
var config = configuration("test1");
60+
var config =
61+
configuration(
62+
builder -> builder.addProperty(SplunkConfiguration.SPLUNK_REALM_PROPERTY, "test1"));
63+
4564
assertEquals(
4665
"https://ingest.test1.signalfx.com/v2/trace",
4766
config.getString(OTEL_EXPORTER_JAEGER_ENDPOINT));
@@ -50,52 +69,101 @@ void realmIsNotHardcoded() {
5069

5170
@Test
5271
void shouldSetOtlpHeader() {
53-
SplunkConfiguration splunkConfiguration = new SplunkConfiguration();
5472
Config config =
55-
Config.builder()
56-
.addProperties(splunkConfiguration.defaultProperties())
57-
.addProperty(SplunkConfiguration.SPLUNK_ACCESS_TOKEN, "token")
58-
.build();
59-
60-
config = splunkConfiguration.customize(config);
73+
configuration(
74+
builder -> builder.addProperty(SplunkConfiguration.SPLUNK_ACCESS_TOKEN, "token"));
6175

6276
assertEquals("X-SF-TOKEN=token", config.getString("otel.exporter.otlp.headers"));
6377
}
6478

6579
@Test
6680
void shouldAppendToOtlpHeaders() {
67-
SplunkConfiguration splunkConfiguration = new SplunkConfiguration();
6881
Config config =
69-
Config.builder()
70-
.addProperties(splunkConfiguration.defaultProperties())
71-
.addProperty(SplunkConfiguration.SPLUNK_ACCESS_TOKEN, "token")
72-
.addProperty("otel.exporter.otlp.headers", "key=value")
73-
.build();
74-
75-
config = splunkConfiguration.customize(config);
82+
configuration(
83+
builder ->
84+
builder
85+
.addProperty(SplunkConfiguration.SPLUNK_ACCESS_TOKEN, "token")
86+
.addProperty("otel.exporter.otlp.headers", "key=value"));
7687

7788
assertEquals("key=value,X-SF-TOKEN=token", config.getString("otel.exporter.otlp.headers"));
7889
}
7990

80-
private static void assertLocalDefaults(Config config) {
81-
assertEquals("http://localhost:9080/v1/trace", config.getString(OTEL_EXPORTER_JAEGER_ENDPOINT));
82-
assertNull(config.getString(OTLP_ENDPOINT));
91+
@Test
92+
void memoryProfilerEnablesMetrics() {
93+
Config config =
94+
configuration(builder -> builder.addProperty(PROFILER_MEMORY_ENABLED_PROPERTY, "true"));
95+
96+
assertTrue(config.getBoolean(METRICS_ENABLED_PROPERTY, false));
8397
}
8498

85-
private static void assertRealmDefaults(Config config) {
86-
assertEquals(
87-
"https://ingest.test0.signalfx.com/v2/trace",
88-
config.getString(OTEL_EXPORTER_JAEGER_ENDPOINT));
89-
assertEquals("https://ingest.test0.signalfx.com", config.getString(OTLP_ENDPOINT));
99+
@Test
100+
void shouldDisableMetricsByDefault() {
101+
Config config = configuration();
102+
103+
assertFalse(config.getBoolean(METRICS_ENABLED_PROPERTY, false));
104+
assertEquals("none", config.getString("otel.metrics.exporter"));
105+
106+
verifyThatOtelMetricsInstrumentationsAreDisabled(config);
90107
}
91108

92-
private static Config configuration(String realm) {
93-
SplunkConfiguration splunkConfiguration = new SplunkConfiguration();
109+
@Test
110+
void shouldChooseMicrometerAsTheDefaultMetricsImplementation() {
111+
Config config = configuration(builder -> builder.addProperty(METRICS_ENABLED_PROPERTY, "true"));
112+
113+
assertTrue(config.getBoolean(METRICS_ENABLED_PROPERTY, false));
114+
assertEquals("micrometer", config.getString(METRICS_IMPLEMENTATION));
115+
assertEquals("none", config.getString("otel.metrics.exporter"));
116+
117+
verifyThatOtelMetricsInstrumentationsAreDisabled(config);
118+
}
119+
120+
@Test
121+
void shouldDisableMicrometerMetricsIfOtelImplementationIsChosen() {
94122
Config config =
95-
Config.builder()
96-
.addProperties(splunkConfiguration.defaultProperties())
97-
.addProperty(SplunkConfiguration.SPLUNK_REALM_PROPERTY, realm)
98-
.build();
99-
return splunkConfiguration.customize(config);
123+
configuration(
124+
builder ->
125+
builder
126+
.addProperty(METRICS_ENABLED_PROPERTY, "true")
127+
.addProperty(METRICS_IMPLEMENTATION, "opentelemetry"));
128+
129+
assertTrue(config.getBoolean(METRICS_ENABLED_PROPERTY, false));
130+
assertEquals("opentelemetry", config.getString(METRICS_IMPLEMENTATION));
131+
assertNotEquals("none", config.getString("otel.metrics.exporter"));
132+
133+
verifyThatMicrometerInstrumentationsAreDisabled(config);
134+
}
135+
136+
private static Config configuration() {
137+
return configuration(b -> {});
138+
}
139+
140+
private static Config configuration(Consumer<ConfigBuilder> customizer) {
141+
SplunkConfiguration splunkConfiguration = new SplunkConfiguration();
142+
ConfigBuilder configBuilder =
143+
Config.builder().addProperties(splunkConfiguration.defaultProperties());
144+
customizer.accept(configBuilder);
145+
return splunkConfiguration.customize(configBuilder.build());
146+
}
147+
148+
private static void verifyThatOtelMetricsInstrumentationsAreDisabled(Config config) {
149+
assertFalse(config.getBoolean("otel.instrumentation.apache-dbcp.enabled", false));
150+
assertFalse(config.getBoolean("otel.instrumentation.c3p0.enabled", false));
151+
assertFalse(config.getBoolean("otel.instrumentation.hikaricp.enabled", false));
152+
assertFalse(config.getBoolean("otel.instrumentation.micrometer.enabled", false));
153+
assertFalse(config.getBoolean("otel.instrumentation.oracle-ucp.enabled", false));
154+
assertFalse(config.getBoolean("otel.instrumentation.oshi.enabled", false));
155+
assertFalse(config.getBoolean("otel.instrumentation.runtime-metrics.enabled", false));
156+
assertFalse(config.getBoolean("otel.instrumentation.tomcat-jdbc.enabled", false));
157+
assertFalse(config.getBoolean("otel.instrumentation.vibur-dbcp.enabled", false));
158+
}
159+
160+
private static void verifyThatMicrometerInstrumentationsAreDisabled(Config config) {
161+
assertFalse(config.getBoolean("otel.instrumentation.c3p0-splunk.enabled", false));
162+
assertFalse(config.getBoolean("otel.instrumentation.commons-dbcp2-splunk.enabled", false));
163+
assertFalse(config.getBoolean("otel.instrumentation.hikari-splunk.enabled", false));
164+
assertFalse(config.getBoolean("otel.instrumentation.micrometer-splunk.enabled", false));
165+
assertFalse(config.getBoolean("otel.instrumentation.oracle-ucp-splunk.enabled", false));
166+
assertFalse(config.getBoolean("otel.instrumentation.tomcat-jdbc-splunk.enabled", false));
167+
assertFalse(config.getBoolean("otel.instrumentation.vibur-dbcp-splunk.enabled", false));
100168
}
101169
}

custom/src/test/java/com/splunk/opentelemetry/micrometer/SplunkMetricsConfigTest.java

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_ENDPOINT_PROPERTY;
2121
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_EXPORT_INTERVAL_PROPERTY;
2222
import static com.splunk.opentelemetry.SplunkConfiguration.METRICS_IMPLEMENTATION;
23-
import static com.splunk.opentelemetry.SplunkConfiguration.PROFILER_MEMORY_ENABLED_PROPERTY;
2423
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_ACCESS_TOKEN;
2524
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_REALM_NONE;
2625
import static com.splunk.opentelemetry.SplunkConfiguration.SPLUNK_REALM_PROPERTY;
@@ -122,25 +121,6 @@ void emptyEndpointIsNotValid() {
122121
assertFalse(validated.isValid());
123122
}
124123

125-
@Test
126-
void profilerEnablesMetrics() {
127-
var autoConfiguredSdk =
128-
AutoConfiguredOpenTelemetrySdk.builder()
129-
.setResultAsGlobal(false)
130-
.addPropertiesSupplier(
131-
() ->
132-
Map.of(
133-
METRICS_ENABLED_PROPERTY,
134-
"false",
135-
PROFILER_MEMORY_ENABLED_PROPERTY,
136-
"true",
137-
METRICS_IMPLEMENTATION,
138-
"micrometer"))
139-
.build();
140-
var config = new SplunkMetricsConfig(autoConfiguredSdk.getConfig(), Resource.getDefault());
141-
assertTrue(config.enabled());
142-
}
143-
144124
@Test
145125
void usesRealmUrlDefaultIfRealmDefined() {
146126
var autoConfiguredSdk =

deployments/cloudfoundry/buildpack/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ If you want to use a specific version of the Java agent in your application, you
4040
environment variable before application deployment, either using `cf set-env` or the `manifest.yml` file:
4141

4242
```sh
43-
$ cf set-env SPLUNK_OTEL_JAVA_VERSION 1.14.0
43+
$ cf set-env SPLUNK_OTEL_JAVA_VERSION 1.14.1
4444
```
4545

4646
By default, the [latest](https://github.com/signalfx/splunk-otel-java/releases/latest) available agent version is used.

0 commit comments

Comments
 (0)