mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-06 19:07:50 +00:00
use testhook auditor to track Qcx open/close
This also requires doing something to keep the TxGroup in each Qcx from holding its Tx references after the Qcx closes, because otherwise the list of Qcxs that we keep to verify that they all got closed ends up keeping every shared/read-only Tx open forever, resulting in many gigabytes of memory usage when running with the race detector. To avoid having to reason about whether anything would ever access a nil TxGroup, or run through iteratively zeroing maps, we just make a new empty group at that point.
This commit is contained in:
parent
53b7d9e210
commit
dc8702ea3e
1 changed files with 12 additions and 1 deletions
13
txfactory.go
13
txfactory.go
|
|
@ -31,6 +31,7 @@ import (
|
|||
"github.com/molecula/featurebase/v2/roaring"
|
||||
txkey "github.com/molecula/featurebase/v2/short_txkey"
|
||||
"github.com/molecula/featurebase/v2/storage"
|
||||
"github.com/molecula/featurebase/v2/testhook"
|
||||
. "github.com/molecula/featurebase/v2/vprint" // nolint:staticcheck
|
||||
"github.com/pkg/errors"
|
||||
"github.com/zeebo/blake3"
|
||||
|
|
@ -147,6 +148,11 @@ func (q *Qcx) Finish() (err error) {
|
|||
}
|
||||
}
|
||||
err2 := q.Grp.FinishGroup()
|
||||
// drop the old group so we aren't holding references to all those Tx
|
||||
q.Grp = q.Txf.NewTxGroup()
|
||||
if !q.done {
|
||||
_ = testhook.Closed(q.Txf.holder.Auditor, q, nil)
|
||||
}
|
||||
q.done = true
|
||||
|
||||
if err != nil {
|
||||
|
|
@ -164,7 +170,11 @@ func (q *Qcx) Abort() {
|
|||
(*q.RequiredForAtomicWriteTx).Rollback()
|
||||
}
|
||||
q.Grp.AbortGroup()
|
||||
|
||||
// drop the old group so we aren't holding references to all those Tx
|
||||
q.Grp = q.Txf.NewTxGroup()
|
||||
if !q.done {
|
||||
_ = testhook.Closed(q.Txf.holder.Auditor, q, nil)
|
||||
}
|
||||
q.done = true
|
||||
}
|
||||
|
||||
|
|
@ -197,6 +207,7 @@ func (f *TxFactory) NewQcx() (qcx *Qcx) {
|
|||
if f.typeOfTx == "roaring" {
|
||||
qcx.isRoaring = true
|
||||
}
|
||||
_ = testhook.Opened(f.holder.Auditor, qcx, nil)
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue