Транзакция и хранилище

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

Схема.png


Комментарий
УсловияТестирование проходило на версии 7 TestCluster.
В качестве хранилища использовалась самодельная реализация IGrainStorage. Для имитации ошибки записи был задействован декоратор, который по порядковому номеру операции записи производил ошибку.
После изменяющей транзакции предпринималась попытка в последующих транзакциях прочитать состояние.
По итогам предварительного тестирования.

Единичная ошибка записи в хранилище может:

  • Как быть корректно обработана последующими операциями.
    При этом транзакция будет применена и все изменения будут сохранены.
  • Так и привести к тому, что будет получено неконсистентное состояние в grain при записи которого возникла ошибка
    (по факту его состояние вернется к виду до начала транзакции. При этом состояния других Grain будут изменены, словно транзакция применилась успешно).

Первоначально я рассчитывал, что поведение системы будет другим.
Допускается вероятность того, что сами тесты были выполнены не корректно.

Проблемные случаи

Ошибка возникала в случае, когда не удавалось выполнить запись в:

  • Ошибка при записи последнего состояния на этапе "Запись подготовленных изменений в хранилище".
  • Ошибка при записи любого состояния, кроме последнего на этапе "Применение всех изменений".

В остальных случаях системе удавалось восстановиться и сохранить консистентность.

Теги: