refactor(tools): drop disk stat, open rocksdb read only without depend on LOCK

remove duplicate disk path

@formatter:off

Signed-off-by: mawei029 <mawei2@oppo.com>
This commit is contained in:
mawei029 2024-08-30 16:16:29 +08:00 committed by slasher
parent 9dad1ee7cf
commit 26a9fd2ac7
2 changed files with 49 additions and 9 deletions

View File

@ -214,6 +214,11 @@ func walkSingleDisk(ctx context.Context, cmCli *clustermgr.Client, dh *clustermg
}
}
}
defer func() {
if db != nil {
db.Close()
}
}()
vuidCnt := 0
for _, file := range files {
@ -313,6 +318,7 @@ func parseAllLocalDiskIdsByCm(c *grumble.Context) (diskInfos []*clustermgr.BlobN
cmCli := newCmClient(c)
marker := proto.DiskID(0)
ret := clustermgr.ListDiskRet{}
allDisk := make(map[proto.DiskID]*clustermgr.BlobNodeDiskInfo)
for {
ret, err = cmCli.ListDisk(context.Background(),
&clustermgr.ListOptionArgs{Host: prefix + host, Count: maxCnt, Marker: marker})
@ -320,9 +326,9 @@ func parseAllLocalDiskIdsByCm(c *grumble.Context) (diskInfos []*clustermgr.BlobN
return nil, err
}
diskInfos = append(diskInfos, ret.Disks...)
if len(diskInfos) == 0 {
return nil, fmt.Errorf("error: empty, invalid disk ids")
// there may be previously expired diskID
for _, disk := range ret.Disks {
allDisk[disk.DiskID] = disk
}
if ret.Marker == proto.InvalidDiskID {
@ -331,9 +337,30 @@ func parseAllLocalDiskIdsByCm(c *grumble.Context) (diskInfos []*clustermgr.BlobN
marker = ret.Marker
}
diskInfos = removeRedundantDiskID(allDisk)
if len(diskInfos) == 0 {
return nil, fmt.Errorf("error: empty, invalid disk ids")
}
return diskInfos, nil
}
func removeRedundantDiskID(allDisks map[proto.DiskID]*clustermgr.BlobNodeDiskInfo) []*clustermgr.BlobNodeDiskInfo {
uniq := make(map[string]proto.DiskID)
for _, disk := range allDisks {
id, exist := uniq[disk.Path]
// this id is monotonically increasing, so we take the latest(maximum) diskID in the same path
if !exist || id < disk.DiskID {
uniq[disk.Path] = disk.DiskID
}
}
disks := make([]*clustermgr.BlobNodeDiskInfo, 0, len(uniq))
for _, id := range uniq {
disks = append(disks, allDisks[id])
}
return disks
}
func printDiskID(dInfos []*clustermgr.BlobNodeDiskInfo) {
diskIDs := make([]proto.DiskID, len(dInfos))
for i, dInfo := range dInfos {

View File

@ -293,15 +293,28 @@ func OpenDB(path string, dbOpts ...DbOptions) (KVStore, error) {
if path == "" {
return nil, &os.PathError{Op: "open", Path: path, Err: syscall.ENOENT}
}
err := os.MkdirAll(path, 0o755)
if err != nil {
panic(err)
}
dbOpt := defaultRocksDBOption
dbOpt.applyOpts(dbOpts)
opts := genRocksdbOpts(&dbOpt)
db, err := rdb.OpenDb(opts, path)
var db *rdb.DB
var err error
if dbOpt.readOnly {
_, err = os.Stat(path)
if err != nil {
panic(err)
}
db, err = rdb.OpenDbForReadOnly(opts, path, false)
} else {
err = os.MkdirAll(path, 0o755)
if err != nil {
panic(err)
}
db, err = rdb.OpenDb(opts, path)
}
if err != nil {
opts.Destroy()
if strings.HasSuffix(err.Error(), "does not exist (create_if_missing is false)") {