aboutsummaryrefslogtreecommitdiff
path: root/weed/filer/filer_notify.go
diff options
context:
space:
mode:
Diffstat (limited to 'weed/filer/filer_notify.go')
-rw-r--r--weed/filer/filer_notify.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/weed/filer/filer_notify.go b/weed/filer/filer_notify.go
index 845a0678e..45c9b070f 100644
--- a/weed/filer/filer_notify.go
+++ b/weed/filer/filer_notify.go
@@ -66,6 +66,10 @@ func (f *Filer) NotifyUpdateEvent(ctx context.Context, oldEntry, newEntry *Entry
f.logMetaEvent(ctx, fullpath, eventNotification)
+ // Trigger empty folder cleanup for local events
+ // Remote events are handled via MetaAggregator.onMetadataChangeEvent
+ f.triggerLocalEmptyFolderCleanup(oldEntry, newEntry)
+
}
func (f *Filer) logMetaEvent(ctx context.Context, fullpath string, eventNotification *filer_pb.EventNotification) {
@@ -89,6 +93,41 @@ func (f *Filer) logMetaEvent(ctx context.Context, fullpath string, eventNotifica
}
+// triggerLocalEmptyFolderCleanup triggers empty folder cleanup for local events
+// This is needed because onMetadataChangeEvent is only called for remote peer events
+func (f *Filer) triggerLocalEmptyFolderCleanup(oldEntry, newEntry *Entry) {
+ if f.EmptyFolderCleaner == nil || !f.EmptyFolderCleaner.IsEnabled() {
+ return
+ }
+
+ eventTime := time.Now()
+
+ // Handle delete events (oldEntry exists, newEntry is nil)
+ if oldEntry != nil && newEntry == nil {
+ dir, name := oldEntry.FullPath.DirAndName()
+ f.EmptyFolderCleaner.OnDeleteEvent(dir, name, oldEntry.IsDirectory(), eventTime)
+ }
+
+ // Handle create events (oldEntry is nil, newEntry exists)
+ if oldEntry == nil && newEntry != nil {
+ dir, name := newEntry.FullPath.DirAndName()
+ f.EmptyFolderCleaner.OnCreateEvent(dir, name, newEntry.IsDirectory())
+ }
+
+ // Handle rename/move events (both exist but paths differ)
+ if oldEntry != nil && newEntry != nil {
+ oldDir, oldName := oldEntry.FullPath.DirAndName()
+ newDir, newName := newEntry.FullPath.DirAndName()
+
+ if oldDir != newDir || oldName != newName {
+ // Treat old location as delete
+ f.EmptyFolderCleaner.OnDeleteEvent(oldDir, oldName, oldEntry.IsDirectory(), eventTime)
+ // Treat new location as create
+ f.EmptyFolderCleaner.OnCreateEvent(newDir, newName, newEntry.IsDirectory())
+ }
+ }
+}
+
func (f *Filer) logFlushFunc(logBuffer *log_buffer.LogBuffer, startTime, stopTime time.Time, buf []byte, minOffset, maxOffset int64) {
if len(buf) == 0 {