Describe the bug
Present shutdown sequence calls of collector service is as follows
servers -> writers -> collector_queue_processors(with drain)
First closing storage writers and then draining the collector queue. Which resulting in collector accepting spans until the writers close operation done.
While draining collector queue on issue of collector close operation, collector is trying to write spans to storage since the writer is closed first it resulting in panic and leads to span loss.

To Reproduce
Steps to reproduce the behavior:
Expected behavior
Ideal shutdown sequence order should be as follows
servers -> queue processors (with drain) -> writers
Present Code
https://github.com/jaegertracing/jaeger/blob/master/cmd/collector/main.go#L97
svc.RunAndThen(func() {
if closer, ok := spanWriter.(io.Closer); ok {
err := closer.Close()
if err != nil {
logger.Error("failed to close span writer", zap.Error(err))
}
}
if err := c.Close(); err != nil {
logger.Error("failed to cleanly close the collector", zap.Error(err))
}
})
Fix:
svc.RunAndThen(func() {
if err := c.Close(); err != nil {
logger.Error("failed to cleanly close the collector", zap.Error(err))
}
if closer, ok := spanWriter.(io.Closer); ok {
err := closer.Close()
if err != nil {
logger.Error("failed to close span writer", zap.Error(err))
}
}
})
Would you mind opening a PR with your suggested change?
Would you mind opening a PR with your suggested change?
Raised PR