forked from LBRYCommunity/lbry-sdk
Merge pull request #3221 from lbryio/subscribe_hash_on_call
Improve performance of address subscriptions and transaction proofs
This commit is contained in:
commit
fe60d4be88
1 changed files with 4 additions and 6 deletions
|
@ -1275,10 +1275,9 @@ class LBRYElectrumX(SessionBase):
|
||||||
address: the address to subscribe to"""
|
address: the address to subscribe to"""
|
||||||
if len(addresses) > 1000:
|
if len(addresses) > 1000:
|
||||||
raise RPCError(BAD_REQUEST, f'too many addresses in subscription request: {len(addresses)}')
|
raise RPCError(BAD_REQUEST, f'too many addresses in subscription request: {len(addresses)}')
|
||||||
hashXes = [
|
return [
|
||||||
(self.address_to_hashX(address), address) for address in addresses
|
await self.hashX_subscribe(self.address_to_hashX(address), address) for address in addresses
|
||||||
]
|
]
|
||||||
return [await self.hashX_subscribe(*args) for args in hashXes]
|
|
||||||
|
|
||||||
async def address_unsubscribe(self, address):
|
async def address_unsubscribe(self, address):
|
||||||
"""Unsubscribe an address.
|
"""Unsubscribe an address.
|
||||||
|
@ -1553,15 +1552,14 @@ class LBRYElectrumX(SessionBase):
|
||||||
else:
|
else:
|
||||||
batch_result[tx_hash] = [raw_tx, {'block_height': -1}]
|
batch_result[tx_hash] = [raw_tx, {'block_height': -1}]
|
||||||
|
|
||||||
def threaded_get_merkle():
|
if needed_merkles:
|
||||||
for tx_hash, (raw_tx, block_txs, pos, block_height) in needed_merkles.items():
|
for tx_hash, (raw_tx, block_txs, pos, block_height) in needed_merkles.items():
|
||||||
batch_result[tx_hash] = raw_tx, {
|
batch_result[tx_hash] = raw_tx, {
|
||||||
'merkle': self._get_merkle_branch(block_txs, pos),
|
'merkle': self._get_merkle_branch(block_txs, pos),
|
||||||
'pos': pos,
|
'pos': pos,
|
||||||
'block_height': block_height
|
'block_height': block_height
|
||||||
}
|
}
|
||||||
if needed_merkles:
|
await asyncio.sleep(0) # heavy call, give other tasks a chance
|
||||||
await asyncio.get_running_loop().run_in_executor(self.db.executor, threaded_get_merkle)
|
|
||||||
|
|
||||||
self.session_mgr.tx_replied_count_metric.inc(len(tx_hashes))
|
self.session_mgr.tx_replied_count_metric.inc(len(tx_hashes))
|
||||||
return batch_result
|
return batch_result
|
||||||
|
|
Loading…
Reference in a new issue