Source

parvel / TODO

(обозначения в скобках:
 ! -- повышенный приоритет
 . -- сделано
 ~ -- в работе
)

| [] Комбинатор над серверами, который пытается повторить те запросы,
     ответ на которые был неуспешен (не CR_Ok) -- разумеется, с
     настройками типа "не более 100 раз, с паузой в
     max 600 (10 * 1.1^n) секунд для n'ного повтора").

| [] Запуск внешнего процесса ОС через Port в том числе по
     полному ps_name * argv * env * stdin * stdout * stderr.

| [] Подумать, нужно ли (вроде нет) подмножество пайпов, гарантирующих
     "1 входное = 1 выходное"

| <-
   | Работа через сеть
   | [] "Служба имён"
   | <-
      | Живём с типизацией
      | <-
         | Интерфейс для сериализации и проверок типов
         | [] Продумать, как должны жить значения, сериализованные
              по-разному (учесть, что "полиморфные движки
              сериализации" -- только маршаллинг, остальное знает/учитывает
              типы).
         | [] Учесть собственно сериализацию (её метод).
      | [] Сделать get_proc : pid -> process 'i, причём опционально
           с "хендшейком" -- отправка какого-нибудь Cmd `Ping и получение
           Cmd `Pong реальному процессу, чтобы удостовериться в том, что
           совпадают декларируемые типы сообщений (и, в случае
           сериализации, и форматы сериализации тоже).  (или "опционально
           _без_ хендшейка", подумать)
           Наверное, надо сделать Cmd (Init_session of call [=`Ping] [=`Pong]),
           чтобы через call это оформлять.
      | [] В случае процессов мы можем только игнорировать
           неправильно-типизированное сообщение (максимум -- отправить
           обратно Cmd (`Type_error of ..)) -- подумать, что делать в случае
           серверов, ибо хочется человеческую ошибку получать в dest 'o.
      | [] Подумать: успешность десериализации не проверим, отправляя
           Cmd `Ping, так как она касается только содержимого Msg и
           в общем случае не должна уметь
           сериализовывать `Ping | `Pong (так как сериализация
           Cmd и подобного будет реализована как-то гарантированно безопасно
           как в плане небезопасной десериализации, так и в плане переполнения
           буферов).
      | [] Гарантировать, что все исключения, отправляемые по сети,
           доведены до строк.  А именно, посмотреть на 1. Cmd _,
           2. CR_* (call response) и удостовериться.

| <-
   | tests
   | [] Разобраться, почему падвендой только первый тест идёт
   | [] Разобраться, почему при 
          let () = Random.init 740_666 in
          let prob p = (Random.float 1. < p) in
          оказывается так, что последние сообщения обрабатывает какой-то один
          процесс, и дело не доходит до качественного shutdown.

| <-
   | process_limit
   | [] не перезапускать процесс из монитора, если к нему нет реальных
        запросов
   | [] научиться убивать неиспользуемые процессы по таймауту, медленно,
        но неотвратимо

| <-
   | switch
   | [] Сделать нормальный Map в switch-серверах, но <3.12 ещё нужно,
        поэтому подумать, как.
   | [] При смерти рабочего процесса удалять ключ, ассоциированный с ним.
   | [] Прикинуть, можно ли сделать так, чтобы это были не сервера, а
        процессы в общем виде -- пригодится для сетевого общения (pid => proc)

| <-
   | add_state_to_server
   | [] Подумать над вопросом: стоит ли добавить запросы вида
        ( [= `Readonly | `Exclusive ] * 'i ), где `Readonly только читают
        состояние, а `Exclusive ещё и модифицируют.  Однако, это старая идея,
        которая уже изменилась с появлением process_limit.
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.