watcher.go 699 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package storage
  2. import (
  3. "sync"
  4. "github.com/coreos/etcd/storage/storagepb"
  5. )
  6. type watcher struct {
  7. key []byte
  8. prefix bool
  9. cur int64
  10. end int64
  11. ch chan storagepb.Event
  12. mu sync.Mutex
  13. err error
  14. }
  15. func newWatcher(key []byte, prefix bool, start, end int64) *watcher {
  16. return &watcher{
  17. key: key,
  18. prefix: prefix,
  19. cur: start,
  20. end: end,
  21. ch: make(chan storagepb.Event, 10),
  22. }
  23. }
  24. func (w *watcher) Event() <-chan storagepb.Event { return w.ch }
  25. func (w *watcher) Err() error {
  26. w.mu.Lock()
  27. defer w.mu.Unlock()
  28. return w.err
  29. }
  30. func (w *watcher) stopWithError(err error) {
  31. if w.err != nil {
  32. return
  33. }
  34. close(w.ch)
  35. w.mu.Lock()
  36. w.err = err
  37. w.mu.Unlock()
  38. }