В коде XQuery, когда я делаю вызов xdmp:http-post
, я могу настроить значение тайм-аута в параметрах запроса. Скажем, я настраиваю его на 5 секунд, он возвращает исключение тайм-аута.
У меня вопрос: попытается ли MarkLogic завершить вызов модуля XQuery или отменить его? Много раз это нужно делать из консоли администратора, чтобы отменить запрос вручную.
Запросы находятся в другом кластере, мне нужна информация для завершения транзакции.
will MarkLogic try to complete the calling XQuery module or cancel it?
Модуль, который вы вызываете из xdmp:http-post()
, не знает, что время ожидания клиента истекло, и он перестал ждать отправки ответа. Он продолжит обработку запроса и будет работать над созданием ответа.
Если вы хотите, чтобы он имел более короткий тайм-аут ближе к значению тайм-аута модуля, вызывающего xdmp:http-post()
, вы можете добавить xdmp:set-request-time-limit()
, чтобы установить явный (более короткий) тайм-аут для этого запроса.
xdmp:set-request-time-limit(6),
for $i in (1 to 1000)
return ( xdmp:log("I'm feeling sleepy..."||$i), xdmp:sleep(1000) )
Вы даже можете принять значение тайм-аута в качестве параметра запроса для HTTP POST, чтобы клиент мог динамически устанавливать тайм-аут для каждого запроса.
Спасибо, Мэдс Хансен.
Почему вы выполняете модуль для выполнения
xdmp:http-post()
для выполнения модуля? Тестируете конечную точку REST? Было бы проще импортировать библиотечный модуль и выполнять его методы или вызывать основной модуль напрямую, а не выполнять HTTP-вызовы.