This commit is contained in:
Dmitry Zuikov 2023-02-19 09:20:22 +03:00
parent 4bc442ac6c
commit 79960751ca
2 changed files with 78 additions and 5 deletions

View File

@ -183,3 +183,4 @@ fixme-set "workflow" "test" "FHMMGPm8Kh"
fixme-set "workflow" "test" "Ac1F6f2pni"
fixme-set "assigned" "voidlizard" "Ac1F6f2pni"
fixme-set "workflow" "wip" "4ZMqvoTMY3"
fixme-merged "146adg8Dyy" "HycuVXNhiZ"

View File

@ -48,8 +48,7 @@ Ref:
;; из текущего состояния.
;; как оно вычисляется / в принципе может вычисляться пока не вполне
;; понятно, поэтому на текущий момент это проверка ACL:
;; хэш коммита >- принадлежит -> owners.
;; ключ публикатора коммита принадлежит owners.
```
@ -101,21 +100,94 @@ acl: owner
удалить reader
RefUpdateState : (STATE, OP, ARGS*)
-----------------------------------
RefUpdateState : (STATE, OP, ARGS:[ARG-TYPE])
---------------------------------------------
acl: writer
OP: Опкод операции, определяется Reference
ARGS: список аргументов, возможно, пустой
ARG-TYPE: BLOB INT HASH
INT: целое число переменной размерности
BLOB: произвольная строка фиксированной длины
HASH: хэш блока
RefCommit : (STATE, NEW-STATE, PROOF:PROOF-TYPE)
------------------------------------------------
acl: зависит от PROOF-TYPE
RefGetJournal
acl: readers (?)
Обработка команд протокола
==========================
RefCommit
---------
1. Проверить PROOF
3. Построить MERKLE TREE журнала, однозначно упорядочив операции
2. Текущий STATE = JOURNAL-MERKLE-TREE
3. Удалить JOURNAL
4. Создать новый пустой JOURNAL
RefGetJournal
-------------
acl: reader (?)
1. Построить MERKLE TREE журнала, однозначно упорядочив операции
2. Вернуть HASH(MERKLE-TREE) журнала
Любая другая команда
--------------------
1. Распарсить
2. Проверить типы операндов
3. Проверить ACL
4. Записать в журнал
Журнал должен позволять добавлять записи в конец без
чтения всего журнала.
Команды в журнал добавляются последовательно по мере
их поступления.
Резюме
======
1. Состояние (state) однозначно задаётся потоком команд
2. Каждая команда может иметь своим аргументом ссылку на HASH
Утверждается, что имея подобный набор примитивов, мы можем построить
определенный (определить) класс распределенных систем.
Так как ссылки на другие объекты задаются явно при помощи типа HASH,
мы знаем, на какие объекты ссылается ссылка.
Таким образом, можно реализовать сборку мусора, когда объекты,
на которых не ссылается ни одна ссылка, могут удаляться.
TODO: journal-types-implementation
- Добавление в конец без чтения всего журнала
- Записи переменного размера
- Задавать размер страницы
- Запись может быть произвольного размера
- Для записи выделяется целое число страниц