Skip to content

Commit c40d411

Browse files
vdusekclaude
andauthored
fix: remove double usage_count increment in Session.retire() (#1816)
## Summary - `Session.retire()` incremented `_usage_count`, but callers (`mark_good()`, `mark_bad()`) already increment it before calling `retire()`, causing a double-increment when a session is retired at the usage limit. - Removed the redundant `_usage_count += 1` from `retire()`. - Added tests covering the no-double-increment invariant for `mark_good()`, `mark_bad()`, and direct `retire()` calls. --- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent c10cdf5 commit c40d411

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

src/crawlee/sessions/_session.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,6 @@ def retire(self) -> None:
217217
to use `mark_bad` method.
218218
"""
219219
self._error_score += self._max_error_score
220-
self._usage_count += 1
221-
# Note: We emit an event here because of the Puppeteer in TS implementation.
222220

223221
def is_blocked_status_code(
224222
self,

tests/unit/sessions/test_session.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,9 +82,27 @@ def test_multiple_marks(session: Session) -> None:
8282

8383
def test_retire_method(session: Session) -> None:
8484
"""Test that retire method properly sets the session as unusable."""
85+
initial_usage_count = session.usage_count
8586
session.retire()
8687
assert not session.is_usable
8788
assert session.error_score == 3.0
89+
assert session.usage_count == initial_usage_count
90+
91+
92+
def test_mark_good_at_usage_limit_no_double_increment() -> None:
93+
"""Test that mark_good at max usage count does not double-increment usage_count via retire."""
94+
session = Session(max_usage_count=5, usage_count=4)
95+
session.mark_good()
96+
assert session.usage_count == 5
97+
assert not session.is_usable
98+
99+
100+
def test_mark_bad_at_usage_limit_no_double_increment() -> None:
101+
"""Test that mark_bad at max usage count does not double-increment usage_count via retire."""
102+
session = Session(max_usage_count=5, usage_count=4)
103+
session.mark_bad()
104+
assert session.usage_count == 5
105+
assert not session.is_usable
88106

89107

90108
def test_retire_on_blocked_status_code(session: Session) -> None:

0 commit comments

Comments
 (0)