提交 beaae669 编写于 作者: D Davies Liu

verify the refcount before delete a slice

上级 64251954
......@@ -1809,14 +1809,21 @@ func (m *dbMeta) deleteChunk(inode Ino, indx uint32) error {
return err
}
}
_, err = ses.Delete(&chunk{inode, indx, nil})
n, err := ses.Delete(&c)
if err == nil && n == 0 {
err = fmt.Errorf("chunk %d:%d changed, try restarting transaction", inode, indx)
}
return err
})
if err != nil {
return fmt.Errorf("delete slice from chunk %s fail: %s, retry later", inode, err)
}
for _, s := range ss {
m.deleteSlice(s.chunkid, s.size)
var ref = chunkRef{Chunkid: s.chunkid}
ok, err := m.engine.Get(&ref)
if err == nil && ok && ref.Refs <= 0 {
m.deleteSlice(s.chunkid, s.size)
}
}
return nil
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册