SkyAPM / go2sky

Distributed tracing and monitor SDK in Go for Apache SkyWalking APM
https://skywalking.apache.org/
Apache License 2.0
447 stars 122 forks source link

When User NewGRPCReporter and the peer reset , program will log panic: send on closed channel and exit #83

Closed cloud1984 closed 2 years ago

cloud1984 commented 3 years ago

version : 0.6.0

use helm install skywalking

skywalking version : 8.3.0

local connect to skywalking-oap use: export POD_NAME=$(kubectl get pods --namespace default -l "app=skywalking,release=skywalking,component=oap" -o jsonpath="{.items[0].metadata.name}") echo "Visit http://127.0.0.1:8050 to use your application" kubectl port-forward $POD_NAME 8050:11800 --namespace default

program connect: newReporter, err := reporter.NewGRPCReporter("127.0.0.1:8050")

when the connect is not normal

program will log :

panic: send on closed channel

goroutine 746 [running]: github.com/SkyAPM/go2sky.(segmentSpanImpl).End.func1(0xc00087aa20) /Users/liuyungen/workspace/pkg/mod/github.com/!sky!a!p!m/go2sky@v0.6.0/segment.go:95 +0x4f created by github.com/SkyAPM/go2sky.(segmentSpanImpl).End /Users/liuyungen/workspace/pkg/mod/github.com/!sky!a!p!m/go2sky@v0.6.0/segment.go:94 +0x6e exit status 2

May be can change segment.go end function like below:

func (s *segmentSpanImpl) End() { s.defaultSpan.End() go func() { defer func(){ err := recover() if err != nil { log.Printf("Segment error: %v",err) } }() s.Context().collect <- s }() }