333.i2p

Форум, посвященный разработке и поддержке i2pd
i2pd 2.53.0 проблема после закрытия I2CP сессии « Книга жалоб и предложений « Разработка i2pd
 
Tue, 23 Jul 2024, 11:40am #1
anon_101
Участник
Registered: July 2024
Последний раз: Fri, 02 Aug 2024
Сообщения: 4

i2pd 2.53.0 проблема после закрытия I2CP сессии

После обновления с версии 2.52.0 на 2.53.0 появилась проблема с I2CP.
К i2pd по I2CP подключается BiglyBT. i2pd и BiglyBT запущены на разных хостах в одной локальной сети, так что присутствует фактор небольшой задержки в I2CP соединении. Но я пробовал минимизировать задержку и искуственно создавать её настройками netem, разницы нет, значит она не играет роли здесь.

BiglyBT создаёт 5 I2CP Local Destinations:
[BiglyBT: DHT Pure+]
[BiglyBT: DHT Bridge]
[BiglyBT: DHT Pure]
[BiglyBT: DHT Mixed]
[BiglyBT: DHT Mixed+]

Качается нормально.

Когда выключаю BiglyBT, появляется эта проблема. Сразу же i2pd нагружает процессор на 100% (и она не проходит без перезапуска), I2CP Local Destinations не исчезают (точнее, только одна из них исчазает (вроде всегда [BiglyBT: DHT Mixed] исчезает)):
[BiglyBT: DHT Pure+]
[BiglyBT: DHT Bridge]
[BiglyBT: DHT Pure]
[BiglyBT: DHT Mixed+]

Со временем у них исчезают исходящие туннели, но остаются входящие.

В логах сразу после выключения BiglyBT отловил это сообщение: "error - I2CP: Can't receive header".
Также много сообщений "Tunnels: Test of tunnel .... failed" про разные туннели. До запуска BiglyBT их нет. Во время работы BiglyBT они иногда появляются, где-то раз в 5-20 секунд, по одному или по 3 штуки сразу (когда уже качается несколько сотен КБ/с). После выключения BiglyBT они идут стабильно раз в 5 секунд, по 3-4 штуки сразу.

Offline
Tue, 23 Jul 2024, 12:38pm #2
orignal
Директор
Wlm
Registered: February 2016
Последний раз: Wed, 30 Oct 2024
Сообщения: 212

Починил.
https://github.com/PurpleI2P/i2pd/commit/23e323...

Offline
Tue, 23 Jul 2024, 02:43pm #3
anon_101
Участник
Registered: July 2024
Последний раз: Fri, 02 Aug 2024
Сообщения: 4

Фикс не помог.
Ничего не изменилось, и в логах та же ошибка I2CP: Can't receive header.

Offline
Tue, 23 Jul 2024, 04:58pm #4
orignal
Директор
Wlm
Registered: February 2016
Последний раз: Wed, 30 Oct 2024
Сообщения: 212

А если только одна сессия, то завершается нормально?
Этот код никто не трогал несколько лет.

И еще вопрос: там один тред или несколько? Параметр i2cp.singlethread в конфиге.

Last edited: Tue, 23 Jul 2024, 05:24pm от orignal

Offline
Tue, 23 Jul 2024, 07:07pm #5
anon_101
Участник
Registered: July 2024
Последний раз: Fri, 02 Aug 2024
Сообщения: 4

Да, забыл добавить, когда этот баг случился, новые i2cp сессии не будут создаваться.

>А если только одна сессия, то завершается нормально?
>И еще вопрос: там один тред или несколько? Параметр i2cp.singlethread в конфиге.
У меня он не был задан в конфиге. i2pd на виртуалке с одним ядром. BiglyBT создаёт минимум 2 сессии, но вторую с большой задержкой. Тогда постараюсь подловить момент, когда ровно одна сессия...

i2pd 2.53.0 с сегодняшним фиксом. Роутер только что запущен, запускаю BiglyBT, жду появления нужного количества сессий, создания туннелей, и выключаю BiglyBT...

i2cp.singlethread=true и 1 сессия. Результат: 100% cpu, единственная сессия исчезла, новые сессии не создаются.

i2cp.singlethread=true и 2 сессии. Результат: 100% cpu, осталась 1 из 2 сессий, новые сессии не создаются.

i2cp.singlethread=false и 1 сессия. Результат: 0% cpu, единственная сессия исчезла, ошибку "I2CP: Can't receive header" видел, новые сессии создаются и работают.

i2cp.singlethread=false и 2 сессии. Результат: Результат: 0% cpu, обе сессии исчезли, новые сессии создаются и работают.

Я подозреваю, что ошибка "I2CP: Can't receive header" была во всех случаях, но я не успел её заметить. Потом проверил, когда во второй раз выключал BiglyBT с двумя сессиями, два раза появилась эта ошибка.

Вывод: нужно ставить i2cp.singlethread=false.

orignal, а дефолтное значение этого флага менялось в новой версии? У меня в конфиге его не было. В конфиге, который лежит в репозитории в contrib, тоже его нет. Разве что в доках можно узнать о его существовании.

Кстати, когда с i2cp.singlethread=false во второй раз выключил BiglyBT, стала проскакивать такая ошибка: error - Router: Runtime exception: cannot create std::vector larget than max_size()
Где-то в течение минуты она прекратила появляться.

Offline
Tue, 23 Jul 2024, 07:19pm #6
orignal
Директор
Wlm
Registered: February 2016
Последний раз: Wed, 30 Oct 2024
Сообщения: 212

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

Offline
Mon, 29 Jul 2024, 07:02pm #7
orignal
Директор
Wlm
Registered: February 2016
Последний раз: Wed, 30 Oct 2024
Сообщения: 212

Починено.

Offline
Fri, 02 Aug 2024, 07:57am #8
anon_101
Участник
Registered: July 2024
Последний раз: Fri, 02 Aug 2024
Сообщения: 4

Подтверждаю. Всё ок.

Offline