in file.go [777:811]
func initTxMaxSize(
f *File,
newMaxSize uint64,
) (maxPages, maxSize uint, err reason) {
const op = "txfile/tx-update-maxsize"
var metaID int
err = withInitTx(f, func(tx *Tx) reason {
// create new meta header for new ongoing write transaction
newMetaBuf := tx.prepareMetaBuffer()
newMeta := newMetaBuf.cast()
// update max size
pageSize := uint(newMeta.pageSize.Get())
maxSize = uint(newMaxSize)
maxPages = maxSize / pageSize
maxSize = maxPages * pageSize // round new max size to multiple of page size
newMeta.maxSize.Set(uint64(maxSize))
// sync new transaction state to disk
metaID = tx.syncNewMeta(&newMetaBuf)
err := tx.writeSync.Wait()
if err != nil {
return f.errWrap(op, err).of(TxFailed).
report("failed to update the on disk max size header entry")
}
return nil
})
if err == nil {
f.metaActive = metaID
}
return
}