From a666910702c3704fcfd2dd9251ae8c16b015820c Mon Sep 17 00:00:00 2001 From: Holger <holger@nahrstaedt.de> Date: Mon, 9 Jul 2018 14:50:40 +0200 Subject: [PATCH] Add blocknumber check to wait_for_and_get_block --- README.rst | 2 ++ beem/blockchain.py | 10 +++++++--- examples/stream_threading_performance.py | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index a6c47a45..c3b5825a 100644 --- a/README.rst +++ b/README.rst @@ -162,6 +162,8 @@ Changelog * Unit tests using testnet fixed * beem.snapshot improved * Example account_sp_over_time added +* Example account_curation_per_week_and_1k_sp added +* Add block_number check to wait_for_and_get_block 0.19.46 ------- diff --git a/beem/blockchain.py b/beem/blockchain.py index 1ce7b391..c903d0be 100644 --- a/beem/blockchain.py +++ b/beem/blockchain.py @@ -405,6 +405,7 @@ class Blockchain(object): num_retries_call=self.steem.rpc.num_retries_call, timeout=self.steem.rpc.timeout)) # We are going to loop indefinitely + latest_block = 0 while True: # Get chain properies to identify the @@ -547,7 +548,7 @@ class Blockchain(object): # Blocks from start until head block for blocknum in range(start, head_block + 1): # Get full block - block = self.wait_for_and_get_block(blocknum, only_ops=only_ops, only_virtual_ops=only_virtual_ops) + block = self.wait_for_and_get_block(blocknum, only_ops=only_ops, only_virtual_ops=only_virtual_ops, block_number_check_cnt=5) yield block # Set new start start = head_block + 1 @@ -560,7 +561,7 @@ class Blockchain(object): # Sleep for one block time.sleep(self.block_interval) - def wait_for_and_get_block(self, block_number, blocks_waiting_for=None, only_ops=False, only_virtual_ops=False): + def wait_for_and_get_block(self, block_number, blocks_waiting_for=None, only_ops=False, only_virtual_ops=False, block_number_check_cnt=-1): """ Get the desired block from the chain, if the current head block is smaller (for both head and irreversible) then we wait, but a maxmimum of blocks_waiting_for * max_block_wait_repetition time before failure. @@ -569,6 +570,7 @@ class Blockchain(object): how many blocks we are willing to wait, positive int (default: None) :param bool only_ops: Returns blocks with operations only, when set to True (default: False) :param bool only_virtual_ops: Includes only virtual operations (default: False) + :param int block_number_check_cnt: limit the number of retries when greater than -1 """ if not blocks_waiting_for: @@ -584,10 +586,12 @@ class Blockchain(object): raise BlockWaitTimeExceeded("Already waited %d s" % (blocks_waiting_for * self.max_block_wait_repetition * self.block_interval)) # block has to be returned properly repetition = 0 + cnt = 0 block = None - while not block: + while (block is None or block.block_num is None or int(block.block_num) != block_number) and (block_number_check_cnt < 0 or cnt < block_number_check_cnt): try: block = Block(block_number, only_ops=only_ops, only_virtual_ops=only_virtual_ops, steem_instance=self.steem) + cnt += 1 except BlockDoesNotExistsException: block = None if repetition > blocks_waiting_for * self.max_block_wait_repetition: diff --git a/examples/stream_threading_performance.py b/examples/stream_threading_performance.py index 1977d42f..2508ae6d 100644 --- a/examples/stream_threading_performance.py +++ b/examples/stream_threading_performance.py @@ -47,7 +47,7 @@ if __name__ == "__main__": stm_https = Steem(node=node_list_https, timeout=timeout) print("Without threading wss") opcount_wot_wss, total_duration_wot_wss = stream_votes(stm_wss, False, 8) - print("Without threading wss") + print("Without threading https") opcount_wot_https, total_duration_wot_https = stream_votes(stm_https, False, 8) if threading: print("\n Threading with %d threads is activated now." % thread_num) -- GitLab