IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2023/12/05
~AreEnn
~R4SAS
~acetone
~villain
&N00B
+Xeha
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Ruskoye_911
Vort
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
plap
poriori
profetikla
soos
teeth
un
weko_
whothefuckami
orignal перелинковался с ацетоном
Vort tetrimer: я думаю,что это не тот HTTP
Vort вот сюда нужно смотреть: i2pd\libi2pd_client\HTTPProxy.cpp
orignal un так чего у тебя падает?
tetrimer Но все равно - неувязочка с кодами...
orignal так поправь
orignal эти коды хаген делал
tetrimer Поправить расшифровку - не проблема, но ведь надо, чтобы в самой логике работы прокси отдавал правильный case. А вот этого я так просто не осилю.
lobastabrush помочь?
orignal а ну я тоже не знаю что когда отдается
lobastabrush ну так тебе сервер и отвечает кодом 500
lobastabrush бага нету
lobastabrush в чем проблема?
orignal народ объясните внятно у кого что падает?
orignal ну кроме хуя конечно
lobastabrush reg.i2p недоступен, а остальные подписки грузятся по DNS-адресу (i2pd.conf: addressbook.subscriptions) и не могут загрузиться я так понимаю
un orignal, у меня за сутки 23 го и 24 ноября трижды упал- 1 раз релиз 49 после uptime 36 дней. потом два раза транк.
un в тотже день что ты сделал патч по падению от r4sas
un совпадалло с открытием в баруезере xmpp.tru.... :5432 какойто там порт. тоесть шло через socks
un я хз что. просто запустил .2.48 с тех пор летит
un ну кроме сегодня, рестартил чтобы tunnel.conf подхватить из за разлинковки irc
lobastabrush addresbook.defaultUrl указывает на reg.i2p и он упал, получился небольшой single point of failure и теперь надо вручную новым нодам протыкивать добавление в адресбуки notbob.i2p, stats.i2p и остальное, иначе ничего не прогрузится
orignal ну у тебя в докере
un ну да. а там alpine но в хосте ubuntu
un но в тот день было не только у меня падения - r4sas и skomorox
orignal lobastabrush для того конфиг и сделан
orignal так откуда я знаю мне стек надо
un у меня хост в датацентре и чтобы там не ставить всю фигню и собирать i2pd поэтому докер раз два и пашет
orignal с рег тут что то другое он же мультихоминг
un Blinded message
orignal ладно ждем R4SAS-а
orignal у кого еще здесь падало сегодня?
tetrimer un: Я из датацентра образ притащил к себе в VortualBox и там компилирую бинарь. Потом по scp загоняю обратно...
un да можно просто на хосте в докере собарть - я так странк собирал
orignal проблема в том что у меня нигде не падает причем в разных конфигурациях
un мне просто в лом было дебажить и экспериментировать. я просто откатился и пашет норм
lobastabrush у меня аптайм 4-5 часов, i2pd не падает
orignal у меня кое где аптайм по 2 месяца
un да может глюк какой у докера в сетевой подсистеме. когда по socks. да все может быть. может вообще тогда в тот день просто какойто пиздец был глобальный)
un так как в конце ноября не у одного меня.
orignal но у меня в тот день тоже ничего не случилось
orignal нигде
un у r4sas .. ты пачт с провекой на null сделал
un я думал что у меня как раз это. собрал тарнк. и до вечера еще раза 2 или 3 рухнуло
orignal этот патч нчему не поможет
orignal там проблема непонтяно откуда
un я говорю, как только я копипастил картинки из чата
un все что осталось в логах:
un Nov 23 05:03:05 localhost kernel: Destination[22728]: segfault at 7fee18b050b0 ip 000055a648bdc892 sp 00007fee19022be0 error 4 in i2pd[55a6489f6000+4c5000]
un Nov 23 09:14:25 localhost kernel: Destination[27662]: segfault at 7fd3493191e0 ip 00005556fa3a5892 sp 00007fd3496e9be0 error 4 in i2pd[5556fa1bf000+4c5000]
un Nov 24 15:32:27 localhost kernel: Destination[6556]: segfault at 7f5b8b12a060 ip 00005628ac5282c0 sp 00007f5b8b468be0 error 4 in i2pd[5628ac341000+4c9000]
lobastabrush а, так убунта в докере у тебя немолодая?
lobastabrush у убунты какой-то кошмар с бинарной совместимостью, обязательно собирай i2pd сам иначе рандомные сегфолты случаются, и убунта не предупреждает когда обновление ломает abi
lobastabrush тоже сталкивался с рандомными сегфолтами готовых сборок i2pd на убунтах
Vort "<lobastabrush> ну так тебе сервер и отвечает кодом 500 / бага нету": тут две проблемы: 1. ошибка 500 означает проблему в самом прокси. когда проксируемый сервер не отвечает, то, скорее, нужны коды 503 или 504
lobastabrush если я правильно прочитал код, то прокси просто отдает код отданный сервером
Vort 2. ответ должен быть "брендирован", чтобы было чётко видно, что это ответ от прокси, а не от удалённого сервера. я самостоятельно ответ не сморел, но, думаю, tetrimer заметил бы если б было указание
Vort lobastabrush: какой код? libi2pd_client\HTTPProxy.cpp или libi2pd\HTTP.cpp ?
tetrimer В libi2pd\HTTP.cpp - просто ошибка в расшифровке кодов. На работоспособность - не влияет.
lobastabrush ну я так понял тетример достучался до reg.i2p но тот вернул ему 500. Хорошо, ты хочешь чтобы прокси плюясь ошибкой уточнял что это его ошибка
Vort lobastabrush: неправильно понял
tetrimer Пятисотую ошибку дает вполне живой IIS, если у него там что-то пошло не так.
lobastabrush брендировать ответ прокси я так понимаю надо туть
Vort lobastabrush: ну вот. 500 летит в ответ на чуть ли не любую проблему. да, там
tetrimer Хочется-то понимать: сервер (хост) живой, но внутри у него какие-то ошибки, или с хостом вообще не удалось соединиться (для этого 503 -я лучше подходит).
Vort только надо проверять, чтобы браузер не игнорировал HTML ответ. я когда-то о таком читал
Vort tetrimer: да, именно так
lobastabrush а разве i2pd не отвечает адекватным Host is Down когда не удалось соединиться? По-моему отвечает
tetrimer Если я правильно понял, прокси по ответу - сам формирует страничку.
tetrimer В коде HTTPProxy.cpp есть только пятисотая ошибка.
Vort lobastabrush: может быть разница между случаями, когда не найден адрес и когда адрес известен, но с ним нету связи
lobastabrush да, когда адрес неизвестен нам предлагают жамперы, а когда изестен - Host is Down
lobastabrush но вот какие при этом коды ошибок - вообще не смотрел
Vort может браузер решил проигнорировать HTML ? как раз о чём я только что писал
tetrimer Через curl отдается: <body><h1>Proxy error: Host is down</h1>
Vort хотя 503 в любом случае стоит отдавать
Vort tetrimer: а браузер это не отображает?
lobastabrush у меня отображает
tetrimer Отображает, но в консоли отладчика (F12) - пишет 500.
Vort так из-за чего можно подумать, что это сам сервер так ответил, а не прокси?
tetrimer Vort: void HTTPReqHandler::SendProxyError(std::string& content)
tetrimer i2p::http::HTTPRes res;
tetrimer res.code = 500;
tetrimer И браузер, соответственно, "расшифровывает" 500, как "Internal Server Error"
Vort tetrimer: но при этом же есть сообщение "Proxy error" ?
Vort похоже, что этому сообщению просто пурпурного цвета не хватает :) так было бы понятнее
tetrimer Есть.
Vort может, стоит поменять "Proxy error" на "i2pd HTTP proxy error"
Vort короч сделать как-то бросающимся в глаза тот факт, что это сам i2pd ответил
tetrimer Мне кажется - стоит поменять 500 на 503.
Vort ну и это тоже
Vort но там же разные причины могут быть. надо все проверить
Vort может, каким-то и 500 соответствует
tetrimer А где там if () в коде? Там нет вариантов 50X ошибок.
Vort я говорю о том, что "отвечать всегда 503" может быть тоже неверно
orignal так добавить код ошибки в SetProxyError
Vort в GenericProxyError тоже
Vort а там их дофига
orignal а главное убрать эти магические числа
orignal и сделать константами
tetrimer Вот, по-идее, обращение к лежащему хосту должно выводить на эту строчку:
tetrimer GenericProxyError(tr("CONNECT error"), tr("Failed to connect")); и отсюда генерировать 503-ю ошибку на экран.
Vort tetrimer: это другое скорее всего
tetrimer Там обработка if(stream). Т.е. поднятие соединения.
Vort браузер скорее всего использует GET, а не CONNECT
tetrimer Ну вот, например, angie/nginx в случае лежащего за ним сервера - отвечает 502-й ошибкой.
tetrimer И это - понятнее, чем пятисотая (an unexpected condition was encountered and no more specific message is suitable)
Vort tetrimer: я вот такое нагугливал: stackoverflow.com/a/49646048
tetrimer есть же RFC. :)
Vort специально по прокси?
tetrimer rfc7231
Vort так важны же не только сами ошибки, но и то, как их применять в контексте HTTP прокси сервера
tetrimer Вот, например, перевод: "6.6.1. 500 — Internal Server Error (Внутренняя ошибка сервера)
tetrimer Код состояния 500 (Внутренняя ошибка сервера) указывает, что сервер обнаружил непредвиденное состояние, которое не позволило ему выполнить запрос."
Vort поэтому вариант "посмотреть как сделано в каком-то популярном HTTP прокси" очень даже неплох
tetrimer То есть "сервер жив, но в запрашиваемом коде - ошибка". Так бывает в том же php
tetrimer А вот это: " 504 — Gateway Timeout (Время ответа сервера истекло)
tetrimer Код состояния 504 (время ожидания шлюза) указывает на то, что сервер, действуя в качестве шлюза или прокси-сервера, не получил своевременный ответ от вышестоящего сервера, к которому он должен был получить доступ для выполнения �
tetrimer случай.
Vort tetrimer: это понятно. но в прокси i2pd разновидностей ошибок штук 20. поправить всего одну - как-то не правильно
Vort ага, вижу упоминание прокси, хорошо
tetrimer Ну да - лучше не править ничего.
tetrimer Кстати, тут 502 - получается не очень корректно: "Код состояния 502 (Bad Gateway) указывает на то, что сервер, выступая в качестве шлюза или прокси-сервера, получил неверный ответ от входящего сервера, к которому он обращался при попытке �
tetrimer Тут как раз "не получил ответа" - правильнее.
Vort да, вроде, 502 никто и не предлагал :)
Vort я сейчас issue на github напишу, для напоминания о проблеме
tetrimer С http response две проблемы. Несоответствие здесь, и ошибка в http кодах libi2pd/HTTP.cpp, что я выше давал.
tetrimer "Чтобы два раза не вставать". :)
Vort тоже иногда так делаю. но правильнее всего - 1 проблема - 1 отчёт
Vort по второй проблеме это надо разбираться, как эти коды вообще используются. может быть так, что сейчас вообще нету возможности их получить
Vort по-хорошему, ведь надо каждое изменение тестировать - то есть, понимать, как воспроизвести проблему
Vort с "Host is down" сценарий воспроизведения понятен. с HTTP.cpp - лично мне - нет
tetrimer Тут бы уточнить, что текстовое сообщение на экран клиента идет правильное, а вот http код в заголовке страницы - вводит в заблуждение отладчик браузера, который, в свою очередь, вводи в заблуждение чайников, типа меня. :)
tetrimer Потому, что есть разница "сервер ответил ошибкой" и "сервер не отвечает".
Vort человеческие ошибки - это отдельная история. это больше вопрос юзабилити
Vort тут же должен быть код 503, а имеем 500. это плохо независимо от того, ошибётся кто-то из-за этого или нет
tetrimer Я к тому, что кроме самого кода - ничего в логике править не надо.
orignal я же говорю убрать магические числа первым делом
orignal и сделать константы
tetrimer А чем "магические числа" не константы? Объявить их где-то один раз на воде и потом оперировать только кодами.
tetrimer А в бусте, или кто-там обрабатывает http-коннекты - нет ли готового справичника кодов?
tetrimer boost/beast/http/status.hpp
tetrimer Все там есть...
orignal есть наверное
orignal просто хаген так сделал
orignal только есть ньюанс
orignal мы beast не используем
tetrimer Тогда где-то придётся держать аналогичную информацию.
orignal в каком нибудь хедере