mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-15 02:40:23 +00:00
37 lines
947 B
Go
37 lines
947 B
Go
|
package watch
|
||
|
|
||
|
type FileChanges struct {
|
||
|
Modified chan bool // Channel to get notified of modifications
|
||
|
Truncated chan bool // Channel to get notified of truncations
|
||
|
Deleted chan bool // Channel to get notified of deletions/renames
|
||
|
}
|
||
|
|
||
|
func NewFileChanges() *FileChanges {
|
||
|
return &FileChanges{
|
||
|
make(chan bool), make(chan bool), make(chan bool)}
|
||
|
}
|
||
|
|
||
|
func (fc *FileChanges) NotifyModified() {
|
||
|
sendOnlyIfEmpty(fc.Modified)
|
||
|
}
|
||
|
|
||
|
func (fc *FileChanges) NotifyTruncated() {
|
||
|
sendOnlyIfEmpty(fc.Truncated)
|
||
|
}
|
||
|
|
||
|
func (fc *FileChanges) NotifyDeleted() {
|
||
|
sendOnlyIfEmpty(fc.Deleted)
|
||
|
}
|
||
|
|
||
|
// sendOnlyIfEmpty sends on a bool channel only if the channel has no
|
||
|
// backlog to be read by other goroutines. This concurrency pattern
|
||
|
// can be used to notify other goroutines if and only if they are
|
||
|
// looking for it (i.e., subsequent notifications can be compressed
|
||
|
// into one).
|
||
|
func sendOnlyIfEmpty(ch chan bool) {
|
||
|
select {
|
||
|
case ch <- true:
|
||
|
default:
|
||
|
}
|
||
|
}
|