canopy-network/canopy · error · ErrStoreGet
iterator not supported on subtree store
Error message
iterator not supported on subtree store
What it means
Raised unconditionally by subtreeStore.Iterator. A subtreeStore is an in-memory overlay of pending writes over a store prefix; it has no key-ordered scan capability, so iteration is deliberately unsupported. Any caller attempting prefix/range iteration over a subtree store gets this error instead of wrong results.
Source
Thrown at store/txn.go:366
return s.reader.Get(lib.Append(s.prefix, key))
}
func (s *subtreeStore) Set(key, value []byte) lib.ErrorI {
s.l.Lock()
s.ops[lib.MemHash(key)] = valueOp{key: key, value: value, version: s.version, op: opSet}
s.l.Unlock()
return nil
}
func (s *subtreeStore) Delete(key []byte) lib.ErrorI {
s.l.Lock()
s.ops[lib.MemHash(key)] = valueOp{key: key, version: s.version, op: opDelete}
s.l.Unlock()
return nil
}
func (s *subtreeStore) Iterator([]byte) (lib.IteratorI, lib.ErrorI) {
return nil, ErrStoreGet(fmt.Errorf("iterator not supported on subtree store"))
}
func (s *subtreeStore) RevIterator([]byte) (lib.IteratorI, lib.ErrorI) {
return nil, ErrStoreGet(fmt.Errorf("reverse iterator not supported on subtree store"))
}
// Copy creates a new Txn with the same configuration and txn as the original
func (t *Txn) Copy(reader TxnReaderI, writer TxnWriterI) *Txn {
return &Txn{
reader: reader,
writer: writer,
prefix: t.prefix,
state: t.state,
sort: t.sort,
writeVersion: t.writeVersion,
txn: t.txn.copy(),
}
}View on GitHub (pinned to ee8197d91d)
Solutions
- Refactor the caller to iterate over the underlying full store rather than the subtree overlay.
- Accumulate keys into a slice during writes if ordered traversal is needed, and iterate that instead.
- Use Get for point lookups only on subtreeStore.
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at store/txn.go:366 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of canopy-network/canopy@ee8197d91d (2026-09-06).
Data as JSON: /api/errors/c54ac0d6dc508ef5.
Report an issue: GitHub.