Skip to content

Commit eb9ce9c

Browse files
ntollsssoleileraaa
authored andcommitted
Address review comments by @creviera: resume queues on sync success, only emit resume signal if queue is paused. Fixed tests too.
1 parent e3ab013 commit eb9ce9c

File tree

4 files changed

+20
-5
lines changed

4 files changed

+20
-5
lines changed

securedrop_client/logic.py

+1
Original file line numberDiff line numberDiff line change
@@ -428,6 +428,7 @@ def on_sync_success(self) -> None:
428428
self.download_new_messages()
429429
self.download_new_replies()
430430
self.sync_events.emit('synced')
431+
self.resume_queues()
431432

432433
def on_sync_failure(self, result: Exception) -> None:
433434
"""

securedrop_client/queue.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,6 @@ def __init__(self, api_client: API, session_maker: scoped_session) -> None:
171171
self.download_file_queue.paused.connect(self.on_queue_paused)
172172
self.metadata_queue.paused.connect(self.on_queue_paused)
173173

174-
self.main_queue.pinged.connect(self.resume_queues)
175-
self.download_file_queue.pinged.connect(self.resume_queues)
176174
self.metadata_queue.pinged.connect(self.resume_queues)
177175

178176
def logout(self) -> None:
@@ -205,10 +203,16 @@ def on_queue_paused(self) -> None:
205203

206204
def resume_queues(self) -> None:
207205
logger.info("Resuming queues")
206+
main_paused = not self.main_thread.isRunning()
207+
download_paused = not self.download_file_thread.isRunning()
208+
metadata_paused = not self.metadata_thread.isRunning()
208209
self.start_queues()
209-
self.main_queue.resume.emit()
210-
self.download_file_queue.resume.emit()
211-
self.metadata_queue.resume.emit()
210+
if main_paused:
211+
self.main_queue.resume.emit()
212+
if download_paused:
213+
self.download_file_queue.resume.emit()
214+
if metadata_paused:
215+
self.metadata_queue.resume.emit()
212216

213217
def enqueue(self, job: ApiJob) -> None:
214218
# Prevent api jobs being added to the queue when not logged in.

tests/test_logic.py

+2
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ def test_Controller_on_sync_success(homedir, config, mocker):
475475
co.download_new_messages = mocker.MagicMock()
476476
co.download_new_replies = mocker.MagicMock()
477477
co.gpg = mocker.MagicMock()
478+
co.resume_queues = mocker.MagicMock()
478479
mock_storage = mocker.patch('securedrop_client.logic.storage')
479480

480481
co.on_sync_success()
@@ -483,6 +484,7 @@ def test_Controller_on_sync_success(homedir, config, mocker):
483484
co.update_sources.assert_called_once_with()
484485
co.download_new_messages.assert_called_once_with()
485486
co.download_new_replies.assert_called_once_with()
487+
co.resume_queues.assert_called_once_with()
486488

487489

488490
def test_Controller_update_sync(homedir, config, mocker, session_maker):

tests/test_queue.py

+8
Original file line numberDiff line numberDiff line change
@@ -312,16 +312,24 @@ def test_ApiJobQueue_pause_queues(mocker):
312312

313313

314314
def test_ApiJobQueue_resume_queues_emits_resume_signal(mocker):
315+
"""
316+
Resume only emits if the queue is paused.
317+
"""
315318
job_queue = ApiJobQueue(mocker.MagicMock(), mocker.MagicMock())
316319
mocker.patch.object(job_queue.main_queue, 'resume')
317320
mocker.patch.object(job_queue.download_file_queue, 'resume')
321+
mocker.patch.object(job_queue.metadata_queue, 'resume')
322+
job_queue.main_thread.isRunning = mocker.MagicMock(return_value=False)
323+
job_queue.download_file_thread.isRunning = mocker.MagicMock(return_value=False)
324+
job_queue.metadata_thread.isRunning = mocker.MagicMock(return_value=False)
318325
job_queue.start_queues = mocker.MagicMock()
319326

320327
job_queue.resume_queues()
321328

322329
job_queue.start_queues.assert_called_once_with()
323330
job_queue.main_queue.resume.emit.assert_called_once_with()
324331
job_queue.download_file_queue.resume.emit.assert_called_once_with()
332+
job_queue.metadata_queue.resume.emit.assert_called_once_with()
325333

326334

327335
def test_ApiJobQueue_enqueue_no_auth(mocker):

0 commit comments

Comments
 (0)