cockroachdb / cockroachdb/pebble
*: invariants builds violate Go pointer passing rules
- Dominant language
- Go
- Stars
- 6k
- Forks
- 584
- Avg merge
- 16h 35m
- Merged PRs (30d)
- 5
Description
```
GOEXPERIMENT=cgocheck2 go test -tags invariants
```
fails immediately detecting an unpinned Go pointer stored in cgo memory.
Without the invariants tags, tests pass.
```
===== SEED =====
1752675871487065000
===== ERR =====
exit status 2
===== OUT =====
write of unpinned Go pointer 0x1400032c0a0 to non-Go memory 0x12980e728
fatal error: unpinned Go pointer stored into non-Go memory
runtime stack:
runtime.throw({0x100ed4f79?, 0x10105be40?})
/usr/local/go/src/runtime/panic.go:1101 +0x38 fp=0x16f61e9a0 sp=0x16f61e970 pc=0
runtime.cgoCheckPtrWrite.func1()
/usr/local/go/src/runtime/cgocheck.go:67 +0x74 fp=0x16f61e9d0 sp=0x16f61e9a0 pc=
runtime.systemstack(0x101619e80)
/usr/local/go/src/runtime/asm_arm64.s:244 +0x6c fp=0x16f61e9e0 sp=0x16f61e9d0 pc
goroutine 45 gp=0x14000517340 m=0 mp=0x101693f00 [running]:
runtime.systemstack_switch()
/usr/local/go/src/runtime/asm_arm64.s:201 +0x8 fp=0x1400031e0c0 sp=0x1400031e0b0
runtime.cgoCheckPtrWrite(0x12980e728, 0x1400032c0a0)
/usr/local/go/src/runtime/cgocheck.go:65 +0x114 fp=0x1400031e0f0 sp=0x1400031e0c
github.com/cockroachdb/swiss.(*Map[...]).Put(0x10119d060, {0x1, 0x4, 0x7d}, 0x1400
/Users/jackson/go/pkg/mod/github.com/cockroachdb/swiss@v0.0.0-20250624142022-d6e
github.com/cockroachdb/pebble/internal/cache.(*shard).metaAdd(0x14000100ba8, {0x14
/Users/jackson/go/src/github.com/cockroachdb/pebble/internal/cache/clockpro.go:3
github.com/cockroachdb/pebble/internal/cache.(*shard).set(0x14000100ba8, {0x0?, 0x
/Users/jackson/go/src/github.com/cockroachdb/pebble/internal/cache/clockpro.go:1
github.com/cockroachdb/pebble/internal/cache.(*readEntry).setReadValue(0x140002102
/Users/jackson/go/src/github.com/cockroachdb/pebble/internal/cache/read_shard.go
github.com/cockroachdb/pebble/internal/cache.ReadHandle.SetReadValue(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/internal/cache/read_shard.go
github.com/cockroachdb/pebble/sstable/block.(*Reader).Read(0x14000000240, {0x10118
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/block/block.go:509 +
github.com/cockroachdb/pebble/sstable.(*Reader).readIndexBlock(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader.go:357
github.com/cockroachdb/pebble/sstable.(*Reader).readTopLevelIndexBlock(0x0?, {0x10
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader.go:350 +0x98
github.com/cockroachdb/pebble/sstable.newRowBlockSingleLevelIterator({0x10118d038,
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader_iter_single_l
github.com/cockroachdb/pebble/sstable.(*Reader).newPointIter(0x1?, {0x10118d038?,
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader.go:151 +0x14c
github.com/cockroachdb/pebble/sstable.(*Reader).NewPointIter(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader.go:113
github.com/cockroachdb/pebble/sstable.(*Reader).NewIter(0x0?, {0x0?, 0x0?, {0x0?,
/Users/jackson/go/src/github.com/cockroachdb/pebble/sstable/reader.go:184 +0x120
github.com/cockroachdb/pebble.ingestLoad1({0x10118ce68, 0x1016ba840}, 0x1400043658
/Users/jackson/go/src/github.com/cockroachdb/pebble/ingest.go:322 +0x6f4 fp=0x14
github.com/cockroachdb/pebble.ingestLoad({0x10118ce68, 0x1016ba840}, 0x14000436588
/Users/jackson/go/src/github.com/cockroachdb/pebble/ingest.go:510 +0x31c fp=0x14
github.com/cockroachdb/pebble.(*DB).ingest(0x140001c0508, {0x10118ce68, 0x1016ba84
/Users/jackson/go/src/github.com/cockroachdb/pebble/ingest.go:1457 +0x2a8 fp=0x1
github.com/cockroachdb/pebble.(*DB).Ingest(0x140001cc0d0?, {0x10118ce68?, 0x1016ba
/Users/jackson/go/src/github.com/cockroachdb/pebble/ingest.go:1118 +0xb8 fp=0x14
github.com/cockroachdb/pebble/metamorphic.(*ingestOp).run.func1(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/ops.go:740
github.com/cockroachdb/pebble/metamorphic.withRetries(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/retryable.go:29
github.com/cockroachdb/pebble/metamorphic.(*Test).withRetries(...)
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/test.go:304
github.com/cockroachdb/pebble/metamorphic.(*ingestOp).run(0x1400041ebc0, 0x1400059
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/ops.go:739 +0x5c
github.com/cockroachdb/pebble/metamorphic.(*Test).runOp(0x1400059a360?, 0x14000119
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/test.go:446 +0x1
github.com/cockroachdb/pebble/metamorphic.Execute.func1()
/Users/jackson/go/src/github.com/cockroachdb/pebble/metamorphic/meta.go:655 +0x1
golang.org/x/sync/errgroup.(*Group).Go.func1()
/Users/jackson/go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:78 +0x54
runtime.goexit({})
/usr/local/go/src/runtime/asm_arm64.s:1223 +0x4 fp=0x1400031ffd0 sp=0x1400031ffd
created by golang.org/x/sync/errgroup.(*Group).Go in goroutine 9
/Users/jackson/go/pkg/mod/golang.org/x/sync@v0.7.0/errgroup/errgroup.go:75 +0xb8
```
Jira issue: PEBBLE-1095
Contributor guide
No contributing guide indexed for this repository
Research direction
Reproduce the failure with GOEXPERIMENT=cgocheck2 go test -tags invariants, then trace the reported path through internal/cache/clockpro.go, sstable/block/block.go, and ingest.go. Determine where the unpinned pointer reaches cgo memory; done means the invariants test completes without the reported runtime error.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- go
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100