|
1 | 1 | from typing import Any |
2 | | -from uuid import UUID |
| 2 | +from uuid import UUID, uuid4 |
| 3 | +from weakref import WeakSet |
3 | 4 |
|
4 | 5 | from pytest import fixture, mark, raises |
5 | 6 |
|
@@ -574,47 +575,25 @@ def test_no_memory_leak(horizon: Horizon) -> None: |
574 | 575 | ... |
575 | 576 | """ |
576 | 577 |
|
577 | | - transaction_counter = 0 |
578 | | - |
579 | | - old_transaction_init = SerializableTransaction.__init__ |
580 | | - |
581 | | - def new_transaction_init(*args: Any, **kwargs: Any) -> None: # noqa: ANN401 |
582 | | - old_transaction_init(*args, **kwargs) |
583 | | - |
584 | | - nonlocal transaction_counter |
585 | | - transaction_counter += 1 |
586 | | - |
587 | | - def transaction_del(self: Transaction, *args: Any, **kwargs: Any) -> None: # noqa: ARG001,ANN401 |
588 | | - nonlocal transaction_counter |
589 | | - transaction_counter -= 1 |
590 | | - |
591 | | - SerializableTransaction.__init__ = new_transaction_init # type: ignore[method-assign] |
592 | | - SerializableTransaction.__del__ = transaction_del # type: ignore[attr-defined] |
| 578 | + total = 100 |
593 | 579 |
|
594 | 580 | time = 0 |
595 | 581 |
|
596 | | - for xid_int in range(1, 101): |
| 582 | + for xid_int in range(1, total + 1): |
597 | 583 | time += 1 |
598 | 584 |
|
599 | 585 | horizon.start_transaction( |
600 | 586 | time, UUID(int=xid_int), IsolationLevel.serializable_read_and_write |
601 | 587 | ) |
602 | 588 |
|
603 | | - assert transaction_counter == 100 |
| 589 | + live_transactions = WeakSet(horizon._serializable_transaction_map.values()) # noqa: SLF001 |
| 590 | + assert len(live_transactions) == total |
604 | 591 |
|
605 | | - for xid in reversed(range(1, 101)): |
| 592 | + for xid in reversed(range(1, total + 1)): |
606 | 593 | time += 1 |
607 | 594 | commit = horizon.commit_transaction(time, UUID(int=xid), []) |
608 | 595 |
|
609 | 596 | time += 1 |
610 | 597 | horizon.complete_commit(time, commit.xid) |
611 | 598 |
|
612 | | - time += 1 |
613 | | - horizon.start_transaction( |
614 | | - time, UUID(int=200), IsolationLevel.serializable_read_and_write |
615 | | - ) |
616 | | - |
617 | | - SerializableTransaction.__init__ = old_transaction_init # type: ignore[method-assign] |
618 | | - del SerializableTransaction.__del__ # type: ignore[attr-defined] |
619 | | - |
620 | | - assert transaction_counter == 1 |
| 599 | + assert not live_transactions |
0 commit comments