云搜索服务 CSS-使用ElasticSearch的HLRC(High Level Rest Client)时,报出I/O Reactor STOPPED:I/O Reactor STOPPED是什么问题?

时间:2025-02-12 15:03:40

I/O Reactor STOPPED是什么问题?

首先根据调用栈可以定位到报错来自CloseableHttpAsyncClientBase中的90行,如下图所示:

ensureRunning()方法是在每次请求执行开始的时候调用,用来确认client状态是否为ACTIVE,如果不是ACTIVE,则会报错。然后观察CloseableHttpAsyncClientBase中的status何时会变成STOPPED,发现有且仅有两处会set为STOPPED,如下图所示:

图1 第一处STOPPED
图2 第二处STOPPED
  • 由于客户不会手动关闭客户端之后再调用接口,所以有且仅有第一处会导致status切换为STOPPED状态。
  • 对于第一处STOPPED,reactorThread线程是用来在io events发生时调度io events,当内部抛出异常时,最终会将status改为STOPPED状态。然后在bulkAsync请求的回调中抛出异常验证status的状态切换,如下图所示:

  • 当请求失败,status会切换为STOPPED且I/O Reactor将关闭,并使HLRC实例卡住。后续使用该HLRC实例调用任何请求都会失败。此处手动抛出异常是为了复现问题,生产环境中很难分辨是什么原因导致I/O Reactor关闭。
support.huaweicloud.com/trouble-css/css_10_0019.html