Skip to content

Commit 3aa45fa

Browse files
committed
Improved logic for async fully-exhaust query map
1 parent d28ea7d commit 3aa45fa

File tree

2 files changed

+30
-22
lines changed

2 files changed

+30
-22
lines changed

async_substrate_interface/async_substrate.py

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3670,34 +3670,40 @@ async def query_map(
36703670
self.decode_ss58,
36713671
)
36723672
else:
3673-
all_responses = []
36743673
page_batches = [
36753674
result_keys[i : i + page_size]
36763675
for i in range(0, len(result_keys), page_size)
36773676
]
36783677
changes = []
3679-
for batch_group in [
3680-
# run five concurrent batch pulls; could go higher, but it's good to be a good citizens
3681-
# of the ecosystem
3682-
page_batches[i : i + 5]
3683-
for i in range(0, len(page_batches), 5)
3684-
]:
3685-
all_responses.extend(
3686-
await asyncio.gather(
3687-
*[
3688-
self.rpc_request(
3689-
method="state_queryStorageAt",
3690-
params=[batch_keys, block_hash],
3691-
runtime=runtime,
3692-
)
3693-
for batch_keys in batch_group
3694-
]
3678+
payloads = []
3679+
for idx, page_batch in enumerate(page_batches):
3680+
payloads.append(
3681+
self.make_payload(
3682+
str(idx), "state_queryStorageAt", [page_batch, block_hash]
36953683
)
36963684
)
3697-
for response in all_responses:
3698-
for result_group in response["result"]:
3699-
changes.extend(result_group["changes"])
3700-
3685+
results: RequestResults = await self._make_rpc_request(
3686+
payloads, runtime=runtime
3687+
)
3688+
for result in results.values():
3689+
res = result[0]
3690+
if "error" in res:
3691+
err_msg = res["error"]["message"]
3692+
if (
3693+
"Client error: Api called for an unknown Block: State already discarded"
3694+
in err_msg
3695+
):
3696+
bh = err_msg.split("State already discarded for ")[
3697+
1
3698+
].strip()
3699+
raise StateDiscardedError(bh)
3700+
else:
3701+
raise SubstrateRequestException(err_msg)
3702+
elif "result" not in res:
3703+
raise SubstrateRequestException(res)
3704+
else:
3705+
for result_group in res["result"]:
3706+
changes.extend(result_group["changes"])
37013707
result = decode_query_map(
37023708
changes,
37033709
prefix,

async_substrate_interface/utils/decoding.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,9 @@ def concat_hash_len(key_hasher: str) -> int:
113113

114114
for item in result_group_changes:
115115
pre_decoded_keys.append(bytes.fromhex(item[0][len(prefix) :]))
116-
pre_decoded_values.append(hex_to_bytes_(item[1]))
116+
pre_decoded_values.append(
117+
hex_to_bytes_(item[1]) if item[1] is not None else b""
118+
)
117119
all_decoded = _decode_scale_list_with_runtime(
118120
pre_decoded_key_types + pre_decoded_value_types,
119121
pre_decoded_keys + pre_decoded_values,

0 commit comments

Comments
 (0)