in pq/ack.go [285:327]
func (a *acker) findNewStartPositions(c *txCursor, id uint64) (head, read position, err reason) {
const op = "pq/ack-compute-new-start"
var hdr *eventPage
hdr, err = c.PageHeader()
if err != nil {
return head, read, a.errWrap(op, err)
}
head = position{
page: c.cursor.page,
off: int(hdr.off.Get()),
id: hdr.first.Get(),
}
if id == head.id {
read = head
return head, read, nil
}
// skip contents in current page until we did reach start of next event.
c.cursor.off = head.off
for currentID := head.id; currentID != id; currentID++ {
var evtHdr *eventHeader
evtHdr, err = c.ReadEventHeader()
if err != nil {
return head, read, a.errWrap(op, err)
}
err = c.Skip(int(evtHdr.sz.Get()))
if err != nil {
return head, read, a.errWrap(op, err)
}
}
read = position{
page: c.cursor.page,
off: c.cursor.off,
id: id,
}
return head, read, nil
}