When multiple sequential calls to tracer.local are made, then only the span of the first tracer.local is linked to the parent span, while the spans of subsequent calls have no parent at all.
See the example program below, where I would expect a parent "GET" span with 3 child spans "my_db_operation 1", "my_db_operation 2" and "my_db_operation 3".
Instead the actual result there is a parent "GET" span with 1 child span "my_db_operation 1", then two more spans that have no parent: "my_db_operation 2" and "my_db_operation 3".
const express = require('express')
const app = express()
const port = 3000
const { Tracer, ExplicitContext, BatchRecorder, jsonEncoder } = require("zipkin");
const { HttpLogger } = require("zipkin-transport-http");
const CLSContext = require('zipkin-context-cls');
const zipkinMiddleware = require("zipkin-instrumentation-express").expressMiddleware;
const tracer = new Tracer({
ctxImpl: new CLSContext('zipkin'), // implicit in-process context
recorder: new BatchRecorder({
logger: new HttpLogger({
endpoint: 'http://jaeger-collector:9411/api/v2/spans',
jsonEncoder: jsonEncoder.JSON_V2,
}),
}),
localServiceName: "example-app",
});
app.use(zipkinMiddleware({ tracer }));
function my_db_operation(x) {
console.log(`My DB operation ${x}`)
ms = Math.floor(Math.random() * 600) + 50;
return new Promise(resolve => setTimeout(resolve, ms));
}
app.get('/', async (req, res) => {
await tracer.local("my_db_operation 1", () => my_db_operation(1));
await tracer.local("my_db_operation 2", () => my_db_operation(2));
await tracer.local("my_db_operation 3", () => my_db_operation(3));
res.send('Hello World!')
})
app.listen(port, () => {
console.log(`Maartens example app started and is listening on port ${port}`)
})
When multiple sequential calls to
tracer.local
are made, then only the span of the firsttracer.local
is linked to the parent span, while the spans of subsequent calls have no parent at all.See the example program below, where I would expect a parent "GET" span with 3 child spans "my_db_operation 1", "my_db_operation 2" and "my_db_operation 3".
Instead the actual result there is a parent "GET" span with 1 child span "my_db_operation 1", then two more spans that have no parent: "my_db_operation 2" and "my_db_operation 3".