Привет. Хелпаните советом, как можно предотвратить вызов callback в winzou

state machine, если во время смены статуса вылетает exception? через callback шлется емаил, но статус entity не менятся

21 ответов

58 просмотров

exception - исключительная ситуация, дальше которой программа не должна продолжать свою работу

Michel Angelo
exception - исключительная ситуация, дальше которо...

Почему не должна? Можно, например, повторить попытку.

Alexander
Почему не должна? Можно, например, повторить попыт...

Ну повторить попытку можно в том случае, если программа не отработала полностью, самому ретраю по сути пох какой там еxception, он долбит её пока она не завершится удачно

Michel Angelo
Ну повторить попытку можно в том случае, если прог...

Думаю правильно будет сказать что есть 2 виза исключений: те которые мы ожидаем и потом программа отрабатывает с их учётом и те которые мы не ожидаем (или не хотим ожидать) после которых программа не имеет что выполнять

Alexandr _
Думаю правильно будет сказать что есть 2 виза искл...

ты cчитаешь правильно ожидать исключение? )) тогда это и не еxception вовсе

Michel Angelo
ты cчитаешь правильно ожидать исключение? )) тогда...

когда вы заходите на страницу к которой у вас нет доступа Symfony кинет вам AcceddDeniedException, который в далтнейшем будет обрабатываться хэгдлером, который либо сделает редирект либо выдаст вам страницу на которой сказано что вам туда нельзя. Вам же приложение не выкенет стэктрейс со словами "А всё, эксэпшон, я дальше работать не буду". Мало того, есть NotFoundHttpException, как и другие http исключения, который будет превращён в ответ клиенту. Всэ эти исключения ожидаемы и для них есть хэндлеры, остальные не исеют хэндлеров, потому их выводят как Unhandled exception

Alexandr _
когда вы заходите на страницу к которой у вас нет ...

когда страница кидает exception, на этом её дальнейшее выполнение прерывается, нет там никаких хендлеров, и даже если следовать вашему примеру Symfony Security и её AcceddDeniedException, метод контроллера не выполняется, контроллер не ходит в бд, не рендерит шаблон или json, Exception! Все, приплыли )), а тот стектрейс который мы видим в dev - это все что было до Exception

Michel Angelo
когда страница кидает exception, на этом её дальне...

то что метод контроллера не выполняет не означате что дальнейшее выполнение прерывается, выполнение идёт по другой ветке логикик и далеко не всегда прерывает выполнения кода. Если вы ловите исключение в сервисе через try catch у вас не отваливает процесс, вы просто выполняет другую ветку логики если она у вас есть. нет там никаких хендлеров - если говорить про access denied исключение - смотриет security.yaml, настройка security.filewalls.*.access_denied_handler, если говорить о исключениях http семейства - смотрите на \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface - их общий интерфейс ------ \Symfony\Component\HttpKernel\Controller - контроллер которые отображает эти ошибки (это к слову о том что метод контроллера не выполняется - выполняется, но уже другой ) ---- \Symfony\Component\HttpKernel\EventListener\ErrorListener::onKernelException - метод который отрабатывает через события ядра когда исключения такого типа кидаются

Alexandr _
то что метод контроллера не выполняет не означате ...

Если вы ловите try catch и выполняете другие ветки логики своей программы, то это неверный подход, т.к. повторюсь - это вовсе не исключение, верните вы bool в своем сервисе, ифом сверить - и результат будет тот же, также у вас ошибочное понятие с термином хендлер, либо слишком широкое, получается к любому классу можно сказать это хендлер ))

Если у вас слейв база данных отвалилась вы будете возвращать булеан и закачивать реквест или просто переключитесь на другой слейв? У меня достаточно четкое понятие хэндлеров и оно точно не ограничено названием метода handle в классе.

Alexandr _
Если у вас слейв база данных отвалилась вы будете ...

речь не идёт о том, чтоб не юзать исключения вовсе. речь о том, что исключение - это исключение в прямом смысле этого слова. то есть это исключительная ситуация, когда что делать дальше - ну вот абсолютно непонятно. в том же примере базой которая отвалилась: если база одна и она отвалилась - а что делать дальше? есть идеи? нету. нуок, бросаем исключение. если коннектов много, то каждый отдельный коннекшн должен бросать исключение, если к нему есть запрос, а база не альо. потому что ну а что еще делать? и это исключение ловится, обрабатывается и берётся следующий коннект. когда все перебрали и доступных не осталось - штош, на этом уровне абстракции код не знает что дальше делать и кидает исключение.

Шурик
речь не идёт о том, чтоб не юзать исключения вовсе...

Вот, весьма верно подмечено. По сути если у вас есть возможность выполнить альтернативную ветку подведения то вы этим и займетесь, ведь есть исключения на уровне всего приложения, после которых у нас нет опции кроме как закончить работу, а есть исключения локального уровня (модуль, апи, бд и тд) которые могут иметь фолбэки или альтернативы. Я согласен с вашим ответом

Alexandr _
Вот, весьма верно подмечено. По сути если у вас ес...

Но и там тоже есть штатные ситуации, а есть исключительные. И путать одни с другими и оба кейса покрывать исключениями - неправильно

Alexandr _
Если у вас слейв база данных отвалилась вы будете ...

Сразу выкинул исключение, это ситуация исключительная и требует анализа, какого он упал? Память протекла? Пользователи положили запросами? Ок, потеряем мы n-пользователей, а что если мы всех их направим на другой?

Michel Angelo
Сразу выкинул исключение, это ситуация исключитель...

Когда у вас слейв отваливается вы переключаете свое приложение на другого слейва или на мастер попутно отправив срочное сообщение команде

Alexandr _
Когда у вас слейв отваливается вы переключаете сво...

и в итоге собственноручно мы кладём весь сервис )) и вместо n-пользователей мы теряем всех ))

Alexandr _
По причине чего?

по той же причине, по которой упал предыдущий, а причина нам не известна ))

Michel Angelo
по той же причине, по которой упал предыдущий, а п...

Насколько плохо надо написать приложение на симфонии в компоновке с мастер-слейв группой чтобы у вас поочередно падали все инстанции БД. Если это дос то есть rate-limit, есть fail2ban есть куча всего. Если это тяжёлые запросы то это вопрос оптимизации. Все это решаемые вопросы, но честно, за всё время своей работы ни разу не видел чтобы БД так легко падала, тем более в компоновках мастер слейв

Alexandr _
Насколько плохо надо написать приложение на симфон...

ну так это же не я накинул кейс, что слейв упал )) я лишь ответил на вопрос, что бы я сделал, если ... почем? потому что по этой же причине с вероятностью 99,9% упадут и другие

Michel Angelo
ну так это же не я накинул кейс, что слейв упал ))...

Я накинул этот кейс, потому что знаю что такие ОРМ как доктрина просто перейдут на другой слейв при такой ситуации. Что касается 99 процентов, единственное что может к такому привести это плохой код

Похожие вопросы

Обсуждают сегодня

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Карта сайта