#!/usr/bin/env python3 from contextlib import ExitStack from hse2 import hse from utility import lifecycle, cli hse.init(cli.HOME) try: with ExitStack() as stack: kvdb_ctx = lifecycle.KvdbContext() kvdb = stack.enter_context(kvdb_ctx) kvs_ctx = lifecycle.KvsContext(kvdb, "txn_seek_del_put_next").rparams( "transactions_enable=1" ) kvs = stack.enter_context(kvs_ctx) with kvdb.transaction() as txn: kvs.put(b"a", b"1", txn=txn) kvs.put(b"b", b"2", txn=txn) kvs.put(b"c", b"3", txn=txn) with kvdb.transaction() as txn: txcursor = kvs.cursor(txn=txn) txcursor.seek(b"a") kvs.delete(b"a", txn=txn) with kvdb.transaction() as txn: kvs.put(b"a", b"11", txn=txn)
#!/usr/bin/env python3 from contextlib import ExitStack from hse2 import hse from utility import lifecycle, cli hse.init(cli.HOME) try: with ExitStack() as stack: kvdb_ctx = lifecycle.KvdbContext().rparams("dur_enable=0") kvdb = stack.enter_context(kvdb_ctx) kvs_ctx = lifecycle.KvsContext(kvdb, "sfx_test_c0").cparams( "pfx_len=1", "sfx_len=2") kvs = stack.enter_context(kvs_ctx) kvs.put(b"AbaXX", b"42") kvs.put(b"AbcXX", b"42") kvs.put(b"AbdXX", b"42") cnt, *kv = kvs.prefix_probe(b"Abc") assert cnt == hse.KvsPfxProbeCnt.ONE assert kv == [b"AbcXX", b"42"] kvdb.sync(flags=hse.SyncFlag.ASYNC) kvs.put(b"AbcXX", b"43") # duplicate cnt, *kv = kvs.prefix_probe(b"Abc") assert cnt == hse.KvsPfxProbeCnt.ONE assert kv == [b"AbcXX", b"43"]
#!/usr/bin/env python3 # SPDX-License-Identifier: Apache-2.0 # # Copyright (C) 2021 Micron Technology, Inc. All rights reserved. from contextlib import ExitStack from hse2 import hse from utility import lifecycle, cli hse.init(cli.CONFIG) try: with ExitStack() as stack: kvdb_ctx = lifecycle.KvdbContext().rparams("durability.enabled=false") kvdb = stack.enter_context(kvdb_ctx) kvs_ctx = lifecycle.KvsContext( kvdb, "cn_seqno").rparams("transactions.enabled=true") kvs = stack.enter_context(kvs_ctx) txn = kvdb.transaction() txn.begin() with kvdb.transaction() as t: kvs.put(b"a", b"1", txn=t) kvdb.sync() txcursor = kvs.cursor(txn=txn) txcursor.read()
#!/usr/bin/env python3 from hse2 import hse from utility import lifecycle, cli # Verify a case where full scan and pfx scan return equivalent results keycount = 10 * 1024 * 1024 hse.init(cli.HOME) try: with lifecycle.KvdbContext() as kvdb: for pfxlen in range(4): with lifecycle.KvsContext(kvdb, f"compare_full_and_pfx{pfxlen}") as kvs: for i in range(keycount): if i % 2 == 0: key = f"XXXX{i}".encode() else: key = f"CCCC{i}".encode() kvs.put(key, None) with kvs.cursor() as c1: s1 = sum(1 for _ in c1.items()) with kvs.cursor(b"CCCC") as c2: s2 = sum(1 for _ in c2.items()) assert s1 == keycount assert s2 == keycount / 2
#!/usr/bin/env python3 from hse2 import hse from utility import lifecycle hse.init() try: with lifecycle.KvdbContext().rparams("dur_enable=0") as kvdb: # Test 1: Update after seek. Seek can be to an existing key or non-existent key with lifecycle.KvsContext(kvdb, "pos_stab-1") as kvs: kvs.put(b"a", b"1") kvs.put(b"b", b"2") kvs.put(b"d", b"4") kvs.put(b"e", b"5") cursor = kvs.cursor() # seek to an existing key and update_view. cursor.seek(b"b") cursor.update_view() kv = cursor.read() assert kv == (b"b", b"2") # seek to a non-existent key and update_view. cursor.seek(b"c") kvs.put(b"c", b"3") cursor.update_view() kv = cursor.read()