IRCaBot 2.1.0
GPLv3 © acetone, 2021-2022
#dev
/2024/10/16
~AreEnn
~R4SAS
~acetone
~orignal
~villain
&N00B
+relaybot
DUHOVKIN
Leopold
Most2
Nausicaa
Vort
Xeha
anon2
b3t4f4c3
karamba_i2p
nemiga
not_bob_afk
poriori_
profetikla
soos
un
weko
whothefuckami_
jarvi Обнаружена особенность standalone i2psnark: при запуске при чтении загруженных торрентов может писать в косоль о неверной длине загруженных файлов и их исправлении, хотя длина верная (он сам пишет два одниковых числа) и ничего исправлят
jarvi Чтобы такого не было, надо перез закрытием консоли снарка **останавливать** в браузере все торренты, а потом уже закрыать крестиком консоль снарка.
orignal а мы тут причем?
orignal спрашивай у деда
jarvi Так работает же всё, чего спрашивать, может только что-нибудь дописать на i2pd.readthedocs.io/en/latest/tutorials/filesharing , а то делаешь по инструкции, и не понятно, почему так выходит. Например, "Before closing I2PSnark console stop all torrents in a browser bittorrent panel".
orignal ну сделай PR
orignal я не понял они че не могут послать запрос убить I2CP ссесию из снарка?
Vort по-моему, баг надо исправлять, а не "особенностью" называть
Vort да и вообще R4SAS обещал передать информацию об этой проблеме
Vort неужели такая сложная проблема, что до сих пор не починили?
orignal а в чем баг то?
orignal что если не нажать кнопку то сессия не завершается?
orignal R4SAS кстати передал
Vort File '...' exists, but has wrong length (expected 91835 but found 91835)
Vort ясен хрен что такого не должно быть
orignal бага-с
orignal счас доелаю HolePunch
orignal я тут кое чего нашел
orignal как мы обрабатываем перепосылки при хэндшейке
orignal похоже это источник ошибок в логе про неправильнуб расшифровку пакета
Vort каких? Can't handle ECIES-X25519-AEAD-Ratchet message?
orignal нет про SSU2
orignal что неизвестный тип сообщения и тому подобное
Vort а, ниже error уровень. понятно
Vort полагаю, некоторые из них в любом случае останутся
Vort но если станет меньше - будет хорошо, конечно
orignal это явно перепосылки
Vort (правда, меня больше спам на error уровне Can't open file беспокоит)
orignal которые надо правильно дропать
orignal а на некоторые слать ответ
orignal can't open file возможно это выброшенные
orignal по какой то ошибке
orignal смотреть надо будет
Vort у тебя они тоже сыпятся? воспроизвести сможешь?
orignal не смотрел
Vort у меня их тысячи
orignal а какой нибудь пробовал отследить?
Vort возможно, из-за "особенностей" моей сети. поэтому и спрашиваю, что у тебя
orignal так не должно быть cna't open file
orignal это где то в коде бага значит
Vort понятно, что это баг. непонятно, у всех так много сыпет в лог или для такой фигни нужны специальные условия (которые есть у меня)
Vort и что тут "следить"? проверить, нету ли на диске? ну нету
orignal у меня есть но где то раз в минуту
orignal проверить есть ли с ним транспорт например
orignal есть ли про него еще что то в логе
orignal далее надо понять по какой вообще причине требуется его грузить
Vort единственное, что знаю - это ошибки любят вываливаться пачками
orignal LrJF: 125.253.110.22:18073 => [2186:299] [itag:1585510702]
Vort по 10 штук, по 100 штук
orignal Can't open file /home/i2pd/.i2pd/netDb/rL/routerInfo-LrJFzGKbhh0q0bRQz2fFanLwyhFXOROS0jK~GOGXRYY=.dat
orignal улавливаешь мысль?
orignal это интродьюсер
orignal который мы скорее всего выкинули
Vort я на вкладке транспортов несколько штук попробовал найти - не нашлось
orignal так ты пробуй последний
orignal а у меня как видишь нашлось
Vort чей интродьюсер? у меня R узел
orignal ты кому то интродьюсер
orignal то есть ты боб а это адрес чарли
orignal допустим алиса отправла relay request
orignal if (r && (r->IsUnreachable () || !i2p::data::netdb.PopulateRouterInfoBuffer (r))) r = nullptr;
orignal вот и код в обработке relay request
orignal у тебя есть такие ошибки?
orignal SSU2: RelayRequest Alice's router info not found"
Vort этой какой уровень?
Vort могу включить на несколько секунд
orignal warning
orignal у меня таких дохуя
orignal нет я думаю это не то но тоже интересно почему
Vort в притык к Can't open file никаких интересных warn нету
Vort только тот спам о котором ты недавно говорил - Unexpected message type
Vort сейчас попробую debug поставить ненадолго
orignal думаю не стоит
Vort что-то нашлось. смотрю
orignal ладно буду думать
orignal счас переотправку HolePunch починю
Vort NetDb: DatabaseLookup for Pv~HfV8~EkhX2jjY8Thm~~rr82oF8YjaeuqUc2Usbqk= received flags=9
Vort NetDb: Requested RouterInfo Pv~HfV8~EkhX2jjY8Thm~~rr82oF8YjaeuqUc2Usbqk= found
Vort RouterInfo: Can't open file D:\i2pd\netDb\rP\routerInfo-Pv~HfV8~EkhX2jjY8Thm~~rr82oF8YjaeuqUc2Usbqk=.dat
orignal смотри что там в HandleDatabaseLookupMsg
orignal небось та же подгрузка
orignal if (PopulateRouterInfoBuffer (router))
orignal таки есть
orignal я вот что думаю
orignal скорее всего мы запись на диск делаем в другом треде
Vort ты же переносил что-то помню
orignal то есть мы буфер то удаляем а на диск еще не записалось
Vort и до того я такой фигни особо не видел. может по мелочам
orignal вот из-за этого все и происходит
orignal надо думать как чинить
orignal а вот тут и понятна твоя особенность
orignal вызванная медленным диском
` Так что там со скармливаением ш2зв чатгапатой?
` Vort? Или не ты узнал об этом..
` Кто-то здесь пейсал..
` Какой-то член ш2з-дев
Vort "<~orignal> вызванная медленным диском" не только медленным, но и местами перегруженным торрентами и прочей фигнёй
Vort `: я вообще не понял, о чём ты
Vort к примеру, компиляцией VS2019 )) там не только диск перегружен, а вообще всё что можно
orignal короче понятно что надо делать
orignal buffer = it.second->GetSharedBuffer ();
orignal it.second->DeleteBuffer ();
orignal потом saveToDisk.push_back(std::make_pair(ident, buffer));
orignal и уже после m_PersistingRouters = std::async (std::launch::async, &NetDb::PersistRouters,
orignal this, std::move (saveToDisk), std::move (removeFromDisk));
orignal короче думать надо как это чинить
orignal блять еще одну лажу нашел
orignal починил
Vort всё равно Can't open лезут
orignal ну значит не все починил
Vort по ощущениям лезут примерно с тем же напором
orignal у меня нет
orignal похоже знаешь что у тебя?
Vort за 10 минут аптайма 200 ошибок насыпалось
orignal между SaveUpdates не успевает завершиться
orignal поглядим дальше
Vort типа минуту на диск пишет RI что ли?
Vort если один сброс на второй наехал, то надо бы это в error писать
Vort иначе фиг поймешь - у меня по error логам по крайней мере ничего не понятно
Vort как сыпало, так и сыпет
Vort диск, кстати, у меня не сильно перегружен сейчас
Vort вот при старте узла - да, был перегружен
Vort сейчас стабильная нагрузка в 20%
un дык в линукс пишет на диск не на диск а в память . буффре
un буфер
un если только не пишешь слишком много. тогда iowait
un или у тебя на винде ?
Vort у меня винда
un понял
orignal там не раз в 10 минут а раз в минуту вроде
orignal и за минуту вполне может не успеть записать пачку
Vort только при запуске могло такое быть
orignal if (mts >= lastManage + 60000) // manage routers and leasesets every minute
orignal а если сделать через 3?
Vort ты лучше скажи, могло ли раз глюкануть на старте, а потом продолжать и продолжать сыпать
Vort старт у меня и 5 и 10 минут бывает
orignal могло
orignal но должно же обновляться
Vort за сколько? за час должно обновиться всё?
Vort я лучше часок подожду и проверю, перестанет ли сыпать
orignal я вот думаю может вообще убрать это?
orignal удаление буфера
Vort я вообще не понимаю, что там в коде происходит, поэтому не могу советовать
orignal я ориганальный подписанный буфер роутера скидываю на диск
orignal и удаляю из памяти
Vort это же оптимизация как я понимаю
orignal ну так смотри если каждый длиной 3K и 10 тыс ротуеров это 30 мегов в памяти
Vort так или иначе сохранять на диск всё равно надо
Vort а значит надо понять, что за хрень происходит
Vort короч по ощущениям сыпет ошибками равномерно. скорее всего, через час будет то же самое
orignal сохрянять надо удвлять буфер из памяти не факт что надо
onon Сделай флажок не удалять, и не удаляй на флудфиле
onon Или наоборот для слабых только включать
Vort если там где-то гонка между потоками, то она может создавать проблемы и без удаления буфера
Vort баг найти надо блин!
Vort иначе он будет ещё долго преследовать
orignal if (buffer && !it.second->IsUnreachable ()) // don't save bad router
orignal saveToDisk.push_back(std::make_pair(ident, buffer));
orignal it.second->SetUnreachable (false);
orignal не в этом ли все дело?
orignal мы роутер не сохраняем а флаг почему то сбрасываем
Vort меня вообще этот метод дёргания флага туда-сюда не радует. там легко допустить ошибку
Vort но это так, просто вспомнилось
orignal это вообще надо переделать нормально
orignal там сплошные костыли
Vort альтерантивный вариант - залогировать вообще всё, что может происходить с этими буферами и проследить по логу какой-то конкретный кейс
Vort но я не знаю, будет ли на отдельном узле у меня ошибка сыпать
Vort хотя знаю. будет
Vort но хватит ли нынешнего логирования
Vort или надо ещё что-то добавлять
Vort те же записи на диск
Vort чтобы исключить вариант гонки между записями
orignal гонки междый записями быть не может
orignal там вначале проверка
Vort orignal: void ScheduleBufferToDelete () { m_IsBufferScheduledToDelete = false; };
Vort похоже я зря запускал студию )
Vort но если он никогда не удаляется... тогда откуда вообще проблема?
Vort похоже я запутался
orignal тьфу ты ))
orignal а вот x3
orignal скорее всего битый
orignal счас погляжу
orignal дальше
orignal кто еще вызывает DeleteBuffer?
Vort LoadRouterInfo
orignal ну так он же в этот момент есть на диске
Vort а вообще я так и не понял почему ты начал переделывать сохранение
Vort у флудфила обычно недостатка в файлах нету
orignal когда?
Vort если их специально не грохнуть
Vort ну вот это // we have something to save
Vort я думаю, что дело не в том, что что-то не сохранилось
Vort а в том, что грохнулось в неподходящий момент
orignal это я попутно перелелал
orignal потому что логически неверно
orignal что значит грознулось?
Vort // delete RI file
orignal ну это надо глянуть
orignal очень верное замечание
orignal допустим мы стали удалять в другом треде
orignal а тут он пояился
orignal тут вопрос надо ставить так
orignal а с какой стати он вообще лезет на диск за файлом
orignal а лезет потом что буфера нета
orignal а почему его нет?
orignal это главный вопрос
orignal второе это в принципе неправильно сбрасывать буфер сразу
Vort сейчас просто наугад убрал r->DeleteBuffer () из NetDb::LoadRouterInfo. посмотрю, исчезнут ли ошибки
Vort не исчезли
Vort ещё больше насыпало
orignal ты сделай лучше
orignal ты сделай его пустым
Vort попробую и так. долго собираться только будет
orignal так там дело явно не в буфере
orignal счас посмотрим дальше
orignal мне непонятно как вообще буфер становится нулевым
Vort по логике, особенно с тем багом (=false) такого не должно было быть вообще
Vort если только этот bool не читался откуда-то с потолка из-за повреждения памяти
Vort хотя вижуал студия обычно повреждения памяти не любит, так что скорее всего бы крешнуло
Vort загадка в общем
orignal а не может ли он например изначально быть нулевым
Vort ну я вот убрал код из DeleteBuffer и пока что ошибок нету. но подожду, в позапрошлый раз они только через 10 минут начали сыпаться
orignal таким образом получается что в какой то момент DeleteBuffer вызывается а запись на диск не происходит
Vort у тебя как-то очень избирательно расставлены блокировки m_RouterInfosMutex
orignal ори расставлены от фонаря
Vort может ломаться сам по себе m_RouterInfos
Vort и читать данные с потолка
orignal в каком случае?
orignal приведи пример колизии
orignal я думаю возможно тут вот что
orignal LoadRouterInfo вызвали
orignal буфеп сбросили
orignal а потом он взял и удалился с диска
Vort предположительно, любой из m_RouterInfos.erase и for (auto& it: m_RouterInfos) в NetDb::SaveUpdated
Vort но я не проверял, может они все в одном треде. но как-то не похоже
orignal а erase разве не из SaveUpdate вызывается?
Vort сейчас проверю
Vort NetDb::AddRouterInfo допустим
Vort а он из HandleNTCP2RouterInfoMsg
Vort короч похоже что напали на след довольно интересной баги
Vort у меня до сих пор нету ошибок после очистки DeleteBuffer
Vort а этот DeleteBuffer по сути был под if (false)
orignal зато в LoadRouterInfo не было if(false)
orignal значит идет оно оттуда
Vort я его убирал и сразу сыпало ошибки
orignal да согласен надо мьютекс поменять
orignal поставь перед for (auto& it: m_RouterInfos)
orignal и убери изнути цикла и увидим
orignal LoadRouterInfo только при старте
orignal и да скорее всего ты прав
orignal интератор стал невалидным
orignal и мы удаляем не то что должны
Vort сейчас попробую
Vort и у меня есть предположение, как false мог стать true. студия в дебаг режиме, по-моему, при удалении объектов забивает память специальным значением
Vort если что-то не так удалилось из-за недостаточного покрытия мьютекса, то на вот такой объект-зомби итерация могла попасть
Vort ну это предположение
Vort последний коммит себе пока не вливаю. попробую переставить мьютекс не трогая баг с false
Vort то есть, вернув в DeleteBuffer баганутое содержимое
Vort а тьфу. глупость написал
Vort ну не важно. собираю
Vort но подозреваю что могу в двойную блокировку вляпаться
Vort с переставленным lock_guard всё равно насыпало ошибок
Vort точно true пришло от зомби
Vort m_IsBufferScheduledToDelete true (0xcd) bool
Vort cdcdcdcd - это как раз значение, которым студия забивает удалённые объекты
Vort хотя... может ещё и неинициализированные
Vort orignal: ты же инициализацию m_IsBufferScheduledToDelete не во все конструкторы прописал
Vort наверно в этом бага
Vort по крайней мере, надо проверить этот вариант
Vort а если не поможет - тогда искать дальше
Vort * 0xCDCDCDCD : Used by Microsoft's C++ debugging runtime library to mark uninitialised heap memory
Vort * 0xDDDDDDDD : Used by Microsoft's C++ debugging heap to mark freed heap memory
orignal ну и какой вывод?
Vort сейчас тестирую добавление m_IsBufferScheduledToDelete (false) в ещё два конструктора
Vort может одно из них лишнее правда
orignal думаю дело в этом
orignal а в & вот здесь for (auto& it: m_RouterInfos)
orignal да ты прав в один забыл
Vort сейчас через GHA соберётся и сразу на основной узел накатаю
Vort за 10 минут аптайма ни одной Can't open ошибки. по сравнению с 200 ошибками в прошлый раз
Vort так что переделка мьютекса может и подождать. но то как хочешь
Vort а вот инициализацию починить надо
orignal я уже починил
orignal последний коммит