Несовместимость обновления MarkLogic (переход на более раннюю версию)
Недавно я обновил наш MarkLogic 9.xx до 10.xx (последняя версия). Мы столкнулись с этой ошибкой:
XDMP-NESTEDMULTI: xdmp:invoke-function(function() as item()*, query...) - Невозможно создать вложенную транзакцию с несколькими операторами внутри транзакции с несколькими операторами.
Теперь наш способ решить эту проблему - вернуться к версии 9.xx до появления ошибки.
Есть ли правильный способ понизить версию MarkLogic? или даже устранить ошибку выше?
1 ответ
Вам нужно будет проверить код, вызывающий эту ошибку. Найдите любые функции eval, invoke или spawn и посмотрите, какие опции установили режим транзакции наupdate
.
режим транзакции
[УСТАРЕЛО: используйте
update
а такжеcommit
параметры вместо этого.] Явно установите режим транзакции для этого контекста. Допустимые значения:auto
(по умолчанию),query
,update-auto-commit
,update
. Дополнительные сведения см. В разделе " Режим транзакции" в Руководстве разработчика приложений.Для неявной фиксации простых обновлений укажите режим транзакции
update-auto-commit
. Режим обновления транзакции создает новую транзакцию обновления с несколькими операторами и требует явной фиксации в коде.В рамках сеанса одновременно может быть только одна активная транзакция с несколькими операторами. Если новая транзакция с несколькими операторами указана вложенной внутри транзакции с несколькими операторами, MarkLogic генерирует исключение XDMP-NESTEDMULTI.
https://docs.marklogic.com/8.0/messages/XDMP-en/XDMP-NESTEDMULTI
Причина
Eval или invoke с режимом транзакции update
была предпринята попытка транзакции с несколькими операторами.
отклик
Использовать режим транзакции update-auto-commit
вместо.