Feat/long link#141
Conversation
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## master #141 +/- ##
=====================================================
+ Coverage 85.87630% 86.20402% +0.32771%
- Complexity 4327 4337 +10
=====================================================
Files 436 436
Lines 14373 14381 +8
Branches 1287 1293 +6
=====================================================
+ Hits 12343 12397 +54
+ Misses 2030 1984 -46
🚀 New features to boost your workflow:
|
tRPC-Java 长链接改造方案详细总结一、需求与目标1.1 原方案问题原 tRPC-Java 客户端走的是 "按需短连接 + 空闲断开" 模式:
1.2 目标
二、整体架构与关键模块三、改造细节(按层分组)3.1 Cluster 层:
|
| 测试类 | 用途 | 关键技术 |
|---|---|---|
RpcClusterClientManagerTest (17) |
主流程:getOrCreateClient/close/checkAndReconnect/Proxy delegate | 纯 JUnit + Stub |
DefClusterInvokerCloseFutureTest (5) |
CAS remove 防误删语义 | 纯 JUnit |
RpcClusterClientManagerLoggerLevelTest (1) |
覆盖 3 个 logger.isDebugEnabled()==false 分支 |
log4j2 LoggerContext.updateLoggers() 临时调级别 |
RpcClusterClientManagerSchedulerRejectTest (1) |
覆盖 scheduler 抛 RejectedExecutionException 的 catch 分支 |
PowerMock mockStatic(WorkerPoolManager.class) |
HttpRpcClientLongLinkTest (10) |
markUsed/isAvailable 三分支 + Http2/Https 继承 | 反射 + 子类 |
关键单测设计取舍
- PowerMock 在 JDK17 下崩溃(
MagicAccessorImpl限制)→ 项目锁定 JDK8,PowerMock 可用 - logger 分支覆盖不靠 PowerMock 改 static-final:
Whitebox.setInternalState在 PowerMock 1.7.4 + JDK8 下也修改不了 static-final → 改用 log4j2 标准 API 调级别,零反射、零 PowerMock,最简单 - scheduler 异常:直接 mock 静态方法
WorkerPoolManager.getShareScheduler()返回会抛RejectedExecutionException的 ScheduledExecutorService
最终覆盖率
RpcClusterClientManager 行覆盖 93%,3 处 isDebugEnabled + scheduler catch 全部覆盖。剩余未覆盖:
- L165 DCL 内层并发竞态 check(防御代码)
- L367
RpcClientProxy.equals中getClass != obj.getClass(boilerplate)
六、改动文件清单
核心改动(已 commit)
RpcClusterClientManager.java— 改造主体DefClusterInvoker.java— CAS remove 修复AbstractClientTransport.java— channels 改 CopyOnWriteArrayListNettyTcpClientTransport.java/NettyTcpServerTransport.java— 移除 IdleStateHandlerNettyClientHandler.java/NettyServerHandler.java— 删除 idle close 死代码HttpRpcClient.java/Http2cRpcClient.java— evictIdle + lastUsedNanos + isAvailableHttpConsumerInvoker.java/Http2ConsumerInvoker.java— markUsed
单测
RpcClusterClientManagerTest.java(增强 17 测试)DefClusterInvokerCloseFutureTest.java(新建 5 测试)RpcClusterClientManagerLoggerLevelTest.java(新建 1 测试,本次新增)RpcClusterClientManagerSchedulerRejectTest.java(新建 1 测试,本次新增)HttpRpcClientLongLinkTest.java(新建 10 测试)
No description provided.