mirror of
https://github.com/cubefs/cubefs.git
synced 2026-08-02 02:00:56 +00:00
feat(fsck): Add force clean function for fsck. #22944717
Signed-off-by: zhumingze <zhumingze@oppo.com>
This commit is contained in:
parent
090e94bab8
commit
a2a73616ca
@ -1959,6 +1959,8 @@ func (mw *MetaWrapper) Evict(inode uint64, fullPath string) error {
|
||||
return syscall.EINVAL
|
||||
}
|
||||
|
||||
log.LogDebugf("Evict: ino(%v) mp(%v)", inode, mp.PartitionID)
|
||||
|
||||
status, err := mw.ievict(mp, inode, fullPath)
|
||||
if err != nil || status != statusOK {
|
||||
log.LogWarnf("Evict: ino(%v) err(%v) status(%v)", inode, err, status)
|
||||
|
||||
@ -29,7 +29,6 @@ import (
|
||||
"github.com/cubefs/cubefs/proto"
|
||||
"github.com/cubefs/cubefs/sdk/meta"
|
||||
"github.com/cubefs/cubefs/util/log"
|
||||
"github.com/cubefs/cubefs/util/ump"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -64,7 +63,6 @@ func newCleanInodeCmd() *cobra.Command {
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
return c
|
||||
}
|
||||
|
||||
@ -97,18 +95,18 @@ func newEvictInodeCmd() *cobra.Command {
|
||||
}
|
||||
|
||||
func Clean(opt string) error {
|
||||
defer log.LogFlush()
|
||||
// defer log.LogFlush()
|
||||
|
||||
if MasterAddr == "" || VolName == "" {
|
||||
return fmt.Errorf("Lack of parameters: master(%v) vol(%v)", MasterAddr, VolName)
|
||||
}
|
||||
|
||||
ump.InitUmp("fsck", "")
|
||||
// ump.InitUmp("fsck", "")
|
||||
|
||||
_, err := log.InitLog("fscklog", "fsck", log.InfoLevel, nil, log.DefaultLogLeftSpaceLimitRatio)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Init log failed: %v", err)
|
||||
}
|
||||
// _, err := log.InitLog("fscklog", "fsck", log.InfoLevel, nil, log.DefaultLogLeftSpaceLimitRatio)
|
||||
// if err != nil {
|
||||
// return fmt.Errorf("Init log failed: %v", err)
|
||||
// }
|
||||
|
||||
masters := strings.Split(MasterAddr, meta.HostsSeparator)
|
||||
metaConfig := &meta.MetaConfig{
|
||||
@ -116,6 +114,7 @@ func Clean(opt string) error {
|
||||
Masters: masters,
|
||||
}
|
||||
|
||||
var err error
|
||||
gMetaWrapper, err = meta.NewMetaWrapper(metaConfig)
|
||||
if err != nil {
|
||||
return fmt.Errorf("NewMetaWrapper failed: %v", err)
|
||||
@ -215,16 +214,28 @@ func cleanInodes() error {
|
||||
}
|
||||
|
||||
func doEvictInode(inode *Inode) error {
|
||||
if forceClean {
|
||||
_, err := gMetaWrapper.InodeUnlink_ll(inode.Inode, inode.Path)
|
||||
if err != nil {
|
||||
log.LogWarnf("doEvictInode: unlink inode err(%v)", err)
|
||||
return err
|
||||
}
|
||||
inode.NLink = 0
|
||||
}
|
||||
|
||||
if inode.NLink != 0 || time.Since(time.Unix(inode.ModifyTime, 0)) < 24*time.Hour || !proto.IsRegular(inode.Type) {
|
||||
log.LogWarnf("doEvictInode: ino(%v) can't be deleted", inode.Inode)
|
||||
return nil
|
||||
}
|
||||
|
||||
err := gMetaWrapper.Evict(inode.Inode, inode.Path)
|
||||
if err != nil {
|
||||
log.LogWarnf("doEvictInode: evict inode err(%v)", err)
|
||||
if err != syscall.ENOENT {
|
||||
return err
|
||||
}
|
||||
}
|
||||
log.LogWritef("%v", inode)
|
||||
log.LogWarnf("doEvictInode success: ino(%v)", inode)
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@ -30,6 +30,7 @@ var (
|
||||
CleanS bool
|
||||
CleanFlag string
|
||||
isCheckApplyId bool
|
||||
forceClean bool
|
||||
)
|
||||
|
||||
const (
|
||||
|
||||
@ -58,5 +58,6 @@ func NewRootCmd() *cobra.Command {
|
||||
c.PersistentFlags().Uint64VarP(&InodeID, "inode", "", 0, "inode id of a file")
|
||||
c.Flags().BoolVarP(&optShowVersion, "version", "v", false, "Show version information")
|
||||
c.PersistentFlags().StringVarP(&CleanFlag, "clean", "", "false", "whether clean gc data.")
|
||||
c.PersistentFlags().BoolVarP(&forceClean, "force", "f", false, "force clean dirty inode")
|
||||
return c
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user