diff options
| author | Christian Cleberg <[email protected]> | 2026-04-11 22:56:22 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-11 22:56:22 -0500 |
| commit | 1c8d0bdd0a0a46d7400b0827aec88a787f5a04c3 (patch) | |
| tree | 516a47d260e9a1a003110dd5b20f26dffe013536 /src/srht_contrib/scripts/enqueue_actors.py | |
| parent | 3489797460f9f8d19d37806da3b99c6b0baf4cf0 (diff) | |
| download | hutch-stats-1c8d0bdd0a0a46d7400b0827aec88a787f5a04c3.tar.gz hutch-stats-1c8d0bdd0a0a46d7400b0827aec88a787f5a04c3.tar.bz2 hutch-stats-1c8d0bdd0a0a46d7400b0827aec88a787f5a04c3.zip | |
Reduce SQLite lock contention during actor enqueue
Diffstat (limited to 'src/srht_contrib/scripts/enqueue_actors.py')
| -rw-r--r-- | src/srht_contrib/scripts/enqueue_actors.py | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/src/srht_contrib/scripts/enqueue_actors.py b/src/srht_contrib/scripts/enqueue_actors.py index 6735881..f6999af 100644 --- a/src/srht_contrib/scripts/enqueue_actors.py +++ b/src/srht_contrib/scripts/enqueue_actors.py @@ -34,6 +34,9 @@ def enqueue_actors(username_file: Path, *, stagger_seconds: int = 300, start_at: queued_at = start_at or datetime.now(tz=UTC) inserted = 0 + batch_size = 250 + queued_in_batch = 0 + with session_factory() as db: for index, actor in enumerate(usernames): next_poll_after = queued_at + timedelta(seconds=index * stagger_seconds) @@ -49,15 +52,21 @@ def enqueue_actors(username_file: Path, *, stagger_seconds: int = 300, start_at: ) db.add(tracked_actor) inserted += 1 - continue - - tracked_actor.is_active = True - if tracked_actor.queued_for_discovery_at is None: - tracked_actor.queued_for_discovery_at = queued_at - if tracked_actor.last_polled_at is None and tracked_actor.discovery_state != "indexed": - tracked_actor.discovery_state = "queued" - tracked_actor.next_poll_after = next_poll_after - db.commit() + else: + tracked_actor.is_active = True + if tracked_actor.queued_for_discovery_at is None: + tracked_actor.queued_for_discovery_at = queued_at + if tracked_actor.last_polled_at is None and tracked_actor.discovery_state != "indexed": + tracked_actor.discovery_state = "queued" + tracked_actor.next_poll_after = next_poll_after + + queued_in_batch += 1 + if queued_in_batch >= batch_size: + db.commit() + queued_in_batch = 0 + + if queued_in_batch: + db.commit() return inserted |
