Проблема с блокировкой документа с помощью функции xdmp: lock-acqu ()

Мы перепробовали все варианты метода блокировки, документ заблокирован, но, тем не менее, другой пользователь может обновить документ, даже если блокировка еще не снята.

xdmp:lock-acquire("/inventory/hassan", "exclusive", "0", "This lock is acquiuired by admin user", 60)

У нас есть еще один пользователь с именем shiv с назначенной ему ролью администратора, тем не менее, пользователь shiv может выполнить указанную ниже функцию и изменить документ, даже если блокировка еще не снята.

xdmp:node-replace(doc("/inventory/hassan")//location, <location>ABC</location>)

Мы используем MarkLogic 10.0–2.1

Пожалуйста, помогите мне узнать, что здесь происходит не так.


person Shivling Bhandare    schedule 24.11.2020    source источник


Ответы (2)


Кажется, что если вы используете пользователя с admin, он обходит блокировку.

Когда я блокирую документ одним пользователем, а затем пытаюсь изменить его другим непривилегированным пользователем, я получаю следующее:

[1.0-ml] XDMP-LOCKED: xdmp:node-replace(fn:doc("/test.xml")/doc/location, <location>ABC</location>) -- Document or Directory is locked

Однако после предоставления этому пользователю роли admin он успешно выполняется и обновляет документ.

person Mads Hansen    schedule 25.11.2020

Эта блокировка не является блокировкой транзакции. Как говорится в документах:

Обратите внимание, что описанная здесь блокировка является относительно тяжелой постоянной блокировкой документа для эмуляции файловой системы через WebDAV, а не относительно легкой блокировкой транзакции для согласованности базы данных.

https://docs.marklogic.com/xdmp:lock-acquire

person hunterhacker    schedule 24.11.2020
comment
Спасибо за ответ, наше требование - заблокировать документ на определенное время, и этот документ не должен быть доступен для других во время его блокировки. Какое решение для моего варианта использования? - person Shivling Bhandare; 24.11.2020
comment
Если других можно заставить вести себя хорошо и также вызывать блокировку, тогда это сработает. Он был разработан для совместного редактирования. Или вы даже не хотите, чтобы это было видно другим? - person hunterhacker; 25.11.2020
comment
Похоже, они ожидают, что один пользователь получит эксклюзивную блокировку, а другие пользователи не смогут это сделать. Возможно, потребуется проверить, разрешено ли кому-нибудь с admin обойти эту проверку. Заблокируется ли пользователь без роли admin? - person Mads Hansen; 25.11.2020