fix(deploy): 修复 sync-reset CDC offset 重置失败问题
- sync_reset() 添加 20 秒等待时间,确保 consumer group 变成 inactive - 添加重试逻辑(最多 3 次,每次间隔 10 秒) - 使用 grep NEW-OFFSET 检测 offset reset 是否成功 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
24412794e6
commit
350ce28c40
|
|
@ -712,7 +712,18 @@
|
||||||
"Bash(TOKEN=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJEMjUxMjI3MDAwMjIiLCJwaG9uZSI6IjE4OTI2NzYyNzIxIiwic291cmNlIjoiVjEiLCJpYXQiOjE3NjgxODM5NTIsImV4cCI6MTc2ODc4ODc1Mn0.Uq6TCFWHO64fD_MUP2IoBJzaXo99HDcp0H5s5A14EXQ\")",
|
"Bash(TOKEN=\"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJEMjUxMjI3MDAwMjIiLCJwaG9uZSI6IjE4OTI2NzYyNzIxIiwic291cmNlIjoiVjEiLCJpYXQiOjE3NjgxODM5NTIsImV4cCI6MTc2ODc4ODc1Mn0.Uq6TCFWHO64fD_MUP2IoBJzaXo99HDcp0H5s5A14EXQ\")",
|
||||||
"Bash(ssh ceshi@103.39.231.231 \"ssh ceshi@192.168.1.111 ''cd /home/durian/rwadurian && git pull && cd backend/services && ./deploy.sh rebuild auth-service''\")",
|
"Bash(ssh ceshi@103.39.231.231 \"ssh ceshi@192.168.1.111 ''cd /home/durian/rwadurian && git pull && cd backend/services && ./deploy.sh rebuild auth-service''\")",
|
||||||
"Bash(git commit -m \"$\\(cat <<''EOF''\nfeat\\(mining-admin-web\\): 复用admin-web用户管理功能\n\n- 更新用户列表:添加头像、个人/团队认种、推荐人、状态徽章\n- 更新用户详情:添加头像、KYC状态、认种统计卡片\n- 新增引荐关系Tab:展示引荐人链和直推下级树\n- 新增认种信息Tab:认种汇总和认种分类账明细\n- 新增钱包信息Tab:钱包汇总和钱包分类账明细\n- 更新类型定义和API hooks\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
"Bash(git commit -m \"$\\(cat <<''EOF''\nfeat\\(mining-admin-web\\): 复用admin-web用户管理功能\n\n- 更新用户列表:添加头像、个人/团队认种、推荐人、状态徽章\n- 更新用户详情:添加头像、KYC状态、认种统计卡片\n- 新增引荐关系Tab:展示引荐人链和直推下级树\n- 新增认种信息Tab:认种汇总和认种分类账明细\n- 新增钱包信息Tab:钱包汇总和钱包分类账明细\n- 更新类型定义和API hooks\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
"Bash(ssh ceshi@14.215.128.96 \"cd /home/ceshi/rwadurian/frontend/mining-admin-web && git pull && ls -la deploy.sh\")"
|
"Bash(ssh ceshi@14.215.128.96 \"cd /home/ceshi/rwadurian/frontend/mining-admin-web && git pull && ls -la deploy.sh\")",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" diff)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" push origin main)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" add frontend/mining-admin-web/next.config.js)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" commit -m \"$\\(cat <<''EOF''\nfix\\(mining-admin-web\\): 修复 API rewrite 路径为 v2\n\n将 next.config.js 中的 API rewrite 从 /api/v1 改为 /api/v2,\n与 mining-admin-service 的实际 API 前缀保持一致。\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" log --oneline -3)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" add backend/services/deploy-mining.sh)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" commit -m \"$\\(cat <<''EOF''\nfeat\\(deploy\\): 添加 mining-wallet-service 到 deploy-mining.sh\n\n将 mining-wallet-service 加入 2.0 系统管理脚本:\n\n- 添加到 MINING_SERVICES 数组\n- 添加别名 wallet -> mining-wallet-service\n- 添加数据库 rwa_mining_wallet\n- 添加 SERVICE_DB 映射\n- 添加端口 3025\n- 更新帮助文档\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" commit -m \"$\\(cat <<''EOF''\nrefactor\\(deploy\\): 移除 mining-admin-web 从 deploy-mining.sh\n\nmining-admin-web 是前端项目,不应该在后端服务部署脚本中管理。\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" add backend/services/contribution-service/Dockerfile backend/services/mining-admin-service/Dockerfile)",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" commit -m \"$\\(cat <<''EOF''\nfix\\(docker\\): 修复 contribution-service 和 mining-admin-service Dockerfile healthcheck 路径\n\n将 healthcheck 路径从 /api/v1/health 改为 /api/v2/health,\n与 main.ts 中的 API 前缀保持一致。\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>\nEOF\n\\)\")",
|
||||||
|
"Bash(git -C \"c:\\\\Users\\\\dong\\\\Desktop\\\\rwadurian\" log --oneline -5)"
|
||||||
],
|
],
|
||||||
"deny": [],
|
"deny": [],
|
||||||
"ask": []
|
"ask": []
|
||||||
|
|
|
||||||
|
|
@ -635,41 +635,63 @@ sync_reset() {
|
||||||
service_stop "contribution-service"
|
service_stop "contribution-service"
|
||||||
service_stop "auth-service"
|
service_stop "auth-service"
|
||||||
|
|
||||||
# Reset offsets for all consumer groups
|
# Wait for consumer groups to become inactive
|
||||||
|
log_step "Waiting for Kafka consumers to become inactive..."
|
||||||
|
log_info "Waiting 20 seconds for consumer group session timeout..."
|
||||||
|
sleep 20
|
||||||
|
|
||||||
|
# Reset offsets for all consumer groups with retry logic
|
||||||
log_step "Resetting consumer group offsets"
|
log_step "Resetting consumer group offsets"
|
||||||
|
|
||||||
for group in "${CDC_CONSUMER_GROUPS[@]}"; do
|
for group in "${CDC_CONSUMER_GROUPS[@]}"; do
|
||||||
log_info "Resetting: $group"
|
log_info "Resetting: $group"
|
||||||
local reset_success=false
|
local reset_success=false
|
||||||
|
local retry_count=0
|
||||||
|
local max_retries=3
|
||||||
|
|
||||||
# Try local kafka-consumer-groups.sh first
|
while [ "$reset_success" = false ] && [ $retry_count -lt $max_retries ]; do
|
||||||
if command -v kafka-consumer-groups.sh &>/dev/null; then
|
# Try local kafka-consumer-groups.sh first
|
||||||
kafka-consumer-groups.sh --bootstrap-server "$KAFKA_BROKERS" \
|
if command -v kafka-consumer-groups.sh &>/dev/null; then
|
||||||
--group "$group" \
|
if kafka-consumer-groups.sh --bootstrap-server "$KAFKA_BROKERS" \
|
||||||
--reset-offsets \
|
--group "$group" \
|
||||||
--to-earliest \
|
--reset-offsets \
|
||||||
--all-topics \
|
--to-earliest \
|
||||||
--execute 2>/dev/null && reset_success=true
|
--all-topics \
|
||||||
fi
|
--execute 2>&1 | grep -q "NEW-OFFSET"; then
|
||||||
|
reset_success=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Try docker exec if local failed
|
# Try docker exec if local failed
|
||||||
if [ "$reset_success" = false ] && docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${KAFKA_CONTAINER}$"; then
|
if [ "$reset_success" = false ] && docker ps --format '{{.Names}}' 2>/dev/null | grep -q "^${KAFKA_CONTAINER}$"; then
|
||||||
docker exec "$KAFKA_CONTAINER" kafka-consumer-groups --bootstrap-server localhost:9092 \
|
if docker exec "$KAFKA_CONTAINER" kafka-consumer-groups --bootstrap-server localhost:9092 \
|
||||||
--group "$group" \
|
--group "$group" \
|
||||||
--reset-offsets \
|
--reset-offsets \
|
||||||
--to-earliest \
|
--to-earliest \
|
||||||
--all-topics \
|
--all-topics \
|
||||||
--execute 2>&1 && reset_success=true
|
--execute 2>&1 | grep -q "NEW-OFFSET"; then
|
||||||
fi
|
reset_success=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$reset_success" = false ]; then
|
||||||
|
retry_count=$((retry_count + 1))
|
||||||
|
if [ $retry_count -lt $max_retries ]; then
|
||||||
|
log_warn "Consumer group still active, waiting 10s (retry $retry_count/$max_retries)..."
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
if [ "$reset_success" = true ]; then
|
if [ "$reset_success" = true ]; then
|
||||||
log_success "Offsets reset for $group"
|
log_success "Offsets reset for $group"
|
||||||
else
|
else
|
||||||
log_warn "Could not reset offsets for $group"
|
log_warn "Could not reset offsets for $group after $max_retries attempts"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
log_info "Start services to begin syncing from the beginning"
|
log_info "Start services to begin syncing from the beginning"
|
||||||
|
log_info "Run: ./deploy-mining.sh up contribution-service && ./deploy-mining.sh up auth-service"
|
||||||
}
|
}
|
||||||
|
|
||||||
sync_status() {
|
sync_status() {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue