Skip to content

Commit b90857d

Browse files
Cleanup peerServerless on aws request complete (#7842)
1 parent c5ed024 commit b90857d

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

packages/datadog-plugin-aws-sdk/src/base.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,11 @@ class BaseAwsSdkPlugin extends ClientPlugin {
154154
})
155155

156156
this.finish(ctx)
157+
158+
if (IS_SERVERLESS) {
159+
const peerStore = storage('peerServerless').getStore()
160+
if (peerStore) delete peerStore.peerHostname
161+
}
157162
})
158163

159164
this.addBind(`apm:aws:response:start:${this.serviceIdentifier}`, ctx => {

packages/datadog-plugin-aws-sdk/test/serverless-peer-service.spec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,51 @@ describe('Plugin', () => {
7979
}),
8080
])
8181
})
82+
83+
it('does not leak DynamoDB peer.service to subsequent unrelated HTTP spans', async () => {
84+
const http = require('http')
85+
86+
const server = http.createServer((req, res) => res.end('ok'))
87+
await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve))
88+
const port = server.address().port
89+
90+
try {
91+
const send = toPromise(dynamo, dynamo.putItem)
92+
const allSpans = []
93+
const peerService = 'dynamodb.us-east-1.amazonaws.com'
94+
95+
const tracesPromise = agent.assertSomeTraces(traces => {
96+
allSpans.push(...traces.flat())
97+
assert.ok(allSpans.find(s => s.name === 'aws.request'), 'expected aws.request span')
98+
assert.ok(
99+
allSpans.find(s => s.name === 'http.request' && s.meta['http.url']?.includes('/unrelated')),
100+
'expected unrelated http.request span'
101+
)
102+
}, { timeoutMs: 15000 })
103+
104+
await send({ TableName: tableName, Item: { id: { S: 'leak-test' } } })
105+
106+
await new Promise((resolve, reject) => {
107+
http.get(`http://127.0.0.1:${port}/unrelated`, (res) => {
108+
res.on('data', () => {})
109+
res.on('end', resolve)
110+
}).on('error', reject)
111+
})
112+
113+
await tracesPromise
114+
115+
const unrelatedHttpSpan = allSpans.find(
116+
s => s.name === 'http.request' && s.meta['http.url']?.includes('/unrelated')
117+
)
118+
assert.notStrictEqual(
119+
unrelatedHttpSpan.meta['peer.service'],
120+
peerService,
121+
'unrelated HTTP span should not inherit DynamoDB peer.service'
122+
)
123+
} finally {
124+
server.close()
125+
}
126+
})
82127
})
83128

84129
describe('Kinesis-Serverless', () => {

0 commit comments

Comments
 (0)