aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwusong <75450248+wusongANKANG@users.noreply.github.com>2022-12-09 02:50:57 +0800
committerGitHub <noreply@github.com>2022-12-08 10:50:57 -0800
commit549354e324038d027134babb5294b7c7e820a12b (patch)
tree77cf924d7d73f7439495a8744604eeec5fa8a623
parent5f59d43c889313b7ce29e41f1f44315886d78bbd (diff)
downloadseaweedfs-549354e324038d027134babb5294b7c7e820a12b.tar.xz
seaweedfs-549354e324038d027134babb5294b7c7e820a12b.zip
Fix hardlink counting (#4042)
Signed-off-by: wusong <wangwusong@virtaitech.com> Signed-off-by: wusong <wangwusong@virtaitech.com> Co-authored-by: wusong <wangwusong@virtaitech.com>
-rw-r--r--weed/filer/filerstore_wrapper.go23
-rw-r--r--weed/mount/meta_cache/meta_cache.go4
-rw-r--r--weed/server/filer_grpc_server_rename.go1
3 files changed, 19 insertions, 9 deletions
diff --git a/weed/filer/filerstore_wrapper.go b/weed/filer/filerstore_wrapper.go
index 19dfeac96..0fac6a138 100644
--- a/weed/filer/filerstore_wrapper.go
+++ b/weed/filer/filerstore_wrapper.go
@@ -2,13 +2,14 @@ package filer
import (
"context"
- "github.com/seaweedfs/seaweedfs/weed/glog"
- "github.com/viant/ptrie"
"io"
"math"
"strings"
"time"
+ "github.com/seaweedfs/seaweedfs/weed/glog"
+ "github.com/viant/ptrie"
+
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/stats"
"github.com/seaweedfs/seaweedfs/weed/util"
@@ -186,9 +187,12 @@ func (fsw *FilerStoreWrapper) DeleteEntry(ctx context.Context, fp util.FullPath)
}
if len(existingEntry.HardLinkId) != 0 {
// remove hard link
- glog.V(4).Infof("DeleteHardLink %s", existingEntry.FullPath)
- if err = fsw.DeleteHardLink(ctx, existingEntry.HardLinkId); err != nil {
- return err
+ op := ctx.Value("OP")
+ if op != "MV" {
+ glog.V(4).Infof("DeleteHardLink %s", existingEntry.FullPath)
+ if err = fsw.DeleteHardLink(ctx, existingEntry.HardLinkId); err != nil {
+ return err
+ }
}
}
@@ -206,9 +210,12 @@ func (fsw *FilerStoreWrapper) DeleteOneEntry(ctx context.Context, existingEntry
if len(existingEntry.HardLinkId) != 0 {
// remove hard link
- glog.V(4).Infof("DeleteHardLink %s", existingEntry.FullPath)
- if err = fsw.DeleteHardLink(ctx, existingEntry.HardLinkId); err != nil {
- return err
+ op := ctx.Value("OP")
+ if op != "MV" {
+ glog.V(4).Infof("DeleteHardLink %s", existingEntry.FullPath)
+ if err = fsw.DeleteHardLink(ctx, existingEntry.HardLinkId); err != nil {
+ return err
+ }
}
}
diff --git a/weed/mount/meta_cache/meta_cache.go b/weed/mount/meta_cache/meta_cache.go
index 76def715b..cb2521824 100644
--- a/weed/mount/meta_cache/meta_cache.go
+++ b/weed/mount/meta_cache/meta_cache.go
@@ -2,12 +2,13 @@ package meta_cache
import (
"context"
+ "os"
+
"github.com/seaweedfs/seaweedfs/weed/filer"
"github.com/seaweedfs/seaweedfs/weed/filer/leveldb"
"github.com/seaweedfs/seaweedfs/weed/glog"
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb"
"github.com/seaweedfs/seaweedfs/weed/util"
- "os"
)
// need to have logic similar to FilerStoreWrapper
@@ -76,6 +77,7 @@ func (mc *MetaCache) AtomicUpdateEntryFromFiler(ctx context.Context, oldPath uti
// skip the unnecessary deletion
// leave the update to the following InsertEntry operation
} else {
+ ctx = context.WithValue(ctx, "OP", "MV")
glog.V(3).Infof("DeleteEntry %s", oldPath)
if err := mc.localStore.DeleteEntry(ctx, oldPath); err != nil {
return err
diff --git a/weed/server/filer_grpc_server_rename.go b/weed/server/filer_grpc_server_rename.go
index 8a3a8f07f..ff682da43 100644
--- a/weed/server/filer_grpc_server_rename.go
+++ b/weed/server/filer_grpc_server_rename.go
@@ -202,6 +202,7 @@ func (fs *FilerServer) moveSelfEntry(ctx context.Context, stream filer_pb.Seawee
}
// delete old entry
+ ctx = context.WithValue(ctx, "OP", "MV")
deleteErr := fs.filer.DeleteEntryMetaAndData(ctx, oldPath, false, false, false, false, signatures)
if deleteErr != nil {
return deleteErr