回滚Marklogic corb任务

时间:2014-07-19 12:56:54

标签: marklogic rollback marklogic-corb

我正在编写一个corb任务,其中uri模块将一个文件uris列表传递给处理器模块,其中必须填充某个元素的字符串值。 uri模块列出了字符串短于所需的文档。由于在更新之后字符串将具有期望的长度,因此不再能够识别改变的文档。此外,在这些文件中也不会有任何先前字符串长度的记录。所以,我没有看到编写回滚脚本的简单方法。

对于此类方案,回滚的有效方法是什么?

我们没有版本管理文档。

1 个答案:

答案 0 :(得分:2)

如何使用代表CoRB批次的集合标记所有已更改的文档?

一旦你知道他们都是新人,你只需致电xdmp:collection-delete。如果您需要更精细的数据,则可以在文档或属性中将其添加为每次更新的一部分。基本上,当您触摸每个文档时,您将保存回滚信息。不要试图在单个文档中保留整个批处理的回滚信息,因为每个CoRB线程都希望同时更新它。

这种方法意味着您必须以某种方式提供批次ID。我可能会将它直接编码到最短的CoRB XQuery模块中。我写了一个库模块,其中的函数可以完成批处理工作的所有重要工作。然后,一个简单的shell脚本可以为每个批处理作业写出一个新的主模块,批处理ID直接编码到XQuery中。该主模块将为CoRB定义$URI,导入库,并调用函数:类似mylib:batch-operation($URI, "batch-"||1234567)。 shell脚本将提供batch-id:批处理开始时的纪元秒,或者对你有意义的任何内容。

您还可以查看https://github.com/mblakele/taskbot,看看它是否为您提供了更大的灵活性。