~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
за сколько? за час должно обновиться всё?
orignal
да
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
последний коммит