wp
This commit is contained in:
@@ -2,6 +2,7 @@ package recovery
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
@@ -113,6 +114,7 @@ func resolveRecoveryFiles(dir string) (_ RecoveryFiles, err error) {
|
||||
type RecoveryReport struct {
|
||||
SnapshotNumber int
|
||||
WAL string
|
||||
ReplayMetrics map[uint32]*storage.ReplayMetric
|
||||
IndexFreeList *freelist.FreeList
|
||||
DataFreeList *freelist.FreeList
|
||||
}
|
||||
@@ -122,6 +124,7 @@ func Recovery(dir string, databaseName string) (_ RecoveryReport, err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Printf("recovery files: %#v\n", recoveryFiles)
|
||||
var (
|
||||
frozenIndexPageCount int
|
||||
frozenDataPageCount int
|
||||
@@ -131,27 +134,33 @@ func Recovery(dir string, databaseName string) (_ RecoveryReport, err error) {
|
||||
)
|
||||
if recoveryFiles.Snapshot != "" {
|
||||
var snapshot worker.ReadSnapshotOut
|
||||
snapshot, err = worker.ReadSnapshot(recoveryFiles.Snapshot)
|
||||
snapshot, err = worker.ReadSnapshot(filepath.Join(dir, recoveryFiles.Snapshot))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
//
|
||||
fmt.Printf("snapshot: %#v\n", snapshot)
|
||||
frozenIndexPageCount = snapshot.FrozenIndexPagesCount
|
||||
frozenDataPageCount = snapshot.FrozenDataPagesCount
|
||||
freeIndexPages = snapshot.IndexPageNumbers
|
||||
freeDataPages = snapshot.DataPageNumbers
|
||||
metrics = snapshot.Metrics
|
||||
} else {
|
||||
metrics = make(map[uint32]*storage.ReplayMetric)
|
||||
}
|
||||
|
||||
if recoveryFiles.WAL != "" {
|
||||
var (
|
||||
wal *os.File
|
||||
walReader *storage.WALReader
|
||||
walReplayer *storage.WALReplayer
|
||||
)
|
||||
walReader, err = storage.NewWALReader(storage.WALReaderOptions{
|
||||
FileName: recoveryFiles.WAL,
|
||||
BufferSize: 8 * 1024 * 1024,
|
||||
})
|
||||
wal, err = os.Open(filepath.Join(dir, recoveryFiles.WAL))
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
defer wal.Close()
|
||||
|
||||
walReader, err = storage.NewWALReader(wal)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -166,13 +175,15 @@ func Recovery(dir string, databaseName string) (_ RecoveryReport, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
fmt.Printf("before replay\n")
|
||||
err = walReplayer.Replay()
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
fmt.Printf("after replay\n")
|
||||
// перезаписую сторінки із останнього комміта
|
||||
var dataFile *os.File
|
||||
dataFile, err = os.OpenFile(qb.GetDataFilePath(dir, databaseName), os.O_WRONLY, 0666)
|
||||
dataFile, err = os.OpenFile(qb.GetDataFilePath(dir, databaseName), os.O_CREATE|os.O_WRONLY, 0666)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -185,7 +196,7 @@ func Recovery(dir string, databaseName string) (_ RecoveryReport, err error) {
|
||||
return
|
||||
}
|
||||
var indexFile *os.File
|
||||
indexFile, err = os.OpenFile(qb.GetIndexFilePath(dir, databaseName), os.O_WRONLY, 0666)
|
||||
indexFile, err = os.OpenFile(qb.GetIndexFilePath(dir, databaseName), os.O_CREATE|os.O_WRONLY, 0666)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
@@ -221,6 +232,7 @@ func Recovery(dir string, databaseName string) (_ RecoveryReport, err error) {
|
||||
return RecoveryReport{
|
||||
SnapshotNumber: recoveryFiles.SnapshotNumber,
|
||||
WAL: recoveryFiles.WAL,
|
||||
ReplayMetrics: metrics,
|
||||
IndexFreeList: indexFreeList,
|
||||
DataFreeList: dataFreeList,
|
||||
}, nil
|
||||
|
||||
Reference in New Issue
Block a user