Несовместимость обновления 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 вместо.

Другие вопросы по тегам