diff --git a/pkg/depth/buffer.go b/pkg/depth/buffer.go index c960dfb2f..e3fbb6818 100644 --- a/pkg/depth/buffer.go +++ b/pkg/depth/buffer.go @@ -112,6 +112,12 @@ func (b *Buffer) AddUpdate(o types.SliceOrderBook, firstUpdateID int64, finalArg return nil } + if u.FinalUpdateID <= b.finalUpdateID { + log.Infof("the final update id %d of event is less than equal to the final update id %d of the snapshot, skip", u.FinalUpdateID, b.finalUpdateID) + b.mu.Unlock() + return nil + } + // if there is a missing update, we should reset the snapshot and re-fetch the snapshot if u.FirstUpdateID > b.finalUpdateID+1 { // emitReset will reset the once outside the mutex lock section diff --git a/pkg/exchange/max/stream.go b/pkg/exchange/max/stream.go index a9cc94321..9999b57c5 100644 --- a/pkg/exchange/max/stream.go +++ b/pkg/exchange/max/stream.go @@ -236,7 +236,7 @@ func (s *Stream) handleBookEvent(ex *Exchange) func(e max.BookEvent) { // the depth of websocket orderbook event is 50 by default, so we use 50 as limit here return ex.QueryDepth(context.Background(), e.Market, bookDepth) }) - f.SetBufferingPeriod(time.Second) + f.SetBufferingPeriod(3 * time.Second) f.OnReady(func(snapshot types.SliceOrderBook, updates []depth.Update) { s.EmitBookSnapshot(snapshot) for _, u := range updates {