Skip to content

Commit

Permalink
Merge pull request #205 from axw/0.5
Browse files Browse the repository at this point in the history
Check reused error stacktrace slice correctly
  • Loading branch information
axw authored Sep 5, 2018
2 parents 7232fcc + cdcba4d commit a23d41b
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 7 deletions.
6 changes: 5 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
# Changelog

## [Unreleased](https://github.com/elastic/apm-agent-go/compare/v0.5.0...master)
## [Unreleased](https://github.com/elastic/apm-agent-go/compare/v0.5.1...master)

## [v0.5.1](https://github.com/elastic/apm-agent-go/releases/tag/v0.5.1)

- Fixed a bug causing error stacktraces and culprit to sometimes not be set (#204)

## [v0.5.0](https://github.com/elastic/apm-agent-go/releases/tag/v0.5.0)

Expand Down
2 changes: 1 addition & 1 deletion error.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ func (t *Tracer) NewError(err error) *Error {
}
initException(&e.model.Exception, errors.Cause(err))
initStacktrace(e, err)
if e.stacktrace == nil {
if len(e.stacktrace) == 0 {
e.SetStacktrace(2)
}
return e
Expand Down
36 changes: 32 additions & 4 deletions error_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package elasticapm_test

import (
"fmt"
"path/filepath"
"runtime"
"testing"
Expand Down Expand Up @@ -59,18 +60,45 @@ func TestInternalStackTrace(t *testing.T) {
}}, stacktrace)
}

func TestErrorAutoStackTraceReuse(t *testing.T) {
tracer, r := transporttest.NewRecorderTracer()
defer tracer.Close()

err := fmt.Errorf("hullo") // no stacktrace attached
for i := 0; i < 1000; i++ {
tracer.NewError(err).Send()
}
tracer.Flush(nil)

// The previously sent error objects should have
// been reset and will be reused. We reuse the
// stacktrace slice. See elastic/apm-agent-go#204.
for i := 0; i < 1000; i++ {
tracer.NewError(err).Send()
}
tracer.Flush(nil)

payloads := r.Payloads()
assert.NotEmpty(t, payloads)
for _, p := range payloads {
errors := p.Errors()
assert.NotEmpty(t, errors)
for _, e := range errors {
assert.NotEqual(t, "", e.Culprit)
assert.NotEmpty(t, e.Exception.Stacktrace)
}
}
}

func sendError(t *testing.T, err error, f ...func(*elasticapm.Error)) *model.Error {
var r transporttest.RecorderTransport
tracer, newTracerErr := elasticapm.NewTracer("tracer_testing", "")
assert.NoError(t, newTracerErr)
tracer, r := transporttest.NewRecorderTracer()
defer tracer.Close()

error_ := tracer.NewError(err)
for _, f := range f {
f(error_)
}

tracer.Transport = &r
error_.Send()
tracer.Flush(nil)

Expand Down
2 changes: 1 addition & 1 deletion version.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@ package elasticapm

const (
// AgentVersion is the Elastic APM Go Agent version.
AgentVersion = "0.5.0"
AgentVersion = "0.5.1"
)

0 comments on commit a23d41b

Please sign in to comment.