Skip to content

Commit

Permalink
fix sql doCleanupDetachedNode and refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
zhijian-pro committed Mar 28, 2023
1 parent d31fdbd commit 2458691
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 36 deletions.
5 changes: 5 additions & 0 deletions pkg/meta/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -2082,3 +2082,8 @@ func (m *baseMeta) ScanDeletedObject(ctx Context, tss trashSliceScan, pss pendin
}
return eg.Wait()
}

//nolint:unused
func (m *baseMeta) findDetachedNodes(t time.Time) []Ino {
return m.en.doFindDetachedNodes(t)
}
35 changes: 10 additions & 25 deletions pkg/meta/base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2159,15 +2159,6 @@ func testClone(t *testing.T, m Meta) {
m.rdb.ZAdd(Background, m.detachedNodes(), redis.Z{Member: dNode2.String(), Score: float64(time.Now().Add(-5 * time.Minute).Unix())}).Err()
m.rdb.ZAdd(Background, m.detachedNodes(), redis.Z{Member: dNode3.String(), Score: float64(time.Now().Add(-48 * time.Hour).Unix())}).Err()
m.rdb.ZAdd(Background, m.detachedNodes(), redis.Z{Member: dNode4.String(), Score: float64(time.Now().Add(-48 * time.Hour).Unix())}).Err()

nodes := m.doFindDetachedNodes(time.Now())
if len(nodes) != 4 {
t.Fatalf("find detached nodes error: %v", nodes)
}
nodes = m.doFindDetachedNodes(time.Now().Add(-24 * time.Hour))
if len(nodes) != 2 {
t.Fatalf("find detached nodes error: %v", nodes)
}
case *dbMeta:
if n, err := m.db.Delete(&edge{Parent: cloneDstAttr.Parent, Name: []byte(cloneDstName)}); err != nil || n != 1 {
t.Fatalf("del edge error: %v", err)
Expand All @@ -2188,14 +2179,6 @@ func testClone(t *testing.T, m Meta) {
&detachedNode{Inode: dNode4, Added: time.Now().Add(-48 * time.Hour).Unix()},
)
})
nodes := m.doFindDetachedNodes(time.Now())
if len(nodes) != 4 {
t.Fatalf("find detached nodes error: %v", nodes)
}
nodes = m.doFindDetachedNodes(time.Now().Add(-24 * time.Hour))
if len(nodes) != 2 {
t.Fatalf("find detached nodes error: %v", nodes)
}
case *kvMeta:
// del edge first
if err := m.deleteKeys(m.entryKey(cloneDstAttr.Parent, cloneDstName)); err != nil {
Expand All @@ -2218,20 +2201,22 @@ func testClone(t *testing.T, m Meta) {
tx.set(m.detachedKey(dNode4), m.packInt64(time.Now().Add(-48*time.Hour).Unix()))
return nil
})
nodes := m.doFindDetachedNodes(time.Now())
if len(nodes) != 4 {
t.Fatalf("find detached nodes error: %v", nodes)
}
nodes = m.doFindDetachedNodes(time.Now().Add(-24 * time.Hour))
if len(nodes) != 2 {
t.Fatalf("find detached nodes error: %v", nodes)
}

}
time.Sleep(1 * time.Second)
if !sli1del || !sli2del {
t.Fatalf("slice should be deleted")
}

nodes := m.getBase().findDetachedNodes(time.Now())
if len(nodes) != 4 {
t.Fatalf("find detached nodes error: %v", nodes)
}
nodes = m.getBase().findDetachedNodes(time.Now().Add(-24 * time.Hour))
if len(nodes) != 2 {
t.Fatalf("find detached nodes error: %v", nodes)
}

}

func checkEntryTree(t *testing.T, m Meta, srcIno, dstIno Ino, walkFunc func(srcEntry, dstEntry *Entry, dstIno Ino)) {
Expand Down
3 changes: 1 addition & 2 deletions pkg/meta/redis.go
Original file line number Diff line number Diff line change
Expand Up @@ -4296,8 +4296,7 @@ func (m *redisMeta) mkNodeWithAttr(ctx Context, tx *redis.Tx, srcIno Ino, srcAtt
tx.HSet(ctx, m.entryKey(dstParentIno), dstName, m.packEntry(srcAttr.Typ, *dstIno))
tx.IncrBy(ctx, m.usedSpaceKey(), align4K(0))
tx.Incr(ctx, m.totalInodesKey())
}
if !attach {
} else {
pipe.ZAdd(ctx, m.detachedNodes(), redis.Z{Member: dstIno.String(), Score: float64(time.Now().Unix())})
}
return nil
Expand Down
16 changes: 7 additions & 9 deletions pkg/meta/sql.go
Original file line number Diff line number Diff line change
Expand Up @@ -4024,28 +4024,26 @@ func (m *dbMeta) doFindDetachedNodes(t time.Time) []Ino {
return detachedNodes
}

func (m *dbMeta) doCleanupDetachedNode(ctx Context, detachedNode Ino) syscall.Errno {
exist, err := m.db.Exist(&node{Inode: detachedNode})
func (m *dbMeta) doCleanupDetachedNode(ctx Context, detachedIno Ino) syscall.Errno {
exist, err := m.db.Exist(&node{Inode: detachedIno})
if err != nil {
return errno(err)
}
if exist {
rmConcurrent := make(chan int, 10)
if eno := m.emptyDir(ctx, detachedNode, true, nil, rmConcurrent); eno != 0 {
if eno := m.emptyDir(ctx, detachedIno, true, nil, rmConcurrent); eno != 0 {
return eno
}
if err := m.txn(func(s *xorm.Session) error {
if _, err := s.Delete(&node{Inode: detachedNode}); err != nil {
if _, err := s.Delete(&node{Inode: detachedIno}); err != nil {
return err
}
if _, err := s.Delete(&xattr{Inode: detachedNode}); err != nil {
return err
}
return nil
_, err = s.Delete(&xattr{Inode: detachedIno})
return err
}); err != nil {
return errno(err)
}
}
_, err = m.db.Delete(&node{Inode: detachedNode})
_, err = m.db.Delete(&detachedNode{Inode: detachedIno})
return errno(err)
}

0 comments on commit 2458691

Please sign in to comment.