open-telemetry / opentelemetry-js

OpenTelemetry JavaScript Client
https://opentelemetry.io
Apache License 2.0
2.65k stars 765 forks source link

TypeError: Cannot set property Tracer of #<Object> which has only a getter #4963

Open kukadiyaAni opened 2 weeks ago

kukadiyaAni commented 2 weeks ago

What happened?

Steps to Reproduce

After release new version @opentelemetry/sdk-trace-base is 1.26.0 start getting this error

Additional Details

TypeError: Cannot set property Tracer of #<Object> which has only a getter at Object.<anonymous> (/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js:18:407) at Module._compile (node:internal/modules/cjs/loader:1241:14) at Module._extensions..js (node:internal/modules/cjs/loader:1295:10) at Module.load (node:internal/modules/cjs/loader:1091:32) at Module._load (node:internal/modules/cjs/loader:938:12) at Module.require (node:internal/modules/cjs/loader:1115:19) at require (node:internal/modules/helpers:130:18) at Object.<anonymous> (/node_modules/@opentelemetry/sdk-trace-base/build/src/BasicTracerProvider.js:22:12) at Module._compile (node:internal/modules/cjs/loader:1241:14) at Module._extensions..js (node:internal/modules/cjs/loader:1295:10) (node:36506) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1)

OpenTelemetry Setup Code

No response

package.json

No response

Relevant log output

No response

pichlermarc commented 2 weeks ago

@kukadiyaAni there's not much info to work with here - the only change to the @opentelemetry/sdk-trace-base package was that we modified re-exports in #4880 so there might be something going on here but it's hard to tell without a reproducer.

Qs:

kukadiyaAni commented 2 weeks ago

@pichlermarc Thank you for the quick response I fixed the issue below changes

diff --git a/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js b/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js
index a11fe78..7847a70 100644
--- a/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js
+++ b/node_modules/@opentelemetry/sdk-trace-base/build/src/index.js
@@ -15,7 +15,10 @@
  * limitations under the License.
  */
 Object.defineProperty(exports, "__esModule", { value: true });
-exports.Span = exports.SamplingDecision = exports.TraceIdRatioBasedSampler = exports.ParentBasedSampler = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NoopSpanProcessor = exports.SimpleSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.RandomIdGenerator = exports.BatchSpanProcessor = exports.ForceFlushState = exports.BasicTracerProvider = exports.Tracer = void 0;
+if (!Object.getOwnPropertyDescriptor(exports, 'Tracer')) {
+    exports.Tracer = void 0;
+}
+exports.Span = exports.SamplingDecision = exports.TraceIdRatioBasedSampler = exports.ParentBasedSampler = exports.AlwaysOnSampler = exports.AlwaysOffSampler = exports.NoopSpanProcessor = exports.SimpleSpanProcessor = exports.InMemorySpanExporter = exports.ConsoleSpanExporter = exports.RandomIdGenerator = exports.BatchSpanProcessor = exports.ForceFlushState = exports.BasicTracerProvider = exports.Tracer;
 var Tracer_1 = require("./Tracer");
 Object.defineProperty(exports, "Tracer", { enumerable: true, get: function () { return Tracer_1.Tracer; } });
 var BasicTracerProvider_1 = require("./BasicTracerProvider");
pichlermarc commented 2 weeks ago

@kukadiyaAni to help, I'm looking for how you import/require OTel Components in your app. To be able to fix it upstream I need to be able to reproduce it. I cannot reproduce the limited info that I have available here.

dyladan commented 4 days ago

@kukadiyaAni can you please provide a reproduction? We can't really look into this without being able to easily reproduce it.