Skip to content

Commit eab7c04

Browse files
committed
Problem: new version + local nonce key is not supported
add prefix constant
1 parent cec2783 commit eab7c04

File tree

4 files changed

+21
-15
lines changed

4 files changed

+21
-15
lines changed

iavl/cli.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@
99
from hexbytes import HexBytes
1010

1111
from . import dbm
12-
from .utils import (decode_fast_node, diff_iterators, encode_stdint,
12+
from .utils import (METADATA_KEY_PREFIX, ORPHAN_KEY_PREFIX, ROOT_KEY_PREFIX,
13+
decode_fast_node, diff_iterators, encode_stdint,
1314
fast_node_key, get_node, get_root_node,
1415
iavl_latest_version, iter_fast_nodes, iter_iavl_tree,
1516
load_commit_infos, root_key, store_prefix)
@@ -85,7 +86,7 @@ def root_versions(db, store: str, reverse: bool = False):
8586
"""
8687
iterate all root versions
8788
"""
88-
begin = store_prefix(store) + b"r"
89+
begin = store_prefix(store) + ROOT_KEY_PREFIX
8990
end = store_prefix(store) + b"s" # exclusive
9091

9192
db = dbm.open(str(db), read_only=True)
@@ -155,7 +156,7 @@ def metadata(db, store):
155156
raise click.UsageError("no store names are provided")
156157
db = dbm.open(str(db), read_only=True)
157158
for s in store:
158-
bz = db.get(store_prefix(s) + b"m" + b"storage_version")
159+
bz = db.get(store_prefix(s) + METADATA_KEY_PREFIX + b"storage_version")
159160
print(f"{s} storage version: {bz.decode()}")
160161
print(f"{s} latest version: {iavl_latest_version(db, s)}")
161162

@@ -323,7 +324,7 @@ def fast_rollback(
323324
ver = iavl_latest_version(db, info.name)
324325

325326
print("delete orphan entries created since target version")
326-
orphan_prefix = prefix + b"o" + target.to_bytes(8, "big")
327+
orphan_prefix = prefix + ORPHAN_KEY_PREFIX + target.to_bytes(8, "big")
327328
it = db.iterkeys()
328329
it.seek(orphan_prefix)
329330
for k in it:

iavl/diff.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
from . import dbm
1212
from .iavl import NodeDB, PersistedNode, Tree
13-
from .utils import GetNode, root_key, visit_iavl_nodes
13+
from .utils import ROOT_KEY_PREFIX, GetNode, root_key, visit_iavl_nodes
1414

1515

1616
class Op(IntEnum):
@@ -197,7 +197,7 @@ def iter_state_changes(
197197
it = db.iteritems()
198198
it.seek(prefix + root_key(start_version))
199199
for k, hash in it:
200-
if not k.startswith(prefix + b"r"):
200+
if not k.startswith(prefix + ROOT_KEY_PREFIX):
201201
break
202202
v = int.from_bytes(k[len(prefix) + 1 :], "big")
203203
if end_version is not None and v >= end_version:

iavl/iavl.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
import cprotobuf
1010
import rocksdb
1111

12-
from .utils import (GetNode, PersistedNode, encode_bytes, node_key, root_key,
13-
visit_iavl_nodes)
12+
from .utils import (ROOT_KEY_PREFIX, GetNode, PersistedNode, encode_bytes,
13+
node_key, root_key, visit_iavl_nodes)
1414

1515
NodeRef = Union[bytes, "Node"]
1616

@@ -104,7 +104,7 @@ def next_version(self, v: int) -> Optional[int]:
104104
k = next(it, None)
105105
if k is None:
106106
return
107-
if not k.startswith(self.prefix + b"r"):
107+
if not k.startswith(self.prefix + ROOT_KEY_PREFIX):
108108
return
109109

110110
return int.from_bytes(k[len(self.prefix) + 1 :], "big")
@@ -119,7 +119,7 @@ def prev_version(self, v: int) -> Optional[int]:
119119
key = next(it, None)
120120
if key == target:
121121
key = next(it, None)
122-
if key is None or not key.startswith(self.prefix + b"r"):
122+
if key is None or not key.startswith(self.prefix + ROOT_KEY_PREFIX):
123123
return
124124
return int.from_bytes(key[len(self.prefix) + 1 :], "big")
125125

iavl/utils.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@
99
from .dbm import DBM
1010

1111
EMPTY_HASH = hashlib.sha256().digest()
12+
FAST_KEY_PREFIX = b"f"
13+
METADATA_KEY_PREFIX = b"m"
14+
NODE_KEY_PREFIX = b"n"
15+
ORPHAN_KEY_PREFIX = b"o"
16+
ROOT_KEY_PREFIX = b"r"
1217
GetNode = Callable[bytes, Optional["PersistedNode"]]
1318

1419

@@ -126,15 +131,15 @@ def prefix_iteritems(
126131

127132

128133
def root_key(v: int) -> bytes:
129-
return b"r" + v.to_bytes(8, "big")
134+
return ROOT_KEY_PREFIX + v.to_bytes(8, "big")
130135

131136

132137
def node_key(hash: bytes) -> bytes:
133-
return b"n" + hash
138+
return NODE_KEY_PREFIX + hash
134139

135140

136141
def fast_node_key(key: bytes) -> bytes:
137-
return b"f" + key
142+
return FAST_KEY_PREFIX + key
138143

139144

140145
def store_prefix(s: str) -> bytes:
@@ -157,7 +162,7 @@ def prev_version(db: DBM, store: str, v: int) -> Optional[int]:
157162
return
158163
if k >= target:
159164
k = next(it)
160-
if not k.startswith(prefix + b"r"):
165+
if not k.startswith(prefix + ROOT_KEY_PREFIX):
161166
return
162167
# parse version from key
163168
return int.from_bytes(k[len(prefix) + 1 :], "big")
@@ -268,7 +273,7 @@ def iter_fast_nodes(db: DBM, store: str, start: Optional[bytes], end: Optional[b
268273
"""
269274
it = db.iteritems()
270275

271-
prefix = store_prefix(store) + b"f"
276+
prefix = store_prefix(store) + FAST_KEY_PREFIX
272277
if start is None:
273278
start = prefix
274279
else:

0 commit comments

Comments
 (0)