Откат для задачи Marklogic corb

Я пишу задачу corb, в которой модуль uri передает процессорному модулю список uris документов, в которые необходимо добавить строковое значение определенного элемента. Модуль uri перечисляет те документы, строки которых короче, чем нужно. Поскольку после обновлений строки будут иметь желаемую длину, измененные документы больше не могут быть идентифицированы. Также не было бы никакой записи предыдущих длин строк в тех документах. Итак, я не вижу простого способа написания сценария отката.

Как эффективный способ сделать откат для таких сценариев?

У нас нет документов с управлением версиями.

1 ответ

Решение

Как насчет пометки всех измененных документов коллекцией, представляющей партию CoRB?

Как только вы узнаете, что они все новые, вы можете просто позвонить xdmp:collection-delete, Если вам нужны более детальные данные, вы можете добавить их как часть каждого обновления, либо в документе, либо в свойствах. Как правило, вы сохраняете информацию об откате при касании каждого документа. Не пытайтесь хранить информацию об откате для всего пакета в одном документе, потому что все потоки CoRB захотят обновить его одновременно.

Этот подход означает, что вам нужно как-то указать идентификатор партии. Я бы, вероятно, закодировал его непосредственно в кратчайший из возможных модулей CoRB XQuery. Я написал бы модуль библиотеки с функциями, которые делают все важное для пакетной работы. Затем простой сценарий оболочки может выписать новый основной модуль для каждого пакетного задания с идентификатором пакета, закодированным непосредственно в XQuery. Этот основной модуль будет определять $URI для CoRB импортируйте библиотеку и вызывайте функцию: что-то вроде mylib:batch-operation($URI, "batch-"||1234567), Сценарий оболочки предоставит этот batch-id: время эпохи, когда пакет начался, или что-то еще, что имеет для вас смысл.

Вы также можете взглянуть на https://github.com/mblakele/taskbot и посмотреть, дает ли это больше гибкости.

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