radovskyb / watcher

watcher is a Go package for watching for files or directory changes without using filesystem events.
BSD 3-Clause "New" or "Revised" License
1.47k stars 181 forks source link

Received multiple events even if set the max event #106

Closed FogDong closed 3 years ago

FogDong commented 3 years ago

Received multiple events like:

INFO  0925-18:14:26.035+08 pipelines.go:400 | FILE "test.xxx" RENAME [/nfs/default-fog-nfs-pvc-pvc-79bff8c3-b454-11ea-8f49-52540065f05e/test.xxxx]ev.Size(): 2
INFO  0925-18:14:26.114+08 pipelines.go:400 | FILE "test.xxx" RENAME [/nfs/default-fog-nfs-pvc-pvc-79bff8c3-b454-11ea-8f49-52540065f05e/test.xxxx]ev.Size(): 2
INFO  0925-18:14:26.114+08 pipelines.go:400 | FILE "test.xxx" RENAME [/nfs/default-fog-nfs-pvc-pvc-79bff8c3-b454-11ea-8f49-52540065f05e/test.xxxx]ev.Size(): 2
INFO  0925-18:14:26.114+08 pipelines.go:400 | FILE "test.xxx" RENAME [/nfs/default-fog-nfs-pvc-pvc-79bff8c3-b454-11ea-8f49-52540065f05e/test.xxxx]ev.Size(): 2

And my code is like:

    w := watcher.New()
    w.SetMaxEvents(1)
    w.FilterOps(watcher.Rename)
    go func() {
        for {
            select {
            case ev := <-w.Event:
                log.Info(ev, "ev.Size(): ", ev.Size())
            case err := <-w.Error:
                log.Error(err)
            case <-w.Closed:
                return
            }
        }
    }()
    watchPath := "/path"
    err := w.Add(watchPath)
    if err := w.Start(time.Second * 3); err != nil {
        return err
    }

ping /cc @radovskyb