fix(deploy): reorder full-reset steps for proper CDC sync

Changes:
1. Delete Debezium connectors BEFORE dropping databases (releases replication slots)
2. Start services BEFORE registering connectors (ensures tables exist and data is synced)
3. Register connectors AFTER services sync from 1.0 CDC (snapshot.mode=initial captures existing data)
4. Add wait time for connectors to initialize before publishing data

Step order: stop services → delete connectors → drop DBs → create DBs → migrate →
start services → wait for sync → register connectors → publish data

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-01-12 12:50:07 -08:00
parent 94d8075970
commit 61da3652f5
1 changed files with 36 additions and 23 deletions

View File

@ -881,16 +881,16 @@ full_reset() {
fi
echo ""
log_step "Step 1/16: Stopping 2.0 services..."
log_step "Step 1/18: Stopping 2.0 services..."
for service in "${MINING_SERVICES[@]}"; do
service_stop "$service"
done
log_step "Step 2/16: Waiting for Kafka consumers to become inactive..."
log_step "Step 2/18: Waiting for Kafka consumers to become inactive..."
log_info "Waiting 15 seconds for consumer group session timeout..."
sleep 15
log_step "Step 3/16: Resetting CDC consumer offsets..."
log_step "Step 3/18: Resetting CDC consumer offsets..."
# Reset offsets BEFORE migrations (which may start containers)
for group in "${CDC_CONSUMER_GROUPS[@]}"; do
log_info "Resetting consumer group: $group"
@ -927,17 +927,27 @@ full_reset() {
fi
done
log_step "Step 4/16: Dropping 2.0 databases..."
log_step "Step 4/18: Deleting Debezium outbox connectors..."
# Delete connectors BEFORE dropping databases to release replication slots
local connectors=("auth-outbox-connector" "contribution-outbox-connector" "mining-outbox-connector" "trading-outbox-connector" "mining-wallet-outbox-connector")
for connector in "${connectors[@]}"; do
log_info "Deleting connector: $connector"
curl -s -X DELETE "http://localhost:8084/connectors/$connector" 2>/dev/null || true
done
log_info "Waiting 5 seconds for connectors to be fully removed..."
sleep 5
log_step "Step 5/18: Dropping 2.0 databases..."
db_drop
log_step "Step 5/16: Creating 2.0 databases..."
log_step "Step 6/18: Creating 2.0 databases..."
db_create
log_step "Step 6/16: Running migrations..."
log_step "Step 7/18: Running migrations..."
db_migrate
# Stop any containers that were started during migration
log_step "Step 7/16: Stopping containers and resetting CDC offsets again..."
log_step "Step 8/18: Stopping containers and resetting CDC offsets again..."
log_info "Migration may have started CDC consumers, stopping them now..."
for service in "${MINING_SERVICES[@]}"; do
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" stop "$service" 2>/dev/null || true
@ -981,22 +991,21 @@ full_reset() {
fi
done
log_step "Step 8/16: Registering Debezium outbox connectors..."
# Register outbox connectors for 2.0 service events
# These connectors capture events from each service's outbox table and send to Kafka
# mining-admin-service consumes these events to aggregate data from all 2.0 services
register_outbox_connectors || log_warn "Some connectors may not be registered"
log_step "Step 9/16: Starting 2.0 services..."
log_step "Step 9/18: Starting 2.0 services..."
for service in "${MINING_SERVICES[@]}"; do
service_start "$service"
done
log_step "Step 10/16: Waiting for services to be ready..."
log_info "Waiting 20 seconds for all services to start and sync from 1.0 CDC..."
sleep 20
log_step "Step 10/18: Waiting for services to be ready and sync from 1.0..."
log_info "Waiting 30 seconds for all services to start and sync data from 1.0 CDC..."
sleep 30
log_step "Step 11/16: Publishing legacy users to mining-admin-service..."
log_step "Step 11/18: Registering Debezium outbox connectors..."
# Register outbox connectors AFTER services are running and have synced data
# This ensures outbox_events tables exist and contain data to be captured
register_outbox_connectors || log_warn "Some connectors may not be registered"
log_step "Step 12/18: Publishing legacy users to mining-admin-service..."
# 调用 auth-service API 发布所有旧用户事件到 outbox
# 这样 mining-admin-service 才能通过 Debezium 收到用户数据
local publish_url="http://localhost:3024/api/v2/admin/legacy-users/publish-all"
@ -1012,7 +1021,11 @@ full_reset() {
log_info "You may need to manually call: curl -X POST $publish_url"
fi
log_step "Step 12/16: Publishing contribution data to mining-admin-service..."
log_step "Step 13/18: Waiting for connectors to start capturing..."
log_info "Waiting 10 seconds for Debezium connectors to initialize..."
sleep 10
log_step "Step 14/18: Publishing contribution data to mining-admin-service..."
# 调用 contribution-service API 发布所有算力账户事件到 outbox
local contrib_publish_url="http://localhost:3020/api/v2/admin/contribution-accounts/publish-all"
local contrib_result
@ -1027,7 +1040,7 @@ full_reset() {
log_info "You may need to manually call: curl -X POST $contrib_publish_url"
fi
log_step "Step 13/16: Publishing referral relationships to mining-admin-service..."
log_step "Step 15/18: Publishing referral relationships to mining-admin-service..."
# 调用 contribution-service API 发布所有推荐关系事件到 outbox
local referral_publish_url="http://localhost:3020/api/v2/admin/referrals/publish-all"
local referral_result
@ -1042,7 +1055,7 @@ full_reset() {
log_info "You may need to manually call: curl -X POST $referral_publish_url"
fi
log_step "Step 14/16: Publishing adoption records to mining-admin-service..."
log_step "Step 16/18: Publishing adoption records to mining-admin-service..."
# 调用 contribution-service API 发布所有认种记录事件到 outbox
local adoption_publish_url="http://localhost:3020/api/v2/admin/adoptions/publish-all"
local adoption_result
@ -1063,7 +1076,7 @@ full_reset() {
# - Calling publish-all again would cause duplicate records in mining-admin-service
# - See: contribution-calculation.service.ts -> publishContributionRecordEvents()
log_step "Step 15/16: Publishing network progress to mining-admin-service..."
log_step "Step 17/18: Publishing network progress to mining-admin-service..."
# 调用 contribution-service API 发布全网进度事件到 outbox
local progress_publish_url="http://localhost:3020/api/v2/admin/network-progress/publish"
local progress_result
@ -1076,7 +1089,7 @@ full_reset() {
log_info "You may need to manually call: curl -X POST $progress_publish_url"
fi
log_step "Step 16/16: Waiting for mining-admin-service to sync all data..."
log_step "Step 18/18: Waiting for mining-admin-service to sync all data..."
# 等待 mining-admin-service 消费 outbox 事件
log_info "Waiting 15 seconds for mining-admin-service to sync all data..."
sleep 15