Python 修订版中没有客户端id的处理器不允许通过REST-API进行PUT更新
我想更新处理器的状态。我可以通过Python 修订版中没有客户端id的处理器不允许通过REST-API进行PUT更新,python,rest,apache-nifi,Python,Rest,Apache Nifi,我想更新处理器的状态。我可以通过/nifi api/processors/proc_id上的GET请求成功检索处理器的当前状态 我得到了以下JSON: {"revision":{"version":1},"id":"cd55-processor-id-03ab4","uri":" ..." .... 当我尝试将新状态写回Nifi时,在/processors/{id}/run
/nifi api/processors/proc_id
上的GET
请求成功检索处理器的当前状态
我得到了以下JSON:
{"revision":{"version":1},"id":"cd55-processor-id-03ab4","uri":" ..." ....
当我尝试将新状态写回Nifi时,在/processors/{id}/run status
上放置时出现问题-我收到以下错误:
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
(尽管有人说这是一个可选属性),但处理器没有客户机ID
这是我的带有客户机ID的代码-这适用于客户机ID存在于GET
JSON中的处理器。
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在评论中是正确的-将未递增的版本号发回工作。不过这种行为有点奇怪,所以我想最简单的方法就是永远不要手动更改处理器的版本
如果存在clientId
和版本号
,则可以手动增加所需的版本
如果存在无客户端ID
且只有版本号
,则Nifi不允许任何版本增量
我认为问题在于版本。您在proc_version_inc var中有什么价值?我应该在哪里找到这个版本?处理器上的GET
返回的JSON中不存在这样的变量。啊,你是说我的变量proc\u version\u inc
是我在GET
请求期间从处理器检索到的版本号,并按1
@Cribber递增。您不应该递增版本,nifi会这样做。只要把你从那里得到的东西寄出去就行了