Browse Source

refactoring to use atomic bool

fix compilation
pull/4769/head
chrislu 1 year ago
parent
commit
3e9c32a3f0
  1. 16
      weed/util/log_buffer/log_buffer.go

16
weed/util/log_buffer/log_buffer.go

@ -3,6 +3,7 @@ package log_buffer
import ( import (
"bytes" "bytes"
"sync" "sync"
"sync/atomic"
"time" "time"
"google.golang.org/protobuf/proto" "google.golang.org/protobuf/proto"
@ -34,7 +35,7 @@ type LogBuffer struct {
flushInterval time.Duration flushInterval time.Duration
flushFn func(startTime, stopTime time.Time, buf []byte) flushFn func(startTime, stopTime time.Time, buf []byte)
notifyFn func() notifyFn func()
isStopping bool
isStopping *atomic.Bool
flushChan chan *dataToFlush flushChan chan *dataToFlush
lastTsNs int64 lastTsNs int64
sync.RWMutex sync.RWMutex
@ -50,6 +51,7 @@ func NewLogBuffer(name string, flushInterval time.Duration, flushFn func(startTi
flushFn: flushFn, flushFn: flushFn,
notifyFn: notifyFn, notifyFn: notifyFn,
flushChan: make(chan *dataToFlush, 256), flushChan: make(chan *dataToFlush, 256),
isStopping: new(atomic.Bool),
} }
go lb.loopFlush() go lb.loopFlush()
go lb.loopInterval() go lb.loopInterval()
@ -119,20 +121,14 @@ func (m *LogBuffer) AddToBuffer(partitionKey, data []byte, processingTsNs int64)
} }
func (m *LogBuffer) IsStopping() bool { func (m *LogBuffer) IsStopping() bool {
m.RLock()
defer m.RUnlock()
return m.isStopping
return m.isStopping.Load()
} }
func (m *LogBuffer) Shutdown() { func (m *LogBuffer) Shutdown() {
m.Lock()
defer m.Unlock()
if m.isStopping {
isAlreadyStopped := m.isStopping.Swap(true)
if isAlreadyStopped {
return return
} }
m.isStopping = true
toFlush := m.copyToFlush() toFlush := m.copyToFlush()
m.flushChan <- toFlush m.flushChan <- toFlush
close(m.flushChan) close(m.flushChan)

Loading…
Cancel
Save