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 96d87c5
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 38 deletions.
39 changes: 12 additions & 27 deletions pkg/meta/base_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2146,11 +2146,11 @@ func testClone(t *testing.T, m Meta) {
if eno := m.doCleanupDetachedNode(Background, cloneDstIno); eno != 0 {
t.Fatalf("remove tree error rootInode: %v", cloneDstIno)
}
time.Sleep(1 * time.Second)
removedKeysStr := make([]string, len(removedItem))
for i, key := range removedItem {
removedKeysStr[i] = key.(string)
}
removedKeysStr = append(removedKeysStr, m.detachedNodes())
if exists := m.rdb.Exists(Background, removedKeysStr...).Val(); exists != 0 {
t.Fatalf("has keys not removed: %v", removedItem)
}
Expand All @@ -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 @@ -2176,6 +2167,7 @@ func testClone(t *testing.T, m Meta) {
if eno := m.doCleanupDetachedNode(Background, cloneDstIno); eno != 0 {
t.Fatalf("remove tree error rootInode: %v", cloneDstIno)
}
removedItem = append(removedItem, &detachedNode{Inode: cloneDstIno})
time.Sleep(1 * time.Second)
if exists, err := m.db.Exist(removedItem...); err != nil || exists {
t.Fatalf("has keys not removed: %v", removedItem)
Expand All @@ -2188,14 +2180,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 @@ -2205,7 +2189,7 @@ func testClone(t *testing.T, m Meta) {
if eno := m.doCleanupDetachedNode(Background, cloneDstIno); eno != 0 {
t.Fatalf("remove tree error rootInode: %v", cloneDstIno)
}
time.Sleep(1 * time.Second)
removedItem = append(removedItem, m.detachedKey(cloneDstIno))
m.txn(func(tx *kvTxn) error {
for _, key := range removedItem {
if buf := tx.get(key.([]byte)); buf != nil {
Expand All @@ -2218,19 +2202,20 @@ 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.(engine).doFindDetachedNodes(time.Now())
if len(nodes) != 4 {
t.Fatalf("find detached nodes error: %v", nodes)
}
nodes = m.(engine).doFindDetachedNodes(time.Now().Add(-24 * time.Hour))
if len(nodes) != 2 {
t.Fatalf("find detached nodes error: %v", nodes)
}

}

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 96d87c5

Please sign in to comment.