Добрый день!
Столкнулся с такой проблемой:
1-й пользователь осуществляет поиск записи FIND FIRST c локировкой SHARE-LOCK. Запрос конечно не самый лучший, в плане того что осуществлялся перебором. Пока искомая запись была найдена, был осуществлен перебор нескольких записей и вот на всех перебранных записях, как оказалось, была выставлена локировка SHARE-LOCK. Странно, почему так? Понятно что записи перебирались, но если они не подходили под запрос зачем их локировать? Процедура 1 пользователя осуществляла работу с найденной записью, а в это время...
2-й пользователь осуществлял поиск FIND FIRSTс локировкой EXCLUSIVE-LOCK. Искомой записью 2-го пользователя была одна из тех записей, что перебрал 1-й пользователь пока была найдена интересующая его запись. Тут возникла классическая ошибка, что запись заблокирована 1-м пользователем, хотя он с ней не работает.
Неужели прогресс так работает, или это я что-то не так понимаю?
Локировки записей
Re: Локировки записей
Извиняюсь, у первого пользователя тоже локировка EXCLUSIVE-LOCK
Смоделировал простую версию:
user1.p:
FIND FIRST loan WHERE CAN-DO("00*0",loan.branch-id) EXCLUSIVE-LOCK.
DISPL loan.cont-code.
PAUSE 100.
user2.p:
FIND FIRST loan WHERE loan.branch-id = "0023" EXCLUSIVE-LOCK.
DISPL loan.cont-code.
PAUSE 100.
Когда первый пользователь запускает свою процедуру локируется ряд записей.
Далее второй попадает на одну из заблокированных 1-м пользователей записей (не на ту что он отобрал)
Смоделировал простую версию:
user1.p:
FIND FIRST loan WHERE CAN-DO("00*0",loan.branch-id) EXCLUSIVE-LOCK.
DISPL loan.cont-code.
PAUSE 100.
user2.p:
FIND FIRST loan WHERE loan.branch-id = "0023" EXCLUSIVE-LOCK.
DISPL loan.cont-code.
PAUSE 100.
Когда первый пользователь запускает свою процедуру локируется ряд записей.
Далее второй попадает на одну из заблокированных 1-м пользователей записей (не на ту что он отобрал)