wp
This commit is contained in:
@@ -1,12 +1,11 @@
|
||||
package freelist
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"gordenko.dev/dima/qb/bin"
|
||||
bin "gordenko.dev/dima/bin/little"
|
||||
"gordenko.dev/dima/qb/util"
|
||||
)
|
||||
|
||||
@@ -158,12 +157,13 @@ func (s *FreeList) loadLastPage() error {
|
||||
return fmt.Errorf("read size %d bytes not equal page size %d", n, s.pageSize)
|
||||
}
|
||||
// check crc
|
||||
checksum := bin.GetUint32(buf[0:])
|
||||
checksum, _ := bin.GetUint32(buf[0:])
|
||||
if util.CalcChecksum(buf[crcSize:]) != checksum {
|
||||
return fmt.Errorf("page %d is corrupted", s.basePagesCount)
|
||||
}
|
||||
for i := crcSize; i < len(buf); i += ptrSize {
|
||||
s.free = append(s.free, bin.GetUint32(buf[i:]))
|
||||
pageNo, _ := bin.GetUint32(buf[i:])
|
||||
s.free = append(s.free, pageNo)
|
||||
}
|
||||
if s.deltaPagesCount > 0 {
|
||||
s.deltaPagesCount--
|
||||
@@ -207,25 +207,25 @@ func (s *FreeList) GetPageNumber() (pageNo uint32, err error) {
|
||||
}
|
||||
|
||||
// для відновлення недозаповненнох сторінки із снапшота
|
||||
func (s *FreeList) Restore(serialized []byte) error {
|
||||
if (len(serialized) % ptrSize) != 0 {
|
||||
return fmt.Errorf("wrong size")
|
||||
}
|
||||
for i := 0; i < len(serialized); i += ptrSize {
|
||||
s.free = append(s.free, bin.GetUint32(serialized[i:]))
|
||||
}
|
||||
fmt.Println(s.free)
|
||||
return nil
|
||||
}
|
||||
// func (s *FreeList) Restore(serialized []byte) error {
|
||||
// if (len(serialized) % ptrSize) != 0 {
|
||||
// return fmt.Errorf("wrong size")
|
||||
// }
|
||||
// for i := 0; i < len(serialized); i += ptrSize {
|
||||
// s.free = append(s.free, bin.GetUint32(serialized[i:]))
|
||||
// }
|
||||
// fmt.Println(s.free)
|
||||
// return nil
|
||||
// }
|
||||
|
||||
// для запису в snapshot
|
||||
func (s *FreeList) Serialize() ([]byte, error) {
|
||||
w := bytes.NewBuffer(nil)
|
||||
for _, pageNo := range s.free {
|
||||
bin.WriteUint32(w, pageNo)
|
||||
}
|
||||
return w.Bytes(), nil
|
||||
}
|
||||
// func (s *FreeList) Serialize() ([]byte, error) {
|
||||
// w := bytes.NewBuffer(nil)
|
||||
// for _, pageNo := range s.free {
|
||||
// bin.WriteUint32(w, pageNo)
|
||||
// }
|
||||
// return w.Bytes(), nil
|
||||
// }
|
||||
|
||||
func (s *FreeList) Cached() []uint32 {
|
||||
return s.free
|
||||
|
||||
Reference in New Issue
Block a user