[EDP] 允许编辑作业二进制文件

https://blueprints.launchpad.net/sahara/+spec/edp-edit-job-binaries

目前没有办法编辑作业二进制文件。如果需要更改路径,例如,必须删除作业二进制文件并创建一个新的。最常见的用例是用户创建作业二进制文件、运行作业,并且由于路径不存在而从作业中收到错误的情况。虽然这并非绝对必要,但可编辑的作业二进制文件对象在用户需要更正路径或凭据时会提供便利。

问题描述

REST API 或 Conductor 级别中没有用于更新作业二进制文件对象的 API 方法。

更正作业二进制文件的唯一方法是删除现有文件并创建一个包含更正信息的新的。虽然可以使用相同的名称,但对象 ID 会不同。

如果允许编辑,用户只需要执行一次操作即可进行更正。此外,ID 会被保留,以便引用它的对象将引用更正后的路径。

通常情况下,编辑作业二进制文件对于引用它的作业对象来说不会有问题。一旦作业执行进入“RUNNING”状态,它通过作业对象间接引用的任何作业二进制文件对象都已上传到集群进行执行。因此,编辑作业二进制文件对象不会导致任何错误。

只有在作业二进制文件对象被“PENDING”状态的作业执行引用时,才应该禁止编辑。此时,二进制文件尚未上传到集群,在此窗口期间的更改将导致作业使用与提交时不同的路径运行。

请注意,作业执行使用的二进制文件的路径应记录在作业执行中。这将消除对引用现有作业执行的作业二进制文件中的路径编辑的限制。这将在参考部分中列出的单独蓝图中完成(对执行期间使用的数据源路径的类似记录在另一个蓝图中得到支持)。

提议的变更

为作业二进制文件对象向 REST API 添加更新操作。不允许更新被“PENDING”状态的作业执行引用的作业二进制文件(这可以在验证期间检查)。

允许编辑作业二进制文件的以下字段

  • name

  • description

  • 如果该值为非“internal-db://”路径,则允许编辑 url

对于存储在 Sahara 数据库中的二进制文件,URL 由 Sahara 生成,不应可编辑。

将相应的更新操作添加到 python-saharaclient。

替代方案

无需操作

数据模型影响

REST API 影响

由于这是一个新的端点,因此将保持向后兼容性。

PUT /v1.1/{tenant_id}/job-binaries/{job_binary_id}

正常响应代码:202 (ACCEPTED)

错误:400 (BAD REQUEST), 404 (NOT FOUND)

更新指示的 job-binary 对象

示例

请求

PUT http://sahara/v1.1/{tenant_id}/job-binaries/{job_binary_id}
{
    "description": "some description",
    "name": "my.jar",
    "url": "swift://container/correct_path"
}

response

HTTP/1.1 202 ACCEPTED
Content-Type: application/json
{
    "created_at": "2015-04-08 20:48:18",
    "description": "",
    "id": "640ca841-d4d9-48a1-a838-6aa86b12520f",
    "name": "my.jar",
    "tenant_id": "33724d3bf3114ae9b8ab1c170e22926f",
    "updated_at": "2015-04-09 10:48:18",
    "url": "swift://container/correct_path"
}

其他最终用户影响

此操作还应添加到 python-saharaclient API 中

$ sahara job-binary-update [–name NAME] [–id ID] [–json]

部署者影响

开发者影响

Sahara-image-elements impact

Sahara-dashboard / Horizon 影响

为了从 Horizon UI 中利用此功能,我们需要在作业二进制文件页面上的每个作业二进制文件上选择一个“编辑”操作

实现

负责人

主要负责人

Trevor McKay

其他贡献者

Chad Roberts

工作项

添加 REST 和支持方法到 Sahara 添加 python-saharaclient 中的操作 添加 Horizon 中作业二进制文件屏幕中的操作 添加到 api-ref 中的 WADL

依赖项

这是一个将作业二进制文件路径存储在作业执行对象中的蓝图。首先实现此蓝图将允许编辑作业二进制文件,只要它们不在 PENDING 状态。否则,将不得不禁止编辑引用现有作业执行的作业二进制文件。

https://blueprints.launchpad.net/sahara/+spec/edp-store-binary-paths-in-job-executions

测试

Sahara 和 python-saharaclient 中的单元测试

文档影响

可能任何关于编辑其他对象(如模板)的用户文档

参考资料