Refactor shadow WAL to use segments

This commit is contained in:
Ben Johnson
2021-07-18 08:45:49 -06:00
parent fc897b481f
commit 8ff784b34d
14 changed files with 1023 additions and 845 deletions

View File

@@ -40,6 +40,14 @@ var (
ErrChecksumMismatch = errors.New("invalid replica, checksum mismatch")
)
var (
// LogWriter is the destination writer for all logging.
LogWriter = os.Stderr
// LogFlags are the flags passed to log.New().
LogFlags = 0
)
// SnapshotIterator represents an iterator over a collection of snapshot metadata.
type SnapshotIterator interface {
io.Closer
@@ -291,6 +299,26 @@ func (p Pos) Truncate() Pos {
return Pos{Generation: p.Generation, Index: p.Index}
}
// ComparePos returns -1 if a is less than b, 1 if a is greater than b, and
// returns 0 if a and b are equal. Only index & offset are compared.
// Returns an error if generations are not equal.
func ComparePos(a, b Pos) (int, error) {
if a.Generation != b.Generation {
return 0, fmt.Errorf("generation mismatch")
}
if a.Index < b.Index {
return -1, nil
} else if a.Index > b.Index {
return 1, nil
} else if a.Offset < b.Offset {
return -1, nil
} else if a.Offset > b.Offset {
return 1, nil
}
return 0, nil
}
// Checksum computes a running SQLite checksum over a byte slice.
func Checksum(bo binary.ByteOrder, s0, s1 uint32, b []byte) (uint32, uint32) {
assert(len(b)%8 == 0, "misaligned checksum byte slice")