Browse Source

server side send response at least once per second

pull/4855/head
chrislu 1 year ago
parent
commit
875f562779
  1. 22
      weed/mq/broker/broker_grpc_pub.go

22
weed/mq/broker/broker_grpc_pub.go

@ -7,6 +7,7 @@ import (
"github.com/seaweedfs/seaweedfs/weed/mq/topic"
"github.com/seaweedfs/seaweedfs/weed/pb"
"github.com/seaweedfs/seaweedfs/weed/pb/mq_pb"
"sync/atomic"
"time"
)
@ -99,20 +100,37 @@ func (broker *MessageQueueBroker) Publish(stream mq_pb.SeaweedMessaging_PublishS
ackCounter := 0
var ackSequence int64
var isStopping int32
respChan := make(chan *mq_pb.PublishResponse, 128)
defer close(respChan)
defer func() {
atomic.StoreInt32(&isStopping, 1)
response := &mq_pb.PublishResponse{
Error: "end of stream",
}
respChan <- response
close(respChan)
}()
go func() {
ticker := time.NewTicker(1 * time.Second)
for {
select {
case resp := <-respChan:
if resp != nil {
if err := stream.Send(resp); err != nil {
glog.Errorf("Error sending setup response: %v", err)
}
case <-time.After(1 * time.Second):
} else {
return
}
case <-ticker.C:
if atomic.LoadInt32(&isStopping) == 0 {
response := &mq_pb.PublishResponse{
AckSequence: ackSequence,
}
respChan <- response
} else {
return
}
}
}
}()

Loading…
Cancel
Save