Исходный код вики Транзакция и хранилище

Редактировал(а) Alexandr Fokin 2023/01/23 17:32

Последние авторы
1 [[image:Схема.png]]
2
3 ----
4
5 |(% colspan="2" style="width:214px" %)Комментарий
6 |(% style="width:214px" %)Условия|(% style="width:1281px" %)Тестирование проходило на версии 7 TestCluster.
7 В качестве хранилища использовалась самодельная реализация IGrainStorage. Для имитации ошибки записи был задействован декоратор, который по порядковому номеру операции записи производил ошибку.
8 После изменяющей транзакции предпринималась попытка в последующих транзакциях прочитать состояние.
9 |(% style="width:214px" %)По итогам предварительного тестирования.|(% style="width:1281px" %)(((
10 Единичная ошибка записи в хранилище может:
11
12 * Как быть корректно обработана последующими операциями.
13 При этом транзакция будет применена и все изменения будут сохранены.
14 * Так и привести к тому, что будет получено неконсистентное состояние в grain при записи которого возникла ошибка
15 (по факту его состояние вернется к виду до начала транзакции. При этом состояния других Grain будут изменены, словно транзакция применилась успешно).
16
17 Первоначально я рассчитывал, что поведение системы будет другим.
18 Допускается вероятность того, что сами тесты были выполнены не корректно.
19 )))
20 |(% style="width:214px" %)Проблемные случаи|(% style="width:1281px" %)(((
21 Ошибка возникала в случае, когда не удавалось выполнить запись в:
22
23 * Ошибка при записи последнего состояния на этапе "Запись подготовленных изменений в хранилище".
24 * Ошибка при записи любого состояния, кроме последнего на этапе "Применение всех изменений".
25
26 В остальных случаях системе удавалось восстановиться и сохранить консистентность.
27 )))