Skip to content

Commit da95581

Browse files
fix: Docker环境下Stream Load重定向到127.0.0.1:8040失败问题
- 新增ContainerAwareRedirectStrategy类处理容器环境重定向 - 修复StarRocks FE重定向到localhost/127.0.0.1时无法访问的问题 - 支持多BE节点的端口到主机名映射 - 添加完整的单元测试覆盖(5个测试用例) - 保持向后兼容性,不影响正常重定向流程 解决Issues: Docker环境中使用'load-url'='starrocks:8030'时连接127.0.0.1:8040失败 测试验证: 所有单元测试通过,编译检查通过
1 parent c0f670e commit da95581

File tree

6 files changed

+827
-14
lines changed

6 files changed

+827
-14
lines changed

TESTING_GUIDE.md

Lines changed: 371 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,371 @@
1+
# StarRocks Connector Docker 重定向问题修复 - 测试指南
2+
3+
## 🧪 测试方案概述
4+
5+
本测试方案确保我们的容器感知重定向策略修复方案的可靠性和性能。
6+
7+
## 1. 单元测试
8+
9+
### 1.1 运行基础单元测试
10+
11+
```bash
12+
# 进入stream-load-sdk目录
13+
cd starrocks-stream-load-sdk
14+
15+
# 运行重定向策略测试
16+
mvn test -Dtest=ContainerAwareRedirectStrategyTest
17+
18+
# 运行所有单元测试
19+
mvn test
20+
```
21+
22+
### 1.2 测试覆盖的场景
23+
24+
- ✅ 正常重定向(外部主机)保持不变
25+
- ✅ localhost/127.0.0.1 重定向自动修复
26+
- ✅ 多URL映射功能
27+
- ✅ HTTP/HTTPS 支持
28+
- ✅ 端口映射逻辑
29+
30+
## 2. 集成测试
31+
32+
### 2.1 创建测试环境
33+
34+
创建测试用的 Docker Compose 文件:
35+
36+
```yaml
37+
# docker-compose-test.yml
38+
version: '3.8'
39+
services:
40+
starrocks-test:
41+
image: starrocks/allin1-ubuntu:3.5.0
42+
container_name: starrocks-test
43+
ports:
44+
- "18030:8030" # FE HTTP端口
45+
- "19030:9030" # FE MySQL端口
46+
- "18040:8040" # BE HTTP端口
47+
environment:
48+
- TZ=Asia/Shanghai
49+
networks:
50+
test-network:
51+
ipv4_address: 172.26.0.10
52+
53+
flink-test:
54+
image: custom-flink:1.20.1-paimon
55+
container_name: flink-test
56+
depends_on:
57+
- starrocks-test
58+
volumes:
59+
- ./target:/opt/flink/usrlib
60+
- ./test-data:/data
61+
networks:
62+
test-network:
63+
ipv4_address: 172.26.0.20
64+
65+
networks:
66+
test-network:
67+
driver: bridge
68+
ipam:
69+
config:
70+
- subnet: 172.26.0.0/16
71+
```
72+
73+
### 2.2 集成测试脚本
74+
75+
```bash
76+
#!/bin/bash
77+
# integration-test.sh
78+
79+
echo "=== StarRocks连接器重定向修复集成测试 ==="
80+
81+
# 1. 启动测试环境
82+
echo "1. 启动测试环境..."
83+
docker-compose -f docker-compose-test.yml up -d
84+
85+
# 等待服务启动
86+
echo "2. 等待服务启动..."
87+
sleep 30
88+
89+
# 3. 验证网络连通性
90+
echo "3. 验证网络连通性..."
91+
docker exec flink-test curl -I http://starrocks-test:8030 || {
92+
echo "❌ 网络连通性测试失败"
93+
exit 1
94+
}
95+
96+
# 4. 测试场景1:使用修复前的配置(单一load-url)
97+
echo "4. 测试修复后的配置..."
98+
docker exec flink-test /opt/flink/bin/sql-client.sh -f /data/test-fix.sql || {
99+
echo "❌ 修复后配置测试失败"
100+
exit 1
101+
}
102+
103+
# 5. 测试场景2:验证向后兼容性(多load-url)
104+
echo "5. 测试向后兼容性..."
105+
docker exec flink-test /opt/flink/bin/sql-client.sh -f /data/test-backward.sql || {
106+
echo "❌ 向后兼容性测试失败"
107+
exit 1
108+
}
109+
110+
echo "✅ 集成测试通过!"
111+
112+
# 清理
113+
docker-compose -f docker-compose-test.yml down
114+
```
115+
116+
### 2.3 SQL测试文件
117+
118+
创建测试SQL文件:
119+
120+
```sql
121+
-- test-data/test-fix.sql
122+
-- 测试修复后的单一load-url配置
123+
124+
CREATE TABLE test_redirect_fix (
125+
id INT,
126+
name STRING,
127+
create_time TIMESTAMP(3)
128+
) WITH (
129+
'connector' = 'starrocks',
130+
'jdbc-url' = 'jdbc:mysql://starrocks-test:9030',
131+
'load-url' = 'starrocks-test:8030', -- 修复后:单一URL即可工作
132+
'database-name' = 'test_db',
133+
'table-name' = 'test_table',
134+
'username' = 'root',
135+
'password' = '',
136+
'sink.semantic' = 'at-least-once',
137+
'sink.properties.format' = 'json',
138+
'sink.properties.strip_outer_array' = 'true'
139+
);
140+
141+
-- 插入测试数据
142+
INSERT INTO test_redirect_fix VALUES
143+
(1, 'test_fix', CURRENT_TIMESTAMP),
144+
(2, 'redirect_works', CURRENT_TIMESTAMP);
145+
```
146+
147+
```sql
148+
-- test-data/test-backward.sql
149+
-- 测试向后兼容性(多URL配置)
150+
151+
CREATE TABLE test_backward_compat (
152+
id INT,
153+
name STRING,
154+
create_time TIMESTAMP(3)
155+
) WITH (
156+
'connector' = 'starrocks',
157+
'jdbc-url' = 'jdbc:mysql://starrocks-test:9030',
158+
'load-url' = 'starrocks-test:8030;starrocks-test:8040', -- 兼容性:多URL配置
159+
'database-name' = 'test_db',
160+
'table-name' = 'test_table2',
161+
'username' = 'root',
162+
'password' = '',
163+
'sink.semantic' = 'at-least-once',
164+
'sink.properties.format' = 'json',
165+
'sink.properties.strip_outer_array' = 'true'
166+
);
167+
168+
-- 插入测试数据
169+
INSERT INTO test_backward_compat VALUES
170+
(3, 'backward_compat', CURRENT_TIMESTAMP),
171+
(4, 'still_works', CURRENT_TIMESTAMP);
172+
```
173+
174+
## 3. 性能测试
175+
176+
### 3.1 基准测试
177+
178+
```bash
179+
#!/bin/bash
180+
# benchmark-test.sh
181+
182+
echo "=== 性能基准测试 ==="
183+
184+
# 测试修复前后的性能差异
185+
echo "1. 测试修复前性能(多URL配置)..."
186+
time docker exec flink-test /opt/flink/bin/sql-client.sh -f /data/benchmark-before.sql
187+
188+
echo "2. 测试修复后性能(单URL配置)..."
189+
time docker exec flink-test /opt/flink/bin/sql-client.sh -f /data/benchmark-after.sql
190+
191+
echo "3. 分析结果..."
192+
# 比较两次执行时间,确保性能影响 < 5%
193+
```
194+
195+
### 3.2 压力测试
196+
197+
```sql
198+
-- benchmark-stress.sql
199+
-- 大量并发插入测试
200+
201+
-- 创建测试表
202+
CREATE TABLE stress_test (
203+
id BIGINT,
204+
data STRING,
205+
timestamp_col TIMESTAMP(3)
206+
) WITH (
207+
'connector' = 'starrocks',
208+
'jdbc-url' = 'jdbc:mysql://starrocks-test:9030',
209+
'load-url' = 'starrocks-test:8030',
210+
'database-name' = 'test_db',
211+
'table-name' = 'stress_test',
212+
'username' = 'root',
213+
'password' = '',
214+
'sink.buffer-flush.max-rows' = '10000',
215+
'sink.buffer-flush.interval-ms' = '1000',
216+
'sink.semantic' = 'at-least-once'
217+
);
218+
219+
-- 批量插入测试数据(模拟高并发场景)
220+
INSERT INTO stress_test SELECT
221+
ROW_NUMBER() OVER() as id,
222+
CONCAT('test_data_', CAST(ROW_NUMBER() OVER() AS STRING)) as data,
223+
CURRENT_TIMESTAMP as timestamp_col
224+
FROM TABLE(GENERATE_SERIES(1, 100000));
225+
```
226+
227+
## 4. 回归测试
228+
229+
### 4.1 现有功能验证
230+
231+
```bash
232+
# 运行现有的所有测试用例
233+
mvn test
234+
235+
# 运行集成测试
236+
mvn integration-test
237+
238+
# 验证现有连接器功能
239+
./run-existing-tests.sh
240+
```
241+
242+
### 4.2 兼容性矩阵
243+
244+
| 配置方式 | 修复前状态 | 修复后状态 | 测试结果 |
245+
|----------|------------|------------|----------|
246+
| 单一URL (8030) | ❌ 失败 | ✅ 成功 | 待测试 |
247+
| 多URL (8030;8040) | ✅ 成功 | ✅ 成功 | 待测试 |
248+
| 直连BE (8040) | ⚠️ 部分成功 | ⚠️ 部分成功 | 待测试 |
249+
250+
## 5. 自动化测试
251+
252+
### 5.1 CI/CD 集成
253+
254+
```yaml
255+
# .github/workflows/test-redirect-fix.yml
256+
name: Test Redirect Fix
257+
258+
on:
259+
push:
260+
paths:
261+
- 'starrocks-stream-load-sdk/**'
262+
pull_request:
263+
paths:
264+
- 'starrocks-stream-load-sdk/**'
265+
266+
jobs:
267+
test:
268+
runs-on: ubuntu-latest
269+
270+
steps:
271+
- uses: actions/checkout@v2
272+
273+
- name: Set up JDK 8
274+
uses: actions/setup-java@v2
275+
with:
276+
java-version: '8'
277+
distribution: 'adopt'
278+
279+
- name: Run Unit Tests
280+
run: |
281+
cd starrocks-stream-load-sdk
282+
mvn test -Dtest=ContainerAwareRedirectStrategyTest
283+
284+
- name: Run Integration Tests
285+
run: |
286+
docker-compose -f docker-compose-test.yml up -d
287+
sleep 30
288+
./integration-test.sh
289+
docker-compose -f docker-compose-test.yml down
290+
291+
- name: Performance Test
292+
run: ./benchmark-test.sh
293+
```
294+
295+
## 6. 测试执行清单
296+
297+
### 6.1 预提交检查
298+
299+
- [ ] 单元测试通过
300+
- [ ] Checkstyle检查通过
301+
- [ ] 集成测试通过
302+
- [ ] 性能测试通过
303+
- [ ] 回归测试通过
304+
305+
### 6.2 发布前验证
306+
307+
- [ ] 多环境测试(Docker、K8s等)
308+
- [ ] 多版本兼容性验证
309+
- [ ] 文档更新验证
310+
- [ ] 用户接受测试
311+
312+
## 7. 问题排查
313+
314+
### 7.1 常见问题
315+
316+
**Q: 单元测试编译失败?**
317+
A: 检查是否有未使用的import,运行checkstyle检查
318+
319+
**Q: 集成测试连接失败?**
320+
A:
321+
```bash
322+
# 检查网络连通性
323+
docker exec flink-test ping starrocks-test
324+
325+
# 检查端口开放
326+
docker exec flink-test telnet starrocks-test 8030
327+
```
328+
329+
**Q: 性能测试结果异常?**
330+
A: 多次运行取平均值,排除环境因素影响
331+
332+
### 7.2 调试方法
333+
334+
```bash
335+
# 开启详细日志
336+
export MAVEN_OPTS="-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG"
337+
338+
# 查看重定向日志
339+
docker logs flink-test | grep -i redirect
340+
341+
# 抓包分析
342+
docker exec flink-test tcpdump -i eth0 -w /tmp/traffic.pcap host starrocks-test
343+
```
344+
345+
## 8. 测试报告模板
346+
347+
```markdown
348+
## 测试报告
349+
350+
### 测试环境
351+
- OS: Ubuntu 20.04
352+
- Docker: 20.10.x
353+
- Java: 8
354+
- Maven: 3.8.x
355+
356+
### 测试结果
357+
- 单元测试: ✅ 通过 (5/5)
358+
- 集成测试: ✅ 通过 (场景1: 成功, 场景2: 成功)
359+
- 性能测试: ✅ 通过 (性能影响 < 2%)
360+
- 回归测试: ✅ 通过 (现有功能正常)
361+
362+
### 发现问题
363+
- 无
364+
365+
### 建议
366+
- 可以合并到主分支
367+
```
368+
369+
---
370+
371+
按照此测试指南执行,可以确保修复方案的质量和可靠性。建议按顺序执行所有测试步骤。

0 commit comments

Comments
 (0)