修订版中没有 client_id 的处理器不允许通过 REST-API 进行 PUT 更新

Processors without client_id in revision allows no PUT-updates via the REST-API

我想更新处理器的状态。我可以通过 /nifi-api/processors/proc_id.

上的 GET 请求成功检索处理器的当前状态

我得到以下 JSON 返回:

{"revision":{"version":1},"id":"cd55-processor-id-03ab4","uri":" ..." ....

问题发生在 /processors/{id}/run-statusPUT 期间,当我尝试将新状态写回 Nifi 时 - 我收到以下错误:

b'Node [....] is unable to fulfill this request due to: [3, cd55-processor-id-03ab4] 
    is not the most up-to-date revision. This component appears to have been modified'

我的代码:

# Get node for current version
response = requests.get(url_nifi_api + f'processors/{processor_id}'
                        , headers=header
                        , verify=False)
processor = json.loads(response.content)
# increment for new state
proc_version_inc = processor['revision']['version'] + 1 
put_dict = {"revision": {"version": proc_version_inc}, "state": new_state, "disconnectedNodeAcknowledged": True}  

payload = json.dumps(put_dict).encode('utf8')
response = requests.put(url_nifi_api + 'processors/' + processor_id + '/run-status', headers=header, data=payload)

所以我认为问题是我需要在修订版中传递 clientId(尽管 docs 说它是一个可选属性)- 但处理器没有客户端-身份证.

这是我的带有客户端 ID 的代码 - 这适用于 GET JSON.[=27 中存在客户端 ID 的处理器=]

processor= json.loads(requests.get(url_nifi_api + f'processors/{processor_id}'
                        , headers=header
                        , verify=False).content)
# get result for instance:  {"revision":{"clientId":"60b-00d0-client-id-37c","version":4}, ....

client_id = processor['revision']['clientId']
proc_version_inc = processor['revision']['version'] + 1  # in this example: 4+1
put_dict = {"revision": {"clientId": client_id, "version": proc_version_inc}, 
            "state": new_state, "disconnectedNodeAcknowledged": True}

这个和其他处理器的唯一区别是,其他处理器在处理器的GETJSON中没有clientId。但即使我明确地将 clientId 设置为一个空字符串(或从具有现有 clientId 的处理器中复制它),它也会给我同样的错误。

到目前为止我找到的唯一解决方案是 手动 更改 Web-UI 中的处理器,之后处理器有一个客户端 ID 和代码作品由 .我真的不想每次发生错误时都这样做。有人有什么想法吗?

所以,@yaprak 在评论中是正确的 - 将未增加的版本号发回有效。虽然这种行为有点奇怪,所以我想最简单的方法是永远不要手动更改处理器的 revision

  1. 如果存在clientIdversion-number,那么您可以根据需要手动增加版本。

  2. 如果存在没有clientId,只有version-number,那么Nifi不允许任何版本的增加。