func initTxMaxSize()

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
}