Skip to content

Commit 5397713

Browse files
committed
fix bug, revert field deletion, docs
1 parent 65db861 commit 5397713

File tree

2 files changed

+17
-6
lines changed

2 files changed

+17
-6
lines changed

iavl/internal/mem_node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func (node *MemNode) Version() uint32 {
4444

4545
// Key implements the Node interface.
4646
func (node *MemNode) Key() (UnsafeBytes, error) {
47-
return WrapUnsafeBytes(node.key), nil
47+
return WrapSafeBytes(node.key), nil
4848
}
4949

5050
// Value implements the Node interface.

iavl/internal/node_pointer.go

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@ import (
77

88
// NodePointer is a pointer to a Node, which may be either in-memory, on-disk or both.
99
type NodePointer struct {
10-
mem atomic.Pointer[MemNode]
11-
fileIdx uint32 // absolute index in file, 1-based, zero means we don't have an offset
12-
id NodeID
10+
mem atomic.Pointer[MemNode]
11+
changeset *Changeset
12+
fileIdx uint32 // absolute index in file, 1-based, zero means we don't have an offset
13+
id NodeID
1314
}
1415

1516
// NewNodePointer creates a new NodePointer pointing to the given in-memory node.
@@ -19,13 +20,23 @@ func NewNodePointer(memNode *MemNode) *NodePointer {
1920
return n
2021
}
2122

22-
// Resolve resolves the NodePointer to a Node, loading from memory or disk as necessary.
23+
// Resolve resolves the NodePointer to a Node, loading from memory or disk as necessary
24+
// as well as a Pin which MUST be unpinned after the caller is done using the node.
25+
// Resolve will ALWAYS return a valid Pin even if there is an error. For clarity and
26+
// consistency it is recommended to introduce a defer pin.Unpin() immediately after
27+
// calling Resolve and BEFORE checking the error return value like this:
28+
//
29+
// node, pin, err := nodePointer.Resolve()
30+
// defer pin.Unpin()
31+
// if err != nil {
32+
// // handle error
33+
// }
2334
func (p *NodePointer) Resolve() (Node, Pin, error) {
2435
mem := p.mem.Load()
2536
if mem != nil {
2637
return mem, NoopPin{}, nil
2738
}
28-
panic("not implemented: loading from disk")
39+
return nil, NoopPin{}, fmt.Errorf("node not in memory and on-disk loading will be implemented in a future PR")
2940
}
3041

3142
// String implements the fmt.Stringer interface.

0 commit comments

Comments
 (0)