Не работают связанные методы

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
olegator
Сообщения: 4
Зарегистрирован: Вс дек 23, 2018 6:30 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Не работают связанные методы

Сообщение olegator » Вс дек 23, 2018 7:06 pm

Приветствия!
Вот какая проблема: у меня Majordomo установлен под Ubuntu с Apache2 + php7 пока что в режиме настройки, отработки. И c некоторых пор заметил, что перестали вызываться связанные методы (те что вызываются при изменении свойства). Порывшись в коде обнаружил следующее:
связанные методы вызываются через CURL в режиме background . При этом в коде lib/common.class.php функция getURL строка 805 стоит
curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1);
т.е. таймаут операции 1 мс. Предполагается что программа отправляет запрос и не дожидается ответа, что вполне логично.
Но у меня при этом curl возвращает ошибку код 28 "Resolving timed out after 4 millisecond"
И это при том, что искомое имя прописано в /etc/hosts т.е. разрешение имени вообще должно делаться мгновенно
Вылечил простым увеличением в вышеуказанной команде таймаута с 1 на 10 мс
Все работает, но все же хотелось бы разобраться, почему так происходит. Возможно какие то опции где то не указал.
Сталкивался кто нибудь с подобными граблями ?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Не работают связанные методы

Сообщение olehs » Вс дек 23, 2018 9:15 pm

Вы все верно заметили. Такая проблема уже была когда-то, я на нее Сергею указывал и он возвращал таймаут на 1с.
Видимо сейчас об этом забыл и опять сделал 1 мс.
Правда, если не ошибаюсь, переделывался и вызов методов с background на обычный getUrl. Неужели и это вернули :o

Если уж поковыряли исходники, можете скинуть ссылку на гит, где этот вызов getUrlBackground для таких методов живет?
olegator
Сообщения: 4
Зарегистрирован: Вс дек 23, 2018 6:30 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Не работают связанные методы

Сообщение olegator » Пн дек 24, 2018 1:57 am

Да вот же:
https://github.com/sergejey/majordomo/b ... s.php#L804
Ну а сюда собственно приходим вот по такой цепочке:
Objects::setProperty вызывает callMethodSafe
https://github.com/sergejey/majordomo/b ... s.php#L882
оттуда getURLBackground
https://github.com/sergejey/majordomo/b ... s.php#L482
далее getURL с параметром $background = true
https://github.com/sergejey/majordomo/b ... s.php#L747
изменено месяц назад
https://github.com/sergejey/majordomo/b ... s.php#L804
Тоже самое, кстати, при вызове скриптов происходит
Правда я не думаю что ставить 1 сек хорошее решение, тормоза будут, переводить вызов в онлайн тоже не есть хорошо, пользовательские методы склонны к FATAL ERROR, разве только в try...catch обрамить.
За это сообщение автора olegator поблагодарил:
olehs (Пн дек 24, 2018 3:38 am)
Рейтинг: 1.16%
olegator
Сообщения: 4
Зарегистрирован: Вс дек 23, 2018 6:30 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Не работают связанные методы

Сообщение olegator » Пн дек 24, 2018 2:37 am

Поанализировал код и получил следующее:
- ошибка Curl 28 вылезает всегда, даже когда вызов нормально отрабатывает
- таймаут в пределах 5 - 10 мс приводит к положительному результату
Предполагаю, что в библиотеке Curl есть некая критическая секция, если она не успевает отработать за указанное время CURL_TIMEOUT_MS то вызов не выполняется. Но это уже тема отдельного обсуждения, и вероятно не на этом форуме. Сейчас же меня результат вполне устроит.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Не работают связанные методы

Сообщение olehs » Пн дек 24, 2018 3:47 am

По мне, так лучше тормоза, чем непредсказуемый результат.
Я не знаю так хорошо CURL (а ковырять было лень), но мне кажется CURLOPT_TIMEOUT касается всего curl_exec, а не только части передачи данных ответа, как думал автор.
А если это так, то за время таймаута CURL должен успеть срезолвить имя, подконнектится, "договориться" про сертификаты (в случае HTTPS), послать запрос и заголовки. И все это за 1мс?
По-моему, таймаут - не самый лучший способ проигнорировать ответ.
За это сообщение автора olehs поблагодарил:
olegator (Пн дек 24, 2018 4:49 am)
Рейтинг: 1.16%
olegator
Сообщения: 4
Зарегистрирован: Вс дек 23, 2018 6:30 pm
Благодарил (а): 1 раз
Поблагодарили: 1 раз

Re: Не работают связанные методы

Сообщение olegator » Пн дек 24, 2018 4:48 am

Ага, не могу не согласиться. Но и с тормозами как то..
Ладно, как нибудь выберу время, поковыряю CURL поподробнее (хотя не думаю что это что нибудь даст), ну а пока оставлю чисто для себя 10 мс, включу какое нибудь журналирование и понаблюдаю.
Ответить