add flag to makesure Tracer:finish called (#85)
diff --git a/CHANGES.md b/CHANGES.md
index 0b6466f..df4ffb4 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,9 @@
# Changes
+## 0.6.0
+
+1. fix: `skywalking_tracer:finish()` will not be called in some case such as upstream timeout.
+
## 0.5.0
1. Adapt to Kong agent.
diff --git a/lib/skywalking/tracer.lua b/lib/skywalking/tracer.lua
index 88941b2..5bf8a88 100644
--- a/lib/skywalking/tracer.lua
+++ b/lib/skywalking/tracer.lua
@@ -79,21 +79,26 @@
ctx.tracingContext = tracingContext
ctx.entrySpan = entrySpan
ctx.exitSpan = exitSpan
+ ctx.is_finished = false
end
function Tracer:finish()
-- Finish the exit span when received the first response package from upstream
- if ngx.ctx.exitSpan ~= nil then
+ if ngx.ctx.exitSpan ~= nil and not ngx.ctx.is_finished then
local upstream_status = tonumber(ngx.var.upstream_status)
if upstream_status then
Span.tag(ngx.ctx.exitSpan, 'http.status', upstream_status)
end
Span.finish(ngx.ctx.exitSpan, ngx.now() * 1000)
ngx.ctx.exitSpan = nil
+ ngx.ctx.is_finished = true
end
end
function Tracer:prepareForReport()
+ if not ngx.ctx.is_finished then
+ self.finish()
+ end
local entrySpan = ngx.ctx.entrySpan
if not entrySpan then
return