fix(util): refactor audit log remove

Signed-off-by: NaturalSelect <huangzhibin1@oppo.com>
This commit is contained in:
NaturalSelect 2024-06-07 14:25:12 +08:00 committed by longerfly
parent bc5dd77fbd
commit 605371c336
4 changed files with 72 additions and 27 deletions

View File

@ -19,7 +19,6 @@ import (
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net"
"net/http"
"os"
@ -33,6 +32,7 @@ import (
"syscall"
"time"
"github.com/cubefs/cubefs/util/fileutil"
"github.com/cubefs/cubefs/util/log"
)
@ -569,35 +569,52 @@ func (a *Audit) newWriterSize(size int) error {
}
func (a *Audit) removeLogFile() {
fs := syscall.Statfs_t{}
if err := syscall.Statfs(a.logDir, &fs); err != nil {
log.LogErrorf("Get fs stat failed, err: %v", err)
dentries, err := fileutil.ReadDir(a.logDir)
if err != nil {
log.LogErrorf("[removeLogFile] ReadDir failed, logDir: %s, err: %v", a.logDir, err)
return
}
oldLogs := make([]string, 0)
for _, dentry := range dentries {
if strings.HasPrefix(dentry, Audit_Module) && strings.HasSuffix(dentry, ShiftedExtension) {
oldLogs = append(oldLogs, dentry)
}
}
if len(oldLogs) == 0 {
return
}
fs, err := fileutil.Statfs(a.logDir)
if err != nil {
log.LogErrorf("[removeLogFile] Get fs stat failed, err: %v", err)
return
}
diskSpaceLeft := int64(fs.Bavail * uint64(fs.Bsize))
diskSpaceLeft -= DefaultHeadRoom * 1024 * 1024
fInfos, err := ioutil.ReadDir(a.logDir)
if err != nil {
log.LogErrorf("ReadDir failed, logDir: %s, err: %v", a.logDir, err)
return
}
var needDelFiles ShiftedFile
for _, info := range fInfos {
if a.shouldDelete(info, diskSpaceLeft, Audit_Module) {
needDelFiles = append(needDelFiles, info)
sort.Slice(oldLogs, func(i, j int) bool {
return oldLogs[i] < oldLogs[j]
})
for len(oldLogs) != 0 && diskSpaceLeft < DefaultHeadRoom*1024*1024 {
oldestFile := path.Join(a.logDir, oldLogs[0])
fileInfo, err := os.Stat(oldestFile)
if err != nil {
log.LogErrorf("[removeLogFile] failed to stat file(%v), err(%v)", oldestFile, err)
return
}
}
sort.Sort(needDelFiles)
for _, info := range needDelFiles {
if err = os.Remove(path.Join(a.logDir, info.Name())); err != nil {
log.LogErrorf("Remove log file failed, logFileName: %s, err: %v", info.Name(), err)
continue
if !a.shouldDelete(fileInfo, diskSpaceLeft, Audit_Module) {
log.LogDebugf("[removeLogFile] cannot delete oldest file(%v)", oldestFile)
return
}
diskSpaceLeft += info.Size()
if diskSpaceLeft > 0 && time.Since(info.ModTime()) < MaxReservedDays {
break
if err = os.Remove(oldestFile); err != nil && !os.IsNotExist(err) {
log.LogErrorf("[removeLogFile] failed to remove file(%v), err(%v)", oldestFile, err)
return
}
oldLogs = oldLogs[1:]
stat := fileutil.ConvertStat(fileInfo)
diskSpaceLeft += stat.Blocks * fileutil.StatBlockSize
}
}

View File

@ -19,8 +19,6 @@ import (
"net"
"sync"
"time"
"github.com/cubefs/cubefs/util/log"
)
type Object struct {
@ -169,11 +167,9 @@ func (cp *ConnectPool) autoRelease() {
pools = append(pools, pool)
}
cp.RUnlock()
begin := time.Now()
for _, pool := range pools {
pool.autoRelease()
}
log.LogInfof("[autoRelease] release conn pool cnt(%v) using time(%v)", len(pools), time.Since(begin))
timer.Reset(time.Second)
}
}

View File

@ -15,15 +15,32 @@
package fileutil
import (
"io/fs"
"os"
"syscall"
)
const StatBlockSize = 512
func Stat(name string) (stat *syscall.Stat_t, err error) {
info, err := os.Stat(name)
if err != nil {
return
}
stat = ConvertStat(info)
return
}
func ConvertStat(info fs.FileInfo) (stat *syscall.Stat_t) {
stat = info.Sys().(*syscall.Stat_t)
return
}
func GetFilePhysicalSize(name string) (size int64, err error) {
stat, err := Stat(name)
if err != nil {
return
}
size = stat.Blocks * StatBlockSize
return
}

View File

@ -16,6 +16,7 @@ package fileutil_test
import (
"os"
"path"
"testing"
"github.com/cubefs/cubefs/util/fileutil"
@ -30,3 +31,17 @@ func TestStat(t *testing.T) {
require.NoError(t, err)
require.NotEqual(t, 0, ino)
}
const blkSize = 4096
func TestGetFilePhyscialSize(t *testing.T) {
dir, err := os.MkdirTemp("", "")
require.NoError(t, err)
defer os.RemoveAll(dir)
tmpFile := path.Join(dir, "tmp")
err = os.WriteFile(tmpFile, []byte("Hello World"), 0o755)
require.NoError(t, err)
size, err := fileutil.GetFilePhysicalSize(tmpFile)
require.NoError(t, err)
require.EqualValues(t, blkSize, size)
}