From ca313631804cbf270ad32b1ef6479b48168098c0 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Mon, 30 Mar 2020 14:53:52 -0400 Subject: [PATCH 1/4] listen for on_read.first before it is triggered --- lbry/wallet/ledger.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lbry/wallet/ledger.py b/lbry/wallet/ledger.py index 6e9607b58..d3b63eacd 100644 --- a/lbry/wallet/ledger.py +++ b/lbry/wallet/ledger.py @@ -317,6 +317,7 @@ class Ledger(metaclass=LedgerRegistry): self.headers.open() ]) first_connection = self.network.on_connected.first + first_ready = self.on_ready.first asyncio.ensure_future(self.network.start()) await first_connection async with self._header_processing_lock: @@ -328,7 +329,7 @@ class Ledger(metaclass=LedgerRegistry): else: await self._report_state() self.on_transaction.listen(self._reset_balance_cache) - await self.on_ready.first + await first_ready async def join_network(self, *_): log.info("Subscribing and updating accounts.") From 85551d1e54cc0b076baf0da7c3b5d4b02e7dcd51 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Mon, 30 Mar 2020 15:17:25 -0400 Subject: [PATCH 2/4] remove no-op test, segwit is always on now --- .../integration/blockchain/test_wallet_server_sessions.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/integration/blockchain/test_wallet_server_sessions.py b/tests/integration/blockchain/test_wallet_server_sessions.py index 355f98762..059da8e65 100644 --- a/tests/integration/blockchain/test_wallet_server_sessions.py +++ b/tests/integration/blockchain/test_wallet_server_sessions.py @@ -45,14 +45,6 @@ class TestSessions(IntegrationTestCase): await self.ledger.network.broadcast('13370042004200') -class TestSegwitServer(IntegrationTestCase): - LEDGER = lbry.wallet - ENABLE_SEGWIT = True - - async def test_at_least_it_starts(self): - await asyncio.wait_for(self.ledger.network.get_headers(0, 1), 1.0) - - class TestUsagePayment(CommandTestCase): async def test_single_server_payment(self): wallet_pay_service = self.daemon.component_manager.get_component('wallet_server_payments') From ed38966edb17227ab456db33f0c9815dc55882e6 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Mon, 30 Mar 2020 15:26:04 -0400 Subject: [PATCH 3/4] add test to verify we listen to on_ready before it actually triggers --- tests/integration/blockchain/test_network.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/tests/integration/blockchain/test_network.py b/tests/integration/blockchain/test_network.py index f2222d560..fdfa85c95 100644 --- a/tests/integration/blockchain/test_network.py +++ b/tests/integration/blockchain/test_network.py @@ -1,4 +1,3 @@ -import logging import asyncio import lbry @@ -61,7 +60,14 @@ class NetworkTests(IntegrationTestCase): }, await self.ledger.network.get_server_features()) -class ReconnectTests(IntegrationTestCase): +class NetworkConnectionTests(IntegrationTestCase): + + async def test_on_ready_listening_before_event_fix_2896(self): + await self.ledger.stop() + # slow down other parts to make network finish first and fire on_ready + self.account.maybe_migrate_certificates = lambda: asyncio.sleep(2) + await asyncio.wait_for(self.ledger.start(), timeout=3) + # above ledger.start() will fail if on_ready fired before listening async def test_multiple_servers(self): # we have a secondary node that connects later, so From a8153627c6fdad336664e69868e7ab7c7fc43fb4 Mon Sep 17 00:00:00 2001 From: Lex Berezhny Date: Mon, 30 Mar 2020 17:02:08 -0400 Subject: [PATCH 4/4] move on_read.first to earlier --- lbry/wallet/ledger.py | 11 ++++------- tests/integration/blockchain/test_network.py | 9 +-------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/lbry/wallet/ledger.py b/lbry/wallet/ledger.py index d3b63eacd..27a0ed992 100644 --- a/lbry/wallet/ledger.py +++ b/lbry/wallet/ledger.py @@ -316,12 +316,12 @@ class Ledger(metaclass=LedgerRegistry): self.db.open(), self.headers.open() ]) - first_connection = self.network.on_connected.first - first_ready = self.on_ready.first - asyncio.ensure_future(self.network.start()) - await first_connection + fully_synced = self.on_ready.first + asyncio.create_task(self.network.start()) + await self.network.on_connected.first async with self._header_processing_lock: await self._update_tasks.add(self.initial_headers_sync()) + await fully_synced await asyncio.gather(*(a.maybe_migrate_certificates() for a in self.accounts)) await asyncio.gather(*(a.save_max_gap() for a in self.accounts)) if len(self.accounts) > 10: @@ -329,12 +329,9 @@ class Ledger(metaclass=LedgerRegistry): else: await self._report_state() self.on_transaction.listen(self._reset_balance_cache) - await first_ready async def join_network(self, *_): log.info("Subscribing and updating accounts.") - async with self._header_processing_lock: - await self._update_tasks.add(self.initial_headers_sync()) await self._update_tasks.add(self.subscribe_accounts()) await self._update_tasks.done.wait() self._on_ready_controller.add(True) diff --git a/tests/integration/blockchain/test_network.py b/tests/integration/blockchain/test_network.py index fdfa85c95..eacd0d0e6 100644 --- a/tests/integration/blockchain/test_network.py +++ b/tests/integration/blockchain/test_network.py @@ -60,14 +60,7 @@ class NetworkTests(IntegrationTestCase): }, await self.ledger.network.get_server_features()) -class NetworkConnectionTests(IntegrationTestCase): - - async def test_on_ready_listening_before_event_fix_2896(self): - await self.ledger.stop() - # slow down other parts to make network finish first and fire on_ready - self.account.maybe_migrate_certificates = lambda: asyncio.sleep(2) - await asyncio.wait_for(self.ledger.start(), timeout=3) - # above ledger.start() will fail if on_ready fired before listening +class ReconnectTests(IntegrationTestCase): async def test_multiple_servers(self): # we have a secondary node that connects later, so