in wal.go [207:243]
func readWAL(
access func(PageID) []byte,
root PageID,
) (walMapping, idList, reason) {
const op = "txfile/read-wal"
if root == 0 {
return walMapping{}, nil, nil
}
mapping := walMapping{}
var metaPages idList
for pageID := root; pageID != 0; {
metaPages.Add(pageID)
node, data := castWalPage(access(pageID))
if node == nil {
return nil, nil, errOp(op).of(InvalidMetaPage).
causedBy(raiseOutOfBounds(pageID)).
report("write ahead metadata corrupted")
}
count := int(node.count.Get())
pageID = node.next.Get()
for i := 0; i < count; i++ {
// read node mapping. Only 7 bytes are used per pageID
var k, v pgID
copy(k[0:7], data[0:7])
copy(v[0:7], data[7:14])
data = data[14:]
mapping[k.Get()] = v.Get()
}
}
return mapping, metaPages, nil
}