diff --git a/weed/filer/filer.go b/weed/filer/filer.go index 8e52caf15..d2364b155 100644 --- a/weed/filer/filer.go +++ b/weed/filer/filer.go @@ -62,7 +62,8 @@ type Filer struct { deletionQuit chan struct{} DeletionRetryQueue *DeletionRetryQueue EmptyFolderCleaner *empty_folder_cleanup.EmptyFolderCleaner - remoteDeletionLoop sync.Once + remoteDeletionLoop sync.Once + remoteMetadataDeletionIndexMu sync.Mutex } func NewFiler(masters pb.ServerDiscovery, grpcDialOption grpc.DialOption, filerHost pb.ServerAddress, filerGroup string, collection string, replication string, dataCenter string, maxFilenameLength uint32, notifyFn func()) *Filer { diff --git a/weed/filer/filer_delete_entry.go b/weed/filer/filer_delete_entry.go index 0aba250cb..183897c40 100644 --- a/weed/filer/filer_delete_entry.go +++ b/weed/filer/filer_delete_entry.go @@ -253,6 +253,9 @@ func (f *Filer) reconcilePendingRemoteMetadataDeletions(ctx context.Context) err } func (f *Filer) markRemoteMetadataDeletionPending(ctx context.Context, path util.FullPath) error { + f.remoteMetadataDeletionIndexMu.Lock() + defer f.remoteMetadataDeletionIndexMu.Unlock() + txnCtx, beginErr := f.BeginTransaction(ctx) if beginErr != nil { return beginErr @@ -289,6 +292,9 @@ func (f *Filer) markRemoteMetadataDeletionPending(ctx context.Context, path util } func (f *Filer) clearRemoteMetadataDeletionPending(ctx context.Context, path util.FullPath) error { + f.remoteMetadataDeletionIndexMu.Lock() + defer f.remoteMetadataDeletionIndexMu.Unlock() + txnCtx, beginErr := f.BeginTransaction(ctx) if beginErr != nil { return beginErr