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:
parent
94d8075970
commit
61da3652f5
|
|
@ -881,16 +881,16 @@ full_reset() {
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo ""
|
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
|
for service in "${MINING_SERVICES[@]}"; do
|
||||||
service_stop "$service"
|
service_stop "$service"
|
||||||
done
|
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..."
|
log_info "Waiting 15 seconds for consumer group session timeout..."
|
||||||
sleep 15
|
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)
|
# Reset offsets BEFORE migrations (which may start containers)
|
||||||
for group in "${CDC_CONSUMER_GROUPS[@]}"; do
|
for group in "${CDC_CONSUMER_GROUPS[@]}"; do
|
||||||
log_info "Resetting consumer group: $group"
|
log_info "Resetting consumer group: $group"
|
||||||
|
|
@ -927,17 +927,27 @@ full_reset() {
|
||||||
fi
|
fi
|
||||||
done
|
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
|
db_drop
|
||||||
|
|
||||||
log_step "Step 5/16: Creating 2.0 databases..."
|
log_step "Step 6/18: Creating 2.0 databases..."
|
||||||
db_create
|
db_create
|
||||||
|
|
||||||
log_step "Step 6/16: Running migrations..."
|
log_step "Step 7/18: Running migrations..."
|
||||||
db_migrate
|
db_migrate
|
||||||
|
|
||||||
# Stop any containers that were started during migration
|
# 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..."
|
log_info "Migration may have started CDC consumers, stopping them now..."
|
||||||
for service in "${MINING_SERVICES[@]}"; do
|
for service in "${MINING_SERVICES[@]}"; do
|
||||||
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" stop "$service" 2>/dev/null || true
|
docker compose -f "$COMPOSE_FILE" --env-file "$ENV_FILE" stop "$service" 2>/dev/null || true
|
||||||
|
|
@ -981,22 +991,21 @@ full_reset() {
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
log_step "Step 8/16: Registering Debezium outbox connectors..."
|
log_step "Step 9/18: Starting 2.0 services..."
|
||||||
# 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..."
|
|
||||||
for service in "${MINING_SERVICES[@]}"; do
|
for service in "${MINING_SERVICES[@]}"; do
|
||||||
service_start "$service"
|
service_start "$service"
|
||||||
done
|
done
|
||||||
|
|
||||||
log_step "Step 10/16: Waiting for services to be ready..."
|
log_step "Step 10/18: Waiting for services to be ready and sync from 1.0..."
|
||||||
log_info "Waiting 20 seconds for all services to start and sync from 1.0 CDC..."
|
log_info "Waiting 30 seconds for all services to start and sync data from 1.0 CDC..."
|
||||||
sleep 20
|
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
|
# 调用 auth-service API 发布所有旧用户事件到 outbox
|
||||||
# 这样 mining-admin-service 才能通过 Debezium 收到用户数据
|
# 这样 mining-admin-service 才能通过 Debezium 收到用户数据
|
||||||
local publish_url="http://localhost:3024/api/v2/admin/legacy-users/publish-all"
|
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"
|
log_info "You may need to manually call: curl -X POST $publish_url"
|
||||||
fi
|
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
|
# 调用 contribution-service API 发布所有算力账户事件到 outbox
|
||||||
local contrib_publish_url="http://localhost:3020/api/v2/admin/contribution-accounts/publish-all"
|
local contrib_publish_url="http://localhost:3020/api/v2/admin/contribution-accounts/publish-all"
|
||||||
local contrib_result
|
local contrib_result
|
||||||
|
|
@ -1027,7 +1040,7 @@ full_reset() {
|
||||||
log_info "You may need to manually call: curl -X POST $contrib_publish_url"
|
log_info "You may need to manually call: curl -X POST $contrib_publish_url"
|
||||||
fi
|
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
|
# 调用 contribution-service API 发布所有推荐关系事件到 outbox
|
||||||
local referral_publish_url="http://localhost:3020/api/v2/admin/referrals/publish-all"
|
local referral_publish_url="http://localhost:3020/api/v2/admin/referrals/publish-all"
|
||||||
local referral_result
|
local referral_result
|
||||||
|
|
@ -1042,7 +1055,7 @@ full_reset() {
|
||||||
log_info "You may need to manually call: curl -X POST $referral_publish_url"
|
log_info "You may need to manually call: curl -X POST $referral_publish_url"
|
||||||
fi
|
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
|
# 调用 contribution-service API 发布所有认种记录事件到 outbox
|
||||||
local adoption_publish_url="http://localhost:3020/api/v2/admin/adoptions/publish-all"
|
local adoption_publish_url="http://localhost:3020/api/v2/admin/adoptions/publish-all"
|
||||||
local adoption_result
|
local adoption_result
|
||||||
|
|
@ -1063,7 +1076,7 @@ full_reset() {
|
||||||
# - Calling publish-all again would cause duplicate records in mining-admin-service
|
# - Calling publish-all again would cause duplicate records in mining-admin-service
|
||||||
# - See: contribution-calculation.service.ts -> publishContributionRecordEvents()
|
# - 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
|
# 调用 contribution-service API 发布全网进度事件到 outbox
|
||||||
local progress_publish_url="http://localhost:3020/api/v2/admin/network-progress/publish"
|
local progress_publish_url="http://localhost:3020/api/v2/admin/network-progress/publish"
|
||||||
local progress_result
|
local progress_result
|
||||||
|
|
@ -1076,7 +1089,7 @@ full_reset() {
|
||||||
log_info "You may need to manually call: curl -X POST $progress_publish_url"
|
log_info "You may need to manually call: curl -X POST $progress_publish_url"
|
||||||
fi
|
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 事件
|
# 等待 mining-admin-service 消费 outbox 事件
|
||||||
log_info "Waiting 15 seconds for mining-admin-service to sync all data..."
|
log_info "Waiting 15 seconds for mining-admin-service to sync all data..."
|
||||||
sleep 15
|
sleep 15
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue