суббота, 28 июня 2014 г.

Опять потеряли обновление

Проблема "потерянных обновлений" уже затрагивалась (см. архив "О вреде работы под Администратор 123"). Вот ещё один интересный пример. Предположим, обработчик начал модификацию некоторой записи.



Запись блокируется для изменения другим "Каталогизатором" (особенности см. в выше упомянутом посте).



Но изменение может совершить "Абонемент". Он меняет состояние записи при выдаче, возврате, заказе и т.д..
Выдаём экземпляр произвольному пользователю.


Теперь, чтобы прочитать состояние экземпляра откроем ещё один "Каталогизатор".



Видим, что экземпляр выдан. Теперь сохраним запись в первом "Каталогизаторе" и обновим во втором.



Свершилось чудо! Выданный экземпляр стал свободным! Попробуем выдать его ещё кому либо. И у нас это получается



Это происходит по той причине, что "Абонемент" не проверяет блокировку. А "Каталогизатор", впоследствии, просто "кладёт" модифицированную запись поверх записи, модифицированной "Абонементом" ("потеря обновления").
Конечно, вероятность такого стечения обстоятельств невелико. Но она растёт на востребованных и свежих изданиях. Кроме того если что-то может случиться, оно обязательно ...
К сожалению, эту "нескладуху" "скрипт проверки БД" (см. справа) отлавливает (пока) не полностью. Если экземпляр ошибочно выдан второй раз он этого не покажет. Но до этого всё в порядке.



Видео по теме (лучше скачать 8.5 Мб)
Пиши комментарии (регистрация не требуется) или на почту acbib3@yandex.ru