Исходный код вики Транзакция и хранилище
Редактировал(а) Alexandr Fokin 2023/01/23 17:32
Последние авторы
author | version | line-number | content |
---|---|---|---|
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 | ))) |