Seems like the idea was to log an overview of message types for the
currently active api calls whenever we have multiples of 100 running.
This currently isn't working at all because `len(message_types) % 100 ==
0` will only trigger if there are 100 different message types in the
counter (we don't even have that much different messages). A fix would
be to check `message_types.total() % 100 == 0`. But then, if we hover
around 100 active messages this will repeatedly trigger logs since we
decrement for each processed message, im not sure this all makes much
sense and we anyway log all received message types with `DEBUG` logs so
i decided to just drop this. If someone thinks we should keep it with
the fix or has ideas to make this a more reasonable log instead of
dropping it, let me know :)
* mixed rework around tx records and offer takes
* more
* wait for wallets
* process_transaction_records() -> process_transactions()
* correct to use new bundles= parameter a couple spots
* .process_transaction_records()
* .process_spend_bundles()
* always call close callback
* Some further explorations
* some more explorations
* Add delay while connections are closed in test
* Add a delay to make sure connections drain
* Update chia/server/server.py
Co-authored-by: Kyle Altendorf <sda@fstab.net>
* Update tests/connection_utils.py
Co-authored-by: Kyle Altendorf <sda@fstab.net>
* use log_exceptions context manager
* set close flag correctly
* Added callback type and other changes
Co-authored-by: Kyle Altendorf <sda@fstab.net>
* Delete DID wallet after transfer
* Adjust tests
* Fix merge
* Remove rl_wallet
* Fix tests
* Fix DID bugs
* Add tests
* Add additional spend for DID update
* Fix unit test
* Handle bugged DID
* Cover empty hint case
* Fix unnecessary DID deletion
* util: `message_class: Optional[Any]` -> `message_class: Any`
Im working towards more strict mypy in `chia.server.ws_connection` and
this change helps there while (i think) it still retains the same
behaviour.
* Make it `Optional[Type[Streamable]]`
* Make `CallInfo` and `Frame` a `dataclass` and move them to the top level
* Use `click` in `memory_profiler.py`
* Move `mem_profile_task` into `chia.util.profiler`
* Move `chia.util.memory_profiler.py` to `tools/analyze_memory_profile.py`
* Implement `Frame.add`
* treat Semaphore._waiters as length zero when it is None
We access the `._waiters` private attribute of the Python asyncio
`Semaphore` class. This was changed in Python 3.10.8 (and other versions)
to be initialized to `None` instead of an empty deque. Our existing
unconditional length checks failed on the new `None` default. This seems
to block syncing.
https://github.com/python/cpython/pull/97020https://github.com/python/cpython/compare/v3.10.7..v3.10.8#diff-0fee1befb15023abc0dad2623effa93a304946796929f6cb445d11a57821e737
Reported traceback:
```python-traceback
2022-10-12T20:03:59.367 full_node full_node_server : INFO Connected with full_node {'host': '65.34.144.6', 'port': 8444}
2022-10-12T20:03:59.370 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len(), {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):
File "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutine
result = await coroutine
File "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peak
waiter_count = len(self.full_node.new_peak_sem._waiters)
TypeError: object of type 'NoneType' has no len()
2022-10-12T20:03:59.371 full_node full_node_server : ERROR Exception: object of type 'NoneType' has no len() <class 'TypeError'>, closing connection {'host': '65.34.144.6', 'port': 8444}. Traceback (most recent call last):
File "/home/summa/chia-blockchain/chia/server/server.py", line 608, in api_call
response: Optional[Message] = await asyncio.wait_for(wrapped_coroutine(), timeout=timeout)
File "/usr/lib/python3.10/asyncio/tasks.py", line 408, in wait_for
return await fut
File "/home/summa/chia-blockchain/chia/server/server.py", line 605, in wrapped_coroutine
raise e
File "/home/summa/chia-blockchain/chia/server/server.py", line 598, in wrapped_coroutine
result = await coroutine
File "/home/summa/chia-blockchain/chia/full_node/full_node_api.py", line 114, in new_peak
waiter_count = len(self.full_node.new_peak_sem._waiters)
TypeError: object of type 'NoneType' has no len()
2022-10-12T20:03:59.487 full_node full_node_server : INFO Connection closed: 65.34.144.6, node id: 506fe4c05ce6b72bb707471842e552307c7a547aa9ba981175db5c08fa3e47e6
```
* add LimitedSemaphore