我正在使用管理 API 来安排任务 manage/v2/tasks?group-id=Default
并且我发送的 JSON 字符串是
{
"task-enabled":true,
"task-path":"/MarkLogic/flexrep/tasks/push-local-forests.xqy",
"task-root": "Modules/",
"task-type": "minutely",
"task-period" : 1,
"task-database": "%%DATABASE%%",
"task-modules": "%%MODULES_DATABASE%%",
"task-user": "admin",
"task-priority": "higher"
}
我的问题是如何设置任务名称?通过查看manage-task-properties.xsd,它没有任务名称。因此,如果我想使用管理 api 删除任务,DELETE/manage/v2/tasks/{id|name}
它确实需要任务名称。
因此,我在上面的 json 中创建了一个随机任务 id task-id:9459386113689474276
,当我这样做时,管理 api 会抛出异常
{
"errorResponse": {
"statusCode": "400",
"status": "Bad Request",
"messageCode": "MANAGE-INVALIDPAYLOAD",
"message": "MANAGE-INVALIDPAYLOAD: (err:FOER0000) Payload has errors in structure, content-type or values. Task payload invalid."
}
}
我查看服务器日志,发现了这个
2017-09-12 20:11:37.721 Info: [Event:id=HTTPRequest ErrorFormat] Dispatching error code to app defined error handler: 500 manage/error-handler.xqy
2017-09-12 20:11:37.818 Info: Manage: MANAGE-INVALID (err:FOER0000): task-id
2017-09-12 20:11:37.818 Info: Manage: 169:16:/MarkLogic/manage/models/task-properties-model.xqy
如何设置task-id
或task-name
以便我可以使用管理API删除任务?由于删除管理 API 确实需要删除任务的 name|id
***** 编辑 *********
我希望显式部署我的 FlexRep 计划任务
,并且仅当为特定环境启用 flexrep
时才部署。我知道我可以根据某些用户定义的变量或环境删除部署任务命令,但这也会删除其他任务的所有部署。
有没有办法告诉我不要部署特定任务?
最佳答案
不幸的是,计划任务没有名称,但它有任务路径。当您创建计划任务时,MarkLogic 将为您创建任务 ID - 您不能自行设置。
当您需要删除任务路径时,您需要使用管理 API 查找 ID - 您很可能会通过任务路径来执行此操作(很少有两个计划任务具有相同的任务路径)。
请注意 ml-gradle - https://github.com/marklogic-community/ml-gradle - 可以为您处理所有这些,如果您和/或您的团队可以选择使用 Gradle。
关于用于安排和删除任务的 Marklogic 管理 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185460/