From 61da3652f5860b027644bd072f9f27049acf77ae Mon Sep 17 00:00:00 2001 From: hailin Date: Mon, 12 Jan 2026 12:50:07 -0800 Subject: [PATCH] fix(deploy): reorder full-reset steps for proper CDC sync MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- backend/services/deploy-mining.sh | 59 +++++++++++++++++++------------ 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/backend/services/deploy-mining.sh b/backend/services/deploy-mining.sh index 923e79d0..61a2054a 100755 --- a/backend/services/deploy-mining.sh +++ b/backend/services/deploy-mining.sh @@ -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