From 1c719f3c7721f7fc0edfee6d993eef0525833be0 Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Fri, 1 Apr 2022 14:22:00 -0500 Subject: [PATCH 1/6] fix(otlp-http-exporter): remove content length header Signed-off-by: Svetlana Brennan --- .../packages/exporter-trace-otlp-http/src/platform/node/util.ts | 1 + .../test/node/CollectorTraceExporter.test.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts index bfeddcb61c..40ccc1844e 100644 --- a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts +++ b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts @@ -88,6 +88,7 @@ export function sendWithHttp( gzip = zlib.createGzip(); } req.setHeader('Content-Encoding', 'gzip'); + req.removeHeader('Content-Length'); const dataStream = readableFromBuffer(data); dataStream.on('error', onError) .pipe(gzip).on('error', onError) diff --git a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts index e01ff2980c..2850d008f8 100644 --- a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts +++ b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts @@ -287,6 +287,7 @@ describe('OTLPTraceExporter - node with json over http', () => { stubRequest = sinon.stub(http, 'request').returns(fakeRequest as any); spySetHeader = sinon.spy(); (fakeRequest as any).setHeader = spySetHeader; + (fakeRequest as any).removeHeader = sinon.spy(); collectorExporterConfig = { headers: { foo: 'bar', From 4d3cb972b9bc1349f1cf24387227bcfed2e19188 Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Mon, 4 Apr 2022 15:52:34 -0500 Subject: [PATCH 2/6] fix(otlp-http-exporter): add content length only in non compressed case Signed-off-by: Svetlana Brennan --- .../exporter-trace-otlp-http/src/platform/node/util.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts index 40ccc1844e..92503c8560 100644 --- a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts +++ b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts @@ -50,7 +50,6 @@ export function sendWithHttp( path: parsedUrl.pathname, method: 'POST', headers: { - 'Content-Length': Buffer.byteLength(data), 'Content-Type': contentType, ...collector.headers, }, @@ -88,7 +87,6 @@ export function sendWithHttp( gzip = zlib.createGzip(); } req.setHeader('Content-Encoding', 'gzip'); - req.removeHeader('Content-Length'); const dataStream = readableFromBuffer(data); dataStream.on('error', onError) .pipe(gzip).on('error', onError) @@ -97,6 +95,7 @@ export function sendWithHttp( break; } default: + req.setHeader('Content-Length', Buffer.byteLength(data)); req.write(data); req.end(); From e5c97a31aed912d0d4cf0e8a7f217e825dea46a6 Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Mon, 4 Apr 2022 16:48:28 -0500 Subject: [PATCH 3/6] fix(otlp-http-exporter): refactor req end Signed-off-by: Svetlana Brennan --- .../exporter-trace-otlp-http/src/platform/node/util.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts index 92503c8560..8ea6d49f4d 100644 --- a/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts +++ b/experimental/packages/exporter-trace-otlp-http/src/platform/node/util.ts @@ -95,10 +95,7 @@ export function sendWithHttp( break; } default: - req.setHeader('Content-Length', Buffer.byteLength(data)); - req.write(data); - req.end(); - + req.end(data); break; } } From f5fb0e2a65dcdb00619860679b6967027f7d47f4 Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Mon, 4 Apr 2022 16:54:23 -0500 Subject: [PATCH 4/6] fix(otlp-http-exporter): add changelog line Signed-off-by: Svetlana Brennan --- experimental/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 1490c7826f..548eef4ece 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to experimental packages in this project will be documented * [#2707](https://github.com/open-telemetry/opentelemetry-js/pull/2707) feat(sdk-metrics-base): update metric exporter interfaces ([@srikanthccv](https://github.com/srikanthccv)) * [#2687](https://github.com/open-telemetry/opentelemetry-js/pull/2687) feat(api-metrics): remove observable types ([@legendecas](https://github.com/legendecas)) +* [#2879](https://github.com/open-telemetry/opentelemetry-js/pull/2879) fix(otlp-http-exporter): remove content length header ([@svetlanabrennan](https://github.com/svetlanabrennan)) ### :rocket: (Enhancement) From 3a7ea3c85ff9497b813cf8bf815982766e359d4d Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Mon, 4 Apr 2022 16:56:24 -0500 Subject: [PATCH 5/6] fix(otlp-http-exporter): no longer need remove header spy in test Signed-off-by: Svetlana Brennan --- .../test/node/CollectorTraceExporter.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts index 2850d008f8..e01ff2980c 100644 --- a/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts +++ b/experimental/packages/exporter-trace-otlp-http/test/node/CollectorTraceExporter.test.ts @@ -287,7 +287,6 @@ describe('OTLPTraceExporter - node with json over http', () => { stubRequest = sinon.stub(http, 'request').returns(fakeRequest as any); spySetHeader = sinon.spy(); (fakeRequest as any).setHeader = spySetHeader; - (fakeRequest as any).removeHeader = sinon.spy(); collectorExporterConfig = { headers: { foo: 'bar', From 7f2b72f8c01043edafd6518a21a8f610e1c558a8 Mon Sep 17 00:00:00 2001 From: Svetlana Brennan Date: Tue, 5 Apr 2022 10:45:26 -0500 Subject: [PATCH 6/6] fix(otlp-http-exporter): fix tests Signed-off-by: Svetlana Brennan --- .../test/node/CollectorMetricExporter.test.ts | 2 +- .../test/OTLPMetricExporter.test.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts index 2e04d70d39..7287d93300 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-http/test/node/CollectorMetricExporter.test.ts @@ -148,7 +148,7 @@ describe('OTLPMetricExporter - node with json over http', () => { describe('export', () => { beforeEach(async () => { stubRequest = sinon.stub(http, 'request').returns(fakeRequest as any); - stubWrite = sinon.stub(fakeRequest, 'write'); + stubWrite = sinon.stub(fakeRequest, 'end'); collectorExporterConfig = { headers: { foo: 'bar', diff --git a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts index 831b66780e..6c7e78507d 100644 --- a/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts +++ b/experimental/packages/opentelemetry-exporter-metrics-otlp-proto/test/OTLPMetricExporter.test.ts @@ -179,9 +179,9 @@ describe('OTLPMetricExporter - node with proto over http', () => { collectorExporter.export(metrics, () => {}); sinon.stub(http, 'request').returns({ - end: () => {}, + write: () => {}, on: () => {}, - write: (...writeArgs: any[]) => { + end: (...writeArgs: any[]) => { const ExportTraceServiceRequestProto = getExportRequestProto(); const data = ExportTraceServiceRequestProto?.decode(writeArgs[0]); const json = data?.toJSON() as otlpTypes.opentelemetryProto.collector.metrics.v1.ExportMetricsServiceRequest;