hbs2/docs/devlog.md

6.6 KiB
Raw Blame History

2023-02-06

Ну а так, базовый PEX заработал

TODO: Добавлять пиров в KnownPeers только после того, как они пинганулись. Т.е пинговать пиров, если их еще нет. Не добавлять в KnownPeers до того, как ответили на пинг.

TODO: Научиться убирать дубликаты пиров. Их можно распознать по PeerNonce, но непонятно, какой из пиров оставлять. Иначе это будет реально большая проблема при скачивании.

TODO: Убедиться, что subscribe на перманентное событие НИКОГДА не вызывается в рекурсии. Проверить ВСЕ subscribe. Возможно, вставить проверки в рантайм. Возможно, ограничить число таких событий и ругаться в рантайме.

FIXME: При вычислении burst надо каким-то образом находить плато и не лезть выше него.

FIXME: Задержку в очередь пиров при рассылке GetBlockSize, что бы не спамить пиров, пока запрос не уехал в отстой. Надо для каждого пира поставить задержку в 0.5 defBlockInfoTimeout или наоборот, в 1 defBlockInfoTimeout. #medium #asap

FIXME: добавить peer-nonce в peer-data что бы можно было определять себя при пинге и вычеркивать из known-peers, что бы пакеты по кругу не гонять. #easy

2023-02-05

fixme

Багтрекеры не нужны. Нужно сделать утилиту fixme, которая будет вести список FIXME/TODO из файлов. Формат FIXME/TODO достаточно расслабленный, но с определёнными условностями (TBD).

Каждая такая запись привязывается к файлу/строчке/гитовому коммиту. Оттуда и берёт автора, и как-то трекает историю.

Изменения workflow делаются отдельными записями, можно еще с криптоподписью (взять тот же самый credentials).

Аттачменты и прочее --- добавлять хэш-ссылками на

  1. объект hbs2/offgrid
  2. git blob

Тогда, если по этому гитовому хэшу объект где-то находится (в т.ч. вообще в любом репозитории, у нас же может быть глобальный словарь sha1 <-> offgrid-hash) то - рисуем картинку или изображаем аттачмент.

Про PEX

Надо делать PEX. PEX очень простой:

  data PEXEntry e = PEXAdd (PeerAddr e)
                  | PEXDel (PeedAddr e)
                  | PEX

  data PEX e = PEXRequest  ???
             | PEXResponse ??? [PEXEntry]

На самом деле, кто тут судьи? Кто может нам сказать - добавить пира или удалить.

Только мы сами можем решать. Поэтому, PEX может быть редуцирован до:

data PEX e = PEXRequest ???
           | PEXInfo [PeerAddr e] (Maybe ???)


  A                       B
  +  -> PEXRequest    ->  +
  |                       |
  + <- PEXInfo xxx ??? <- +
  |                       |
  |                       |

Вопрос, сколько пиров за раз отдавать, как можно нас зафлудить битыми пакетами и т.д.

Информацию о пирах лучше сделать вообще отдельным протоколом, что бы не загромождать этот.

Тогда останется только

  data PEX e = PEXRequest ??? | PEXAnswer [PeerAddr e]

Оценочные суждения, что пир такой-то --- редиска и т.п. можно оставить за кадром. Там нужны пруфы или сеть доверия, для сети доверия надо хранить статистику пиров (что, кстати, можно).

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

Вопрос, база локальная или база глобальная. Вообще, это целая большая история и пока не до неё.

2023-02-03

FIXME: Перестаёт качать ближе к концу файла. После повторного анонса --- докачивает.

FIXME: Надо поднимать burst в процессе скачивания блоков

FIXME: Надо динамически повышать/понижать burst в процессе скачивания

NOTE: Почему вообще получается потеря пакетов? Такого не должно быть.

TODO: Нужно исследовать потерю чанков/блоков, и произвести сравнительные замеры при помощи iperf/netperf что бы понять, теряются ли вообще пакеты или нет.

2023-02-01

Вести баги это слишком формально и накладно, даже в упрощенном виде. Можно вести их в виде девлога.

FIXME: Обработка ошибок в асинхронном приложении. Async-и жрут исключения, даже, когда удаётся их перехватить и пробросить дальше. Например, если не удалось забиндиться на адрес, исключение стреляет, но код ошибки при выходе всё еще 0.