+11
-3
bus/firehose/server.go
+11
-3
bus/firehose/server.go
···
113
113
u.RawQuery = fmt.Sprintf("cursor=%d", *cursor)
114
114
}
115
115
116
-
// run the consumer in a goroutine and
117
116
shutdownConsumer := make(chan struct{}, 1)
118
117
consumerShutdown := make(chan struct{}, 1)
119
-
118
+
consumerErr := make(chan error, 1)
120
119
go func() {
121
120
logger := kf.logger.With("component", "consumer")
122
121
···
141
140
go func() {
142
141
if err := events.HandleRepoStream(ctx, conn, scheduler, logger); err != nil {
143
142
logger.Error("error handling repo stream", "err", err)
143
+
consumerErr <- err
144
+
return
144
145
}
146
+
consumerErr <- nil
145
147
}()
146
148
147
-
<-shutdownConsumer
149
+
select {
150
+
case <-shutdownConsumer:
151
+
case err := <-consumerErr:
152
+
if err != nil {
153
+
logger.Error("consumer encountered an error", "err", err)
154
+
}
155
+
}
148
156
149
157
if err := conn.Close(); err != nil {
150
158
logger.Error("error closing websocket", "err", err)