StoredDict: use pointers instead of path
Instead of storing its own path, each StoredDict element stores its own key and a pointer to its parent. If a dict is removed from the db, its parent pointer is set to None. This makes self.path return None for all branches that have been pruned. This passes tests/tests_json_db.py and fixes issue #10000
This commit is contained in:
@@ -118,7 +118,7 @@ def create_channel_state(funding_txid, funding_index, funding_sat, is_initiator,
|
||||
'revocation_store': {},
|
||||
'channel_type': channel_type,
|
||||
}
|
||||
return StoredDict(state, None, [])
|
||||
return StoredDict(state, None)
|
||||
|
||||
|
||||
def bip32(sequence):
|
||||
|
||||
@@ -14,8 +14,8 @@ class H(NamedTuple):
|
||||
|
||||
class TestHTLCManager(ElectrumTestCase):
|
||||
def test_adding_htlcs_race(self):
|
||||
A = HTLCManager(StoredDict({}, None, []))
|
||||
B = HTLCManager(StoredDict({}, None, []))
|
||||
A = HTLCManager(StoredDict({}, None))
|
||||
B = HTLCManager(StoredDict({}, None))
|
||||
A.channel_open_finished()
|
||||
B.channel_open_finished()
|
||||
ah0, bh0 = H('A', 0), H('B', 0)
|
||||
@@ -61,8 +61,8 @@ class TestHTLCManager(ElectrumTestCase):
|
||||
|
||||
def test_single_htlc_full_lifecycle(self):
|
||||
def htlc_lifecycle(htlc_success: bool):
|
||||
A = HTLCManager(StoredDict({}, None, []))
|
||||
B = HTLCManager(StoredDict({}, None, []))
|
||||
A = HTLCManager(StoredDict({}, None))
|
||||
B = HTLCManager(StoredDict({}, None))
|
||||
A.channel_open_finished()
|
||||
B.channel_open_finished()
|
||||
B.recv_htlc(A.send_htlc(H('A', 0)))
|
||||
@@ -134,8 +134,8 @@ class TestHTLCManager(ElectrumTestCase):
|
||||
|
||||
def test_remove_htlc_while_owing_commitment(self):
|
||||
def htlc_lifecycle(htlc_success: bool):
|
||||
A = HTLCManager(StoredDict({}, None, []))
|
||||
B = HTLCManager(StoredDict({}, None, []))
|
||||
A = HTLCManager(StoredDict({}, None))
|
||||
B = HTLCManager(StoredDict({}, None))
|
||||
A.channel_open_finished()
|
||||
B.channel_open_finished()
|
||||
ah0 = H('A', 0)
|
||||
@@ -171,8 +171,8 @@ class TestHTLCManager(ElectrumTestCase):
|
||||
htlc_lifecycle(htlc_success=False)
|
||||
|
||||
def test_adding_htlc_between_send_ctx_and_recv_rev(self):
|
||||
A = HTLCManager(StoredDict({}, None, []))
|
||||
B = HTLCManager(StoredDict({}, None, []))
|
||||
A = HTLCManager(StoredDict({}, None))
|
||||
B = HTLCManager(StoredDict({}, None))
|
||||
A.channel_open_finished()
|
||||
B.channel_open_finished()
|
||||
A.send_ctx()
|
||||
@@ -217,8 +217,8 @@ class TestHTLCManager(ElectrumTestCase):
|
||||
self.assertEqual([(Direction.RECEIVED, ah0)], A.get_htlcs_in_next_ctx(REMOTE))
|
||||
|
||||
def test_unacked_local_updates(self):
|
||||
A = HTLCManager(StoredDict({}, None, []))
|
||||
B = HTLCManager(StoredDict({}, None, []))
|
||||
A = HTLCManager(StoredDict({}, None))
|
||||
B = HTLCManager(StoredDict({}, None))
|
||||
A.channel_open_finished()
|
||||
B.channel_open_finished()
|
||||
self.assertEqual({}, A.get_unacked_local_updates())
|
||||
|
||||
@@ -474,7 +474,7 @@ class TestLNUtil(ElectrumTestCase):
|
||||
]
|
||||
|
||||
for test in tests:
|
||||
receiver = RevocationStore(StoredDict({}, None, []))
|
||||
receiver = RevocationStore(StoredDict({}, None))
|
||||
for insert in test["inserts"]:
|
||||
secret = bytes.fromhex(insert["secret"])
|
||||
|
||||
@@ -497,7 +497,7 @@ class TestLNUtil(ElectrumTestCase):
|
||||
|
||||
def test_shachain_produce_consume(self):
|
||||
seed = bitcoin.sha256(b"shachaintest")
|
||||
consumer = RevocationStore(StoredDict({}, None, []))
|
||||
consumer = RevocationStore(StoredDict({}, None))
|
||||
for i in range(10000):
|
||||
secret = get_per_commitment_secret_from_seed(seed, RevocationStore.START_INDEX - i)
|
||||
try:
|
||||
@@ -507,7 +507,7 @@ class TestLNUtil(ElectrumTestCase):
|
||||
if i % 1000 == 0:
|
||||
c1 = consumer
|
||||
s1 = json.dumps(c1.storage, cls=MyEncoder)
|
||||
c2 = RevocationStore(StoredDict(json.loads(s1), None, []))
|
||||
c2 = RevocationStore(StoredDict(json.loads(s1), None))
|
||||
s2 = json.dumps(c2.storage, cls=MyEncoder)
|
||||
self.assertEqual(s1, s2)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user