Hello folks!

First huge thanks for this amazing project.

We actively rely on Apache APISIX at LINAGORA for our OIDC setup on top of Apache James mail server. [1]

As part of this set up we need to check for invalidated sid in upcoming tokens onto a Redis database.

We naturally wrote a Java plugin to do so.

Recently we encountered a Redis outage and to our horror HTTP requests were violently throttled by the API gateway, and bypassing the faulty Redis was taking way more time than the configured 100ms timeout.

Investigation showed that:
 - Our Redis code inside our Apisix plugin was blocking
 - That doing so was disastrous as the plugin code runs directly onto the Netty event loop of the Unix socket linking the plugin to APisix  - That the Apisix Java programming API was async friendly with it's PluginFilterChain abstraction  - But that very sadly the given PluginFilterChain was called synchronously and expected to run synchronously

While I do believe better overall design exists, being able to query external data source from within a Java plugin seems to be a pretty common expectation for at least Java users [2].

With that new knowledge I:

 - [3] Patched the LINAGORA back-channel logout plugin to be asynchronous
 - [4] Proposed an evolution of the java plugin runner to call the plugin chain in an async friendly way. This PR had been tested in our dev environments (functionally logout still works, and timeouts are well applied). We will further performance test this change and will roll it over in production in the coming days.
 - [5] Opened Github issue and [6] JIRA issue

I also do believe the threading model need to be clearly documented, and the use case of asynchronous Java plugins can be made explicit. I propose myself to write this doc.

Hope the Apisix community will like this special XMas gift.

Best regards,

Benoit TELLIER from the Apache James project.

    [1] https://github.com/linagora/tmail-backend/tree/master/demo/apisix/tmail-apisix-plugin-runner     [2] https://github.com/apache/apisix-java-plugin-runner/issues/264 https://github.com/apache/apisix-java-plugin-runner/issues/168
    [3] https://github.com/linagora/tmail-backend/pull/1412
    [4] https://github.com/apache/apisix-java-plugin-runner/pull/313
    [5] https://github.com/apache/apisix-java-plugin-runner/issues/312
    [6] https://issues.apache.org/jira/projects/APISIX/issues/APISIX-38


Reply via email to