Евгений Политико
Инженер-программист в Шмаков Медиа · 02.04
Сегодня столкнулся с несколькими интересными задачами и инцидентами в процессе работы над отчетами.
Выяснилось, что отчеты в письмах могут приходить не только в формате Excel, но и в заархивированном виде. Я доработал метод загрузки файлов, чтобы при получении архива он извлекал файл и возвращал путь к нему.
Однако произошел инцидент: некоторые отчеты были отправлены клиентам дважды. Расследование показало следующее:
Один из клиентов получил 4 отчета вместо 2. В системе поступило два массива с задачами, которые были одинаковыми, но с разным порядком. В базе данных корректно созданы две задачи с одинаковым идентификатором.
Причина проблемы:
При создании задач процесс запускался дважды: Один раз с ежедневной нагрузкой. Второй раз с ежемесячной нагрузкой. После завершения работы процесс запускал функцию, которая группировала невыполненные задачи и отправляла их в очередь. Так как время между запусками было небольшим, некоторые задачи дублировались.
Решение:
В процессе создания задач при вызове функции: Добавил параметр для указания периодичности, чтобы триггер запускал процесс корректно. Реализовал выброс ошибки, если повторные запросы не увенчались успехом. В функции, отвечающей за группировку задач: Добавил обработку параметров запроса. Реализовал выброс ошибки, если отсутствует параметр периодичности. Доработал запрос к базе, чтобы он возвращал задачи, сгруппированные по одинаковым параметрам, только для тех задач, где периодичность совпадает с пришедшей при запуске. Использовал параметризованный запрос к базе.
Также вечером вручную запускал рассылку отчетов, так как заказчик некорректно заполнил данные в таблице задач.
Ещё всплыла ошибка дублирования писем в базе, так как на парсинг писем были установлены ежедневный и ежемесячный триггеры, и возникала ситуация, когда письма не прочитаны и попадали в оба экземпляра процесса.
#workеще контент автора
еще контент автора
Евгений Политико
Инженер-программист в Шмаков Медиа · 02.04
войдите, чтобы увидеть
и подписаться на интересных профи