调用三方时负载均衡失败导致业务代码获取contextMgr为空
還沒有人認領這個 Issue。
評估
研究方向
首先,沿著 issue 中所示的 AsyncResponse callback,透過 InvokerUtils.reactiveInvoke 追蹤失敗的 LoadBalancer.chooseServer 路徑。檢查 ContextUtils 如何在 invocation.next 周圍管理 invocation context,並將其與 CompletableFuture.get 的呼叫端進行比較。當失敗的第三方呼叫不再讓業務程式碼帶有 null contextMgr 時,即表示完成;為此失敗路徑新增或執行回歸測試覆蓋率。
由索引模型根據 Issue 內容生成。
描述
版本:1.3.10
代码实现:业务为REST接口,非Reactive模式,业务调用三方接口为Reactive模式,调用三方结束后,通过CompletableFuture的get方法获取三方调用结果后返回。
问题场景:压测的过程中,因三方未扩容,压测一段时间后负载均衡失败,LoadBalancer.chooseServer返回null,导致了InvokerUtils的reactiveInvoke方法传给invocation.next的AsyncResponse被调用:
invocation.next(ar -> {
ContextUtils.setInvocationContext(invocation.getParentContext());
try {
invocation.getInvocationStageTrace().finishHandlersResponse();
invocation.onFinish(ar);
asyncResp.handle(ar);
} finally {
ContextUtils.removeInvocationContext();
}
});
以上的ContextUtils.removeInvocationContext()语句执行,导致ContextUtils中的contextMgr被清理,如下业务代码执行触发空指针异常:
ContextUtils.getInvocationContext().getLocalContext().put(CommonConstant.RETURN_CODE,0)
- 主要語言
- Java
- 星號
- 1.9k
- 分支
- 813
- PR 合併指標
- 30 天內沒有已合併 PR
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 沒有貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
apache/servicecomb-java-chassis 的其他 Issue
-
bug
難度 2/5 1-3 小時 新手友好度 65/100
apache/servicecomb-java-chassis#5106 ·
-
question
難度 5/5 一週以上 新手友好度 35/100
apache/servicecomb-java-chassis#5153 · 1 則留言 ·
-
question
難度 4/5 3-5 天 新手友好度 25/100
apache/servicecomb-java-chassis#5146 ·
-
[FEATURE] - When will ServiceComb support Spring Boot 4.x, Spring Framework 7.x, and Jackson 3.x?未關閉enhancement
難度 5/5 一週以上 新手友好度 25/100
apache/servicecomb-java-chassis#5145 ·
-
[BUG] - The latest instance information cannot be obtained when cache instances is empty.可能重新可做 @chengyouling 於 151 天前認領,目前沒有進行中的 PR。 未關閉2.x bug
apache/servicecomb-java-chassis#5141 · 已指派 1 人 ·
查看 apache/servicecomb-java-chassis 的全部 Issue
相似的 Issue
-
BC remittance upload: a claim MSP refused (S03) is saved with a blank status instead of refused (F)未關閉type: bug
難度 2/5 1-3 小時 新手友好度 88/100
carlos-emr/carlos#4933 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
Vakore/ZappierGames#147 ·
-
spigotmc
難度 1/5 1 小時以內 新手友好度 92/100
Dans-Plugins/Wild-Pets#356 ·
維護者通常 1 天內回覆
-
spigotmc
難度 1/5 1 小時以內 新手友好度 85/100
Dans-Plugins/Medieval-Roleplay-Engine#371 ·
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 84/100
維護者通常 2 天內回覆