Skip to content

Commit 6900b23

Browse files
Respect JAVA_HOME in smartagent receiver (#3877)
1 parent 844545d commit 6900b23

File tree

3 files changed

+43
-13
lines changed

3 files changed

+43
-13
lines changed

CHANGELOG.md

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

33
## Unreleased
44

5+
### 🛑 Breaking changes 🛑
6+
7+
- (Splunk) `smartagent`: Respect `JAVA_HOME` environment variable instead of enforcing bundle-relative value ([#3877](https://github.com/signalfx/splunk-otel-collector/pull/3877))
8+
59
## v0.87.0
610

711
This Splunk OpenTelemetry Collector release includes changes from the [opentelemetry-collector v0.87.0](https://github.com/open-telemetry/opentelemetry-collector/releases/tag/v0.87.0) and the [opentelemetry-collector-contrib v0.87.0](https://github.com/open-telemetry/opentelemetry-collector-contrib/releases/tag/v0.87.0) releases where appropriate.

pkg/receiver/smartagentreceiver/receiver.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,9 @@ func (r *receiver) setUpSmartAgentConfigProvider(extensions map[component.ID]ote
254254

255255
func setUpEnvironment() {
256256
if runtime.GOOS != "windows" { // Agent bundle doesn't include jre for Windows
257-
os.Setenv("JAVA_HOME", filepath.Join(saConfig.BundleDir, "jre"))
257+
if _, ok := os.LookupEnv("JAVA_HOME"); !ok {
258+
os.Setenv("JAVA_HOME", filepath.Join(saConfig.BundleDir, "jre"))
259+
}
258260
}
259261

260262
hostfs.SetEnvMap(common.EnvMap{

pkg/receiver/smartagentreceiver/receiver_test.go

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,16 @@ import (
5151
"github.com/signalfx/splunk-otel-collector/tests/testutils"
5252
)
5353

54-
func cleanUp() {
55-
configureEnvironmentOnce = sync.Once{}
54+
func cleanUp() func() {
55+
jh := "JAVA_HOME"
56+
existing, ok := os.LookupEnv(jh)
57+
os.Unsetenv(jh)
58+
return func() {
59+
configureEnvironmentOnce = sync.Once{}
60+
if ok {
61+
os.Setenv(jh, existing)
62+
}
63+
}
5664
}
5765

5866
func newReceiverCreateSettings(name string) otelcolreceiver.CreateSettings {
@@ -101,7 +109,7 @@ func newConfig(monitorType string, intervalSeconds int) Config {
101109
}
102110

103111
func TestSmartAgentReceiver(t *testing.T) {
104-
t.Cleanup(cleanUp)
112+
t.Cleanup(cleanUp())
105113
cfg := newConfig("cpu", 10)
106114
consumer := new(consumertest.MetricsSink)
107115
receiver := newReceiver(newReceiverCreateSettings("valid"), cfg)
@@ -192,7 +200,7 @@ func TestStripMonitorTypePrefix(t *testing.T) {
192200
}
193201

194202
func TestStartReceiverWithInvalidMonitorConfig(t *testing.T) {
195-
t.Cleanup(cleanUp)
203+
t.Cleanup(cleanUp())
196204
cfg := newConfig("cpu", -123)
197205
receiver := newReceiver(newReceiverCreateSettings("invalid"), cfg)
198206
err := receiver.Start(context.Background(), componenttest.NewNopHost())
@@ -202,7 +210,7 @@ func TestStartReceiverWithInvalidMonitorConfig(t *testing.T) {
202210
}
203211

204212
func TestStartReceiverWithUnknownMonitorType(t *testing.T) {
205-
t.Cleanup(cleanUp)
213+
t.Cleanup(cleanUp())
206214
cfg := newConfig("notamonitortype", 1)
207215
receiver := newReceiver(newReceiverCreateSettings("invalid"), cfg)
208216
err := receiver.Start(context.Background(), componenttest.NewNopHost())
@@ -212,7 +220,7 @@ func TestStartReceiverWithUnknownMonitorType(t *testing.T) {
212220
}
213221

214222
func TestStartAndShutdown(t *testing.T) {
215-
t.Cleanup(cleanUp)
223+
t.Cleanup(cleanUp())
216224
cfg := newConfig("cpu", 1)
217225
receiver := newReceiver(newReceiverCreateSettings("valid"), cfg)
218226
err := receiver.Start(context.Background(), componenttest.NewNopHost())
@@ -223,7 +231,7 @@ func TestStartAndShutdown(t *testing.T) {
223231
}
224232

225233
func TestOutOfOrderShutdownInvocations(t *testing.T) {
226-
t.Cleanup(cleanUp)
234+
t.Cleanup(cleanUp())
227235
cfg := newConfig("cpu", 1)
228236
receiver := newReceiver(newReceiverCreateSettings("valid"), cfg)
229237

@@ -235,7 +243,7 @@ func TestOutOfOrderShutdownInvocations(t *testing.T) {
235243
}
236244

237245
func TestMultipleInstancesOfSameMonitorType(t *testing.T) {
238-
t.Cleanup(cleanUp)
246+
t.Cleanup(cleanUp())
239247
cfg := newConfig("cpu", 1)
240248
fstRcvr := newReceiver(newReceiverCreateSettings("valid"), cfg)
241249

@@ -250,7 +258,7 @@ func TestMultipleInstancesOfSameMonitorType(t *testing.T) {
250258
}
251259

252260
func TestInvalidMonitorStateAtShutdown(t *testing.T) {
253-
t.Cleanup(cleanUp)
261+
t.Cleanup(cleanUp())
254262
cfg := newConfig("cpu", 1)
255263
receiver := newReceiver(newReceiverCreateSettings("valid"), cfg)
256264
receiver.monitor = new(any)
@@ -261,7 +269,7 @@ func TestInvalidMonitorStateAtShutdown(t *testing.T) {
261269
}
262270

263271
func TestConfirmStartingReceiverWithInvalidMonitorInstancesDoesntPanic(t *testing.T) {
264-
t.Cleanup(cleanUp)
272+
t.Cleanup(cleanUp())
265273
tests := []struct {
266274
name string
267275
monitorFactory func() any
@@ -291,7 +299,7 @@ func TestConfirmStartingReceiverWithInvalidMonitorInstancesDoesntPanic(t *testin
291299
}
292300

293301
func TestFilteringNoMetadata(t *testing.T) {
294-
t.Cleanup(cleanUp)
302+
t.Cleanup(cleanUp())
295303
monitors.MonitorFactories["fakemonitor"] = func() any { return struct{}{} }
296304
cfg := newConfig("fakemonitor", 1)
297305
receiver := newReceiver(newReceiverCreateSettings("valid"), cfg)
@@ -300,7 +308,7 @@ func TestFilteringNoMetadata(t *testing.T) {
300308
}
301309

302310
func TestSmartAgentConfigProviderOverrides(t *testing.T) {
303-
t.Cleanup(cleanUp)
311+
t.Cleanup(cleanUp())
304312
cfg := newConfig("cpu", 1)
305313
observedLogger, logs := observer.New(zapcore.WarnLevel)
306314
logger := zap.New(observedLogger)
@@ -355,6 +363,22 @@ func TestSmartAgentConfigProviderOverrides(t *testing.T) {
355363
require.Equal(t, "/etc", hostfs.HostEtc())
356364
}
357365

366+
func TestJavaHomeRespected(t *testing.T) {
367+
if runtime.GOOS == "windows" {
368+
t.Skip("non-windows only")
369+
}
370+
t.Cleanup(cleanUp())
371+
os.Setenv("JAVA_HOME", "/existing/java/home")
372+
cfg := newConfig("cpu", 1)
373+
rcs := newReceiverCreateSettings("valid")
374+
r := newReceiver(rcs, cfg)
375+
376+
require.NoError(t, r.Start(context.Background(), componenttest.NewNopHost()))
377+
require.NoError(t, r.Shutdown(context.Background()))
378+
379+
require.Equal(t, "/existing/java/home", os.Getenv("JAVA_HOME"))
380+
}
381+
358382
func getSmartAgentExtensionConfig(t *testing.T) []*smartagentextension.Config {
359383

360384
cfg, err := confmaptest.LoadConf(path.Join(".", "testdata", "extension_config.yaml"))

0 commit comments

Comments
 (0)