|
|
@ -442,6 +442,15 @@ func (bc *BrokerClient) ReadRecords(ctx context.Context, session *BrokerSubscrib |
|
|
|
|
|
|
|
// Try to receive first record
|
|
|
|
go func() { |
|
|
|
// Check if stream is nil (can happen during session recreation race condition)
|
|
|
|
if session.Stream == nil { |
|
|
|
select { |
|
|
|
case recvChan <- recvResult{resp: nil, err: fmt.Errorf("stream is nil")}: |
|
|
|
case <-ctx.Done(): |
|
|
|
// Context cancelled, don't send (avoid blocking)
|
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
resp, err := session.Stream.Recv() |
|
|
|
select { |
|
|
|
case recvChan <- recvResult{resp: resp, err: err}: |
|
|
@ -501,6 +510,15 @@ func (bc *BrokerClient) ReadRecords(ctx context.Context, session *BrokerSubscrib |
|
|
|
recvChan2 := make(chan recvResult, 1) |
|
|
|
|
|
|
|
go func() { |
|
|
|
// Check if stream is nil (can happen during session recreation race condition)
|
|
|
|
if session.Stream == nil { |
|
|
|
select { |
|
|
|
case recvChan2 <- recvResult{resp: nil, err: fmt.Errorf("stream is nil")}: |
|
|
|
case <-ctx2.Done(): |
|
|
|
// Context cancelled
|
|
|
|
} |
|
|
|
return |
|
|
|
} |
|
|
|
resp, err := session.Stream.Recv() |
|
|
|
select { |
|
|
|
case recvChan2 <- recvResult{resp: resp, err: err}: |
|
|
|