apache / apache/apisix-python-plugin-runner
Exception Handling
- 主要言語
- Python
- スター
- 42
- フォーク
- 24
- PR マージ指標
- 30日以内にマージされた PR はありません
説明
Hello,
What is the intended behaviour of a plugin raising an exception?
e.g.
```
"plugins": {
"ext-plugin-pre-req": {
"allow_degradation": false,
"conf": [
{
"name": "netsuite-authenticator",
"value": "this is invalid json config"
}
]
}
}
```
```
def config(self, conf: Any) -> Any:
"""
Parse plugin configuration
:param conf:
:return:
"""
try:
conf_json = json.loads(conf)
except ValueError as e:
raise Exception("Configuration is invalid json")
return conf_json
```
```
2022-10-07 07:11:42,257 - INFO - request type:2, len:1792
2022-10-07 07:11:42,260 - ERROR - execute plugin `netsuite-authenticator` AnyError, ('Configuration is invalid json',)
2022-10-07 07:11:42,260 - INFO - response type:2, len:16
```
However **apisix ignores the plugin and continues with the request to the upstream**. This same occurs even if the exception is thrown in the filter() method.
I would prefer the ability to control this behaviour and I was expecting `allow_degredation` in apisix config to control the behaviour, but it seems this only apply to the plugin runner process itself, not errors from the plugin.
In some cases I also see the following errors immediately after the starting the plugin in dev mode due to the config token caching mechanism.
```
2022-10-07 07:37:13,104 - INFO - request type:2, len:1792
2022-10-07 07:37:13,106 - ERROR - token `1` cache acquisition failed
2022-10-07 07:37:13,106 - INFO - response type:2, len:16
```
Again, apisix ignores the plugin and continues with the request to the upstream, but I would rather it didn't.
I believe this is happening because the plugin runner is always returning a successful RPC response, but the "action" in the response isn't set to either stop or rewrite, so apisix just assumes the plugin didn't want to do anything.
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
評価
この issue はまだ評価されていません。