package badger
import (
"encoding/hex"
"fmt"
"math/rand"
"os"
"time"
"github.com/dgraph-io/badger/v4/table"
"github.com/dgraph-io/badger/v4/y"
)
func (s *levelsController ) validate () error {
for _ , l := range s .levels {
if err := l .validate (); err != nil {
return y .Wrap (err , "Levels Controller" )
}
}
return nil
}
func (s *levelHandler ) validate () error {
if s .level == 0 {
return nil
}
s .RLock ()
defer s .RUnlock ()
numTables := len (s .tables )
for j := 1 ; j < numTables ; j ++ {
if j >= len (s .tables ) {
return fmt .Errorf ("Level %d, j=%d numTables=%d" , s .level , j , numTables )
}
if y .CompareKeys (s .tables [j -1 ].Biggest (), s .tables [j ].Smallest ()) >= 0 {
return fmt .Errorf (
"Inter: Biggest(j-1)[%d] \n%s\n vs Smallest(j)[%d]: \n%s\n: " +
"level=%d j=%d numTables=%d" ,
s .tables [j -1 ].ID (), hex .Dump (s .tables [j -1 ].Biggest ()), s .tables [j ].ID (),
hex .Dump (s .tables [j ].Smallest ()), s .level , j , numTables )
}
if y .CompareKeys (s .tables [j ].Smallest (), s .tables [j ].Biggest ()) > 0 {
return fmt .Errorf (
"Intra: \n%s\n vs \n%s\n: level=%d j=%d numTables=%d" ,
hex .Dump (s .tables [j ].Smallest ()), hex .Dump (s .tables [j ].Biggest ()), s .level , j , numTables )
}
}
return nil
}
func (s *levelsController ) reserveFileID () uint64 {
id := s .nextFileID .Add (1 )
return id - 1
}
func getIDMap(dir string ) map [uint64 ]struct {} {
fileInfos , err := os .ReadDir (dir )
y .Check (err )
idMap := make (map [uint64 ]struct {})
for _ , info := range fileInfos {
if info .IsDir () {
continue
}
fileID , ok := table .ParseFileID (info .Name ())
if !ok {
continue
}
idMap [fileID ] = struct {}{}
}
return idMap
}
func init() {
rand .Seed (time .Now ().UnixNano ())
}
The pages are generated with Golds v0.8.4 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .