修订版中没有 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-status
的 PUT
期间,当我尝试将新状态写回 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}
这个和其他处理器的唯一区别是,其他处理器在处理器的GET
JSON中没有clientId
。但即使我明确地将 clientId
设置为一个空字符串(或从具有现有 clientId
的处理器中复制它),它也会给我同样的错误。
到目前为止我找到的唯一解决方案是 手动 更改 Web-UI 中的处理器,之后处理器有一个客户端 ID 和代码作品由 .我真的不想每次发生错误时都这样做。有人有什么想法吗?
所以,@yaprak 在评论中是正确的 - 将未增加的版本号发回有效。虽然这种行为有点奇怪,所以我想最简单的方法是永远不要手动更改处理器的 revision
。
如果存在clientId
和version-number
,那么您可以根据需要手动增加版本。
如果存在没有clientId
,只有version-number
,那么Nifi不允许任何版本的增加。
我想更新处理器的状态。我可以通过 /nifi-api/processors/proc_id
.
GET
请求成功检索处理器的当前状态
我得到以下 JSON 返回:
{"revision":{"version":1},"id":"cd55-processor-id-03ab4","uri":" ..." ....
问题发生在 /processors/{id}/run-status
的 PUT
期间,当我尝试将新状态写回 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}
这个和其他处理器的唯一区别是,其他处理器在处理器的GET
JSON中没有clientId
。但即使我明确地将 clientId
设置为一个空字符串(或从具有现有 clientId
的处理器中复制它),它也会给我同样的错误。
到目前为止我找到的唯一解决方案是 手动 更改 Web-UI 中的处理器,之后处理器有一个客户端 ID 和代码作品由 .我真的不想每次发生错误时都这样做。有人有什么想法吗?
所以,@yaprak 在评论中是正确的 - 将未增加的版本号发回有效。虽然这种行为有点奇怪,所以我想最简单的方法是永远不要手动更改处理器的 revision
。
如果存在
clientId
和version-number
,那么您可以根据需要手动增加版本。如果存在没有
clientId
,只有version-number
,那么Nifi不允许任何版本的增加。