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

  1. Refactor the caller to iterate over the underlying full store rather than the subtree overlay.
  2. Accumulate keys into a slice during writes if ordered traversal is needed, and iterate that instead.
  3. 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.