|
|
|
@ -208,13 +208,21 @@ public class MySQLBatchToS3Handler implements RequestHandler<Map<String, Object> |
|
|
|
logger.info("[{}][{}] upload success -> {}, {} rows", DB_SCHEMA, table, s3Key, dateRows.size()); |
|
|
|
|
|
|
|
// 上传成功,立即删除该分组对应的ID
|
|
|
|
try { |
|
|
|
mysqlService.deleteByIds(DB_SCHEMA, table, currentDateIds); |
|
|
|
logger.info("[{}][{}] delete {} records for date {}", DB_SCHEMA, table, currentDateIds.size(), dateKey); |
|
|
|
processedIds.addAll(currentDateIds); |
|
|
|
} catch (Exception e) { |
|
|
|
logger.error("[{}][{}] delete failed for date {}, recording to failed records", DB_SCHEMA, table, dateKey, e); |
|
|
|
// 记录到失败记录中,不回滚 S3 文件
|
|
|
|
List<Long> failedIds = mysqlService.deleteByIds(DB_SCHEMA, table, currentDateIds); |
|
|
|
|
|
|
|
// 计算成功删除的 ID(总 ID - 失败 ID)
|
|
|
|
List<Long> successIds = new ArrayList<>(currentDateIds); |
|
|
|
successIds.removeAll(failedIds); |
|
|
|
|
|
|
|
if (!successIds.isEmpty()) { |
|
|
|
logger.info("[{}][{}] delete {} records for date {}", DB_SCHEMA, table, successIds.size(), dateKey); |
|
|
|
processedIds.addAll(successIds); |
|
|
|
} |
|
|
|
|
|
|
|
// 记录失败的 ID
|
|
|
|
if (!failedIds.isEmpty()) { |
|
|
|
logger.error("[{}][{}] delete failed for {} records in date {}, recording to failed records", |
|
|
|
DB_SCHEMA, table, failedIds.size(), dateKey); |
|
|
|
FailedRecord record = failedRecords.tableRecords.get(table); |
|
|
|
if (record == null) { |
|
|
|
record = new FailedRecord(); |
|
|
|
@ -222,7 +230,7 @@ public class MySQLBatchToS3Handler implements RequestHandler<Map<String, Object> |
|
|
|
record.retryCount = 0; |
|
|
|
failedRecords.tableRecords.put(table, record); |
|
|
|
} |
|
|
|
record.ids.addAll(currentDateIds); |
|
|
|
record.ids.addAll(failedIds); |
|
|
|
anyFailure = true; |
|
|
|
} |
|
|
|
} catch (Exception e) { |
|
|
|
@ -335,15 +343,20 @@ public class MySQLBatchToS3Handler implements RequestHandler<Map<String, Object> |
|
|
|
} |
|
|
|
|
|
|
|
// 尝试删除
|
|
|
|
try { |
|
|
|
mysqlService.deleteByIds(DB_SCHEMA, table, record.ids); |
|
|
|
List<Long> stillFailedIds = mysqlService.deleteByIds(DB_SCHEMA, table, record.ids); |
|
|
|
|
|
|
|
if (stillFailedIds.isEmpty()) { |
|
|
|
// 全部成功
|
|
|
|
logger.info("[{}][{}] Success delete {} failed records, removing from list", |
|
|
|
DB_SCHEMA, table, record.ids.size()); |
|
|
|
failedRecords.tableRecords.remove(table); |
|
|
|
} catch (Exception e) { |
|
|
|
} else { |
|
|
|
// 部分失败
|
|
|
|
record.retryCount++; |
|
|
|
logger.error("[{}][{}] Failed to delete failed records (retry {}/{}), keeping in list", |
|
|
|
DB_SCHEMA, table, record.retryCount, maxRetries, e); |
|
|
|
record.ids = stillFailedIds; |
|
|
|
|
|
|
|
logger.error("[{}][{}] Still {} records failed (retry {}/{})", |
|
|
|
DB_SCHEMA, table, stillFailedIds.size(), record.retryCount, maxRetries); |
|
|
|
|
|
|
|
if (record.retryCount >= maxRetries) { |
|
|
|
logger.info("[{}][{}] Failed records reached max retries, removing from list", |
|
|
|
|