Skip to content

Commit fc1ba06

Browse files
authored
Disable X-Ray telemetry safely (#18)
1 parent 5fbd26b commit fc1ba06

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

cmd/localstack/xraydaemon.go

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ type Daemon struct {
4747
receiverCount int
4848
processorCount int
4949
receiveBufferSize int
50+
enableTelemetry bool
5051

5152
// Boolean channel, set to true if error is received reading from Socket.
5253
done chan bool
@@ -134,7 +135,12 @@ func initDaemon(config *cfg.Config, enableTelemetry bool) *Daemon {
134135
log.Infof("Using region: %v", aws.StringValue(awsConfig.Region))
135136

136137
if enableTelemetry {
138+
// Telemetry can be quite verbose, for example 10+ PutTelemetryRecords requests for a single invocation
137139
telemetry.Init(awsConfig, session, config.ResourceARN, noMetadata)
140+
} else {
141+
// Telemetry cannot be nil because it is used internally in the X-Ray daemon, for example in batchprocessor.go
142+
// We assume that SegmentReceived is never invoked internally in X-Ray because it enables postTelemetry.
143+
telemetry.T = telemetry.GetTestTelemetry()
138144
}
139145

140146
// If calculated number of buffer is lower than our default, use calculated one. Otherwise, use default value.
@@ -152,6 +158,7 @@ func initDaemon(config *cfg.Config, enableTelemetry bool) *Daemon {
152158
receiverCount: parameterConfig.ReceiverRoutines,
153159
processorCount: processorCount,
154160
receiveBufferSize: receiveBufferSize,
161+
enableTelemetry: enableTelemetry,
155162
done: make(chan bool),
156163
std: std,
157164
pool: bufferPool,
@@ -180,12 +187,12 @@ func (d *Daemon) close() {
180187
// Signal routines to finish
181188
// This will push telemetry and customer segments in parallel
182189
d.std.Close()
183-
if telemetry.T != nil {
190+
if d.enableTelemetry {
184191
telemetry.T.Quit <- true
185192
}
186193

187194
<-d.processor.Done
188-
if telemetry.T != nil {
195+
if d.enableTelemetry {
189196
<-telemetry.T.Done
190197
}
191198

@@ -231,7 +238,7 @@ func (d *Daemon) poll() {
231238
fallbackPointerUsed = true
232239
}
233240
rlen := d.read(bufPointer)
234-
if rlen > 0 && telemetry.T != nil {
241+
if rlen > 0 && d.enableTelemetry {
235242
telemetry.T.SegmentReceived(1)
236243
}
237244
if rlen == 0 {
@@ -242,7 +249,7 @@ func (d *Daemon) poll() {
242249
}
243250
if fallbackPointerUsed {
244251
log.Warn("Segment dropped. Consider increasing memory limit")
245-
if telemetry.T != nil {
252+
if d.enableTelemetry {
246253
telemetry.T.SegmentSpillover(1)
247254
}
248255
continue
@@ -257,7 +264,7 @@ func (d *Daemon) poll() {
257264
if len(slices[1]) == 0 {
258265
log.Warnf("Missing header or segment: %s", string(slices[0]))
259266
d.pool.Return(bufPointer)
260-
if telemetry.T != nil {
267+
if d.enableTelemetry {
261268
telemetry.T.SegmentRejected(1)
262269
}
263270
continue
@@ -273,7 +280,7 @@ func (d *Daemon) poll() {
273280
default:
274281
log.Warnf("Invalid header: %s", string(header))
275282
d.pool.Return(bufPointer)
276-
if telemetry.T != nil {
283+
if d.enableTelemetry {
277284
telemetry.T.SegmentRejected(1)
278285
}
279286
continue

0 commit comments

Comments
 (0)