From b0028aebf027401d0ae8ce72bdda5e02dadd1871 Mon Sep 17 00:00:00 2001 From: rochdev Date: Wed, 1 Jun 2022 18:52:46 -0400 Subject: [PATCH 1/2] fix aws-sdk complete event running in wrong async context --- docker-compose.yml | 3 --- .../datadog-instrumentations/src/aws-sdk.js | 9 ++++--- .../test/aws-sdk.spec.js | 26 +++++++++---------- .../test/lambda.spec.js | 2 +- .../datadog-plugin-aws-sdk/test/sqs.spec.js | 8 +++--- .../test/setup/services/localstack.js | 16 ++++++------ 6 files changed, 30 insertions(+), 34 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 47554f33612..e53194ea8a7 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -109,9 +109,6 @@ services: - FORCE_NONINTERACTIVE=true - START_WEB=0 - LAMBDA_EXECUTOR=local - - DEBUG=true - volumes: - - "/var/run/docker.sock:/var/run/docker.sock" kafka: image: debezium/kafka:1.7 ports: diff --git a/packages/datadog-instrumentations/src/aws-sdk.js b/packages/datadog-instrumentations/src/aws-sdk.js index 65680b449f2..b933a1e3599 100644 --- a/packages/datadog-instrumentations/src/aws-sdk.js +++ b/packages/datadog-instrumentations/src/aws-sdk.js @@ -15,13 +15,14 @@ function wrapRequest (send) { const channelSuffix = getChannelSuffix(serviceIdentifier) const startCh = channel(`apm:aws:request:start:${channelSuffix}`) if (!startCh.hasSubscribers) return send.apply(this, arguments) + const innerAr = new AsyncResource('apm:aws:request:inner') const outerAr = new AsyncResource('apm:aws:request:outer') - this.on('complete', response => { - channel(`apm:aws:request:complete:${channelSuffix}`).publish({ response }) - }) + return innerAr.runInAsyncScope(() => { + this.on('complete', innerAr.bind(response => { + channel(`apm:aws:request:complete:${channelSuffix}`).publish({ response }) + })) - return new AsyncResource('apm:aws:request:inner').runInAsyncScope(() => { startCh.publish({ serviceIdentifier, operation: this.operation, diff --git a/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js b/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js index aecc1daeba4..f0c248cdeac 100644 --- a/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js @@ -20,12 +20,12 @@ describe('Plugin', () => { before(() => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - const endpoint = new AWS.Endpoint('http://localhost:4572') + const endpoint = new AWS.Endpoint('http://127.0.0.1:4572') s3 = new AWS.S3({ endpoint, s3ForcePathStyle: true }) tracer = require('../../dd-trace') - return agent.load('aws-sdk') + return agent.load(['aws-sdk', 'http'], [{}, { server: false }]) }) after(() => { @@ -129,25 +129,23 @@ describe('Plugin', () => { before(() => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - const endpoint = new AWS.Endpoint('http://localhost:5000') + const endpoint = new AWS.Endpoint('http://127.0.0.1:5000') s3 = new AWS.S3({ endpoint, s3ForcePathStyle: true }) tracer = require('../../dd-trace') - return agent.load('aws-sdk', { + return agent.load(['aws-sdk', 'http'], [{ service: 'test', splitByAwsService: false, hooks: { request (span, response) { span.setTag('hook.operation', response.request.operation) - if (response.error.code === 'NetworkingError' || response.error.code === 'UnknownEndpoint') { - span.addTags({ - 'error': 0 - }) - } + span.addTags({ + 'error': 0 + }) } } - }) + }, { server: false }]) }) after(() => { @@ -176,14 +174,14 @@ describe('Plugin', () => { before(() => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - s3 = new AWS.S3({ endpoint: new AWS.Endpoint('http://localhost:4572'), s3ForcePathStyle: true }) - sqs = new AWS.SQS({ endpoint: new AWS.Endpoint('http://localhost:4576') }) + s3 = new AWS.S3({ endpoint: new AWS.Endpoint('http://127.0.0.1:4572'), s3ForcePathStyle: true }) + sqs = new AWS.SQS({ endpoint: new AWS.Endpoint('http://127.0.0.1:4576') }) tracer = require('../../dd-trace') - return agent.load('aws-sdk', { + return agent.load(['aws-sdk', 'http'], [{ service: 'test', s3: false - }) + }, { server: false }]) }) after(() => { diff --git a/packages/datadog-plugin-aws-sdk/test/lambda.spec.js b/packages/datadog-plugin-aws-sdk/test/lambda.spec.js index a317e03aee1..6a47529d3d3 100644 --- a/packages/datadog-plugin-aws-sdk/test/lambda.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/lambda.spec.js @@ -30,7 +30,7 @@ describe('Plugin', () => { before(done => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - const lambdaEndpoint = new AWS.Endpoint('http://localhost:4566') + const lambdaEndpoint = new AWS.Endpoint('http://127.0.0.1:4566') lambda = new AWS.Lambda({ endpoint: lambdaEndpoint, region: 'us-east-1' }) lambda.createFunction({ diff --git a/packages/datadog-plugin-aws-sdk/test/sqs.spec.js b/packages/datadog-plugin-aws-sdk/test/sqs.spec.js index c2cff8def92..57a91bf45b2 100644 --- a/packages/datadog-plugin-aws-sdk/test/sqs.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/sqs.spec.js @@ -30,7 +30,7 @@ describe('Plugin', () => { before(done => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - const endpoint = new AWS.Endpoint('http://localhost:4576') + const endpoint = new AWS.Endpoint('http://127.0.0.1:4576') sqs = new AWS.SQS({ endpoint, region: 'us-east-1' }) sqs.createQueue(queueOptions, (err, res) => { @@ -152,7 +152,7 @@ describe('Plugin', () => { before(done => { AWS = require(`../../../versions/aws-sdk@${version}`).get() - const endpoint = new AWS.Endpoint('http://localhost:4576') + const endpoint = new AWS.Endpoint('http://127.0.0.1:4576') sqs = new AWS.SQS({ endpoint, region: 'us-east-1' }) sqs.createQueue(queueOptions, (err, res) => { @@ -180,7 +180,7 @@ describe('Plugin', () => { expect(span).to.include({ name: 'aws.request', - resource: 'sendMessage http://localhost:4576/queue/SQS_QUEUE_NAME' + resource: 'sendMessage http://127.0.0.1:4576/queue/SQS_QUEUE_NAME' }) total++ @@ -191,7 +191,7 @@ describe('Plugin', () => { expect(span).to.include({ name: 'aws.request', - resource: 'receiveMessage http://localhost:4576/queue/SQS_QUEUE_NAME' + resource: 'receiveMessage http://127.0.0.1:4576/queue/SQS_QUEUE_NAME' }) total++ diff --git a/packages/dd-trace/test/setup/services/localstack.js b/packages/dd-trace/test/setup/services/localstack.js index 83bc8cff481..114c079b09e 100644 --- a/packages/dd-trace/test/setup/services/localstack.js +++ b/packages/dd-trace/test/setup/services/localstack.js @@ -14,14 +14,14 @@ function waitForAWS () { // Set the region AWS.config.update({ region: 'us-east-1' }) - const ddbEndpoint = new AWS.Endpoint('http://localhost:4569') - const kinesisEndpoint = new AWS.Endpoint('http://localhost:4568') - const s3Endpoint = new AWS.Endpoint('http://localhost:4572') - const sqsEndpoint = new AWS.Endpoint('http://localhost:4576') - const snsEndpoint = new AWS.Endpoint('http://localhost:4575') - const route53Endpoint = new AWS.Endpoint('http://localhost:4580') - const redshiftEndpoint = new AWS.Endpoint('http://localhost:4577') - const lambdaEndpoint = new AWS.Endpoint('http://localhost:4566') + const ddbEndpoint = new AWS.Endpoint('http://127.0.0.1:4569') + const kinesisEndpoint = new AWS.Endpoint('http://127.0.0.1:4568') + const s3Endpoint = new AWS.Endpoint('http://127.0.0.1:4572') + const sqsEndpoint = new AWS.Endpoint('http://127.0.0.1:4576') + const snsEndpoint = new AWS.Endpoint('http://127.0.0.1:4575') + const route53Endpoint = new AWS.Endpoint('http://127.0.0.1:4580') + const redshiftEndpoint = new AWS.Endpoint('http://127.0.0.1:4577') + const lambdaEndpoint = new AWS.Endpoint('http://127.0.0.1:4566') const ddb = new AWS.DynamoDB({ endpoint: ddbEndpoint }) const kinesis = new AWS.Kinesis({ endpoint: kinesisEndpoint }) From 30d8c49d0ea5d7115cb679e6daf88ca40309cb05 Mon Sep 17 00:00:00 2001 From: rochdev Date: Wed, 1 Jun 2022 21:06:50 -0400 Subject: [PATCH 2/2] fix tests --- .../test/aws-sdk.spec.js | 34 +++++++++++-------- .../datadog-plugin-aws-sdk/test/sqs.spec.js | 4 +-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js b/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js index f0c248cdeac..43a8667b8a1 100644 --- a/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/aws-sdk.spec.js @@ -17,6 +17,10 @@ describe('Plugin', () => { let tracer describe('without configuration', () => { + before(() => { + return agent.load(['aws-sdk', 'http'], [{}, { server: false }]) + }) + before(() => { AWS = require(`../../../versions/aws-sdk@${version}`).get() @@ -24,8 +28,6 @@ describe('Plugin', () => { s3 = new AWS.S3({ endpoint, s3ForcePathStyle: true }) tracer = require('../../dd-trace') - - return agent.load(['aws-sdk', 'http'], [{}, { server: false }]) }) after(() => { @@ -127,13 +129,6 @@ describe('Plugin', () => { describe('with configuration', () => { before(() => { - AWS = require(`../../../versions/aws-sdk@${version}`).get() - - const endpoint = new AWS.Endpoint('http://127.0.0.1:5000') - - s3 = new AWS.S3({ endpoint, s3ForcePathStyle: true }) - tracer = require('../../dd-trace') - return agent.load(['aws-sdk', 'http'], [{ service: 'test', splitByAwsService: false, @@ -148,6 +143,15 @@ describe('Plugin', () => { }, { server: false }]) }) + before(() => { + AWS = require(`../../../versions/aws-sdk@${version}`).get() + + const endpoint = new AWS.Endpoint('http://127.0.0.1:5000') + + s3 = new AWS.S3({ endpoint, s3ForcePathStyle: true }) + tracer = require('../../dd-trace') + }) + after(() => { return agent.close({ ritmReset: false }) }) @@ -171,17 +175,19 @@ describe('Plugin', () => { }) describe('with service configuration', () => { + before(() => { + return agent.load(['aws-sdk', 'http'], [{ + service: 'test', + s3: false + }, { server: false }]) + }) + before(() => { AWS = require(`../../../versions/aws-sdk@${version}`).get() s3 = new AWS.S3({ endpoint: new AWS.Endpoint('http://127.0.0.1:4572'), s3ForcePathStyle: true }) sqs = new AWS.SQS({ endpoint: new AWS.Endpoint('http://127.0.0.1:4576') }) tracer = require('../../dd-trace') - - return agent.load(['aws-sdk', 'http'], [{ - service: 'test', - s3: false - }, { server: false }]) }) after(() => { diff --git a/packages/datadog-plugin-aws-sdk/test/sqs.spec.js b/packages/datadog-plugin-aws-sdk/test/sqs.spec.js index 57a91bf45b2..17136ccc6ce 100644 --- a/packages/datadog-plugin-aws-sdk/test/sqs.spec.js +++ b/packages/datadog-plugin-aws-sdk/test/sqs.spec.js @@ -180,7 +180,7 @@ describe('Plugin', () => { expect(span).to.include({ name: 'aws.request', - resource: 'sendMessage http://127.0.0.1:4576/queue/SQS_QUEUE_NAME' + resource: 'sendMessage http://localhost:4576/queue/SQS_QUEUE_NAME' }) total++ @@ -191,7 +191,7 @@ describe('Plugin', () => { expect(span).to.include({ name: 'aws.request', - resource: 'receiveMessage http://127.0.0.1:4576/queue/SQS_QUEUE_NAME' + resource: 'receiveMessage http://localhost:4576/queue/SQS_QUEUE_NAME' }) total++