Handle exceptions in the Uploader

This commit is contained in:
Adrian Moennich 2014-11-18 17:34:12 +01:00
parent 0ba1673b73
commit d5dac3cc17
2 changed files with 11 additions and 6 deletions

View File

@ -42,9 +42,14 @@ class Uploader(object):
:param records: an iterable containing queue entries
"""
self_name = type(self).__name__
for i, batch in enumerate(grouper(records, self.BATCH_SIZE, skip_missing=True), 1):
self.logger.debug('{} processing batch {}'.format(type(self).__name__, i))
self.upload_records(batch, from_queue=True)
self.logger.debug('{} processing batch {}'.format(self_name, i))
try:
self.upload_records(batch, from_queue=True)
except Exception:
self.logger.exception('{} could not upload batch'.format(self_name))
return
self.processed_records(batch)
if self.task:
self.task.extend_runtime()

View File

@ -14,7 +14,6 @@
# You should have received a copy of the GNU General Public License
# along with Indico; if not, see <http://www.gnu.org/licenses/>.
import pytest
from mock import MagicMock
from indico_livesync.models.queue import LiveSyncQueueEntry, ChangeType
@ -26,6 +25,7 @@ class RecordingUploader(Uploader):
def __init__(self, *args, **kwargs):
super(RecordingUploader, self).__init__(*args, **kwargs)
self._uploaded = []
self.logger = MagicMock()
def upload_records(self, records, from_queue):
self._uploaded.append((records, from_queue))
@ -98,9 +98,9 @@ def test_run_failing(mocker):
uploader = FailingUploader(create_mock_agent())
uploader.BATCH_SIZE = 3
records = tuple(LiveSyncQueueEntry(change=ChangeType.created) for _ in xrange(10))
with pytest.raises(Exception):
uploader.run(records)
# No uploads should bappen after a failed batch
uploader.run(records)
assert uploader.logger.exception.called
# No uploads should happen after a failed batch
assert uploader._uploaded == [(records[:3], True), (records[3:6], True)]
# Only successful records should be marked as processed
assert all(record.processed for record in records[:3])