fix(delivery): 删除通知只登记 KAFKA:msg,schd 不再发 tombstone(ACM2-87)
- FdelProcessor 移除 schd TOMBSTONE,仅保留 msg 删除通知(C-9) - HistorySweepJob 补发的清退通知由 schd TOMBSTONE 改为 msg 删除通知 - msg value 形态沿用现状(deleted:true JSON),待 Q5 定稿不改成 null tombstone - 同步修订 FdelAndAdftProcessorTest / HistorySweepJobTest / HistorySweepPurgePgTest 断言
This commit is contained in:
@@ -68,7 +68,7 @@ class HistorySweepJob(
|
||||
|
||||
val toPurge = candidates.filter { it.flid in archivedFlids }
|
||||
// 归档与删除之间主泵可能已写入同一 FLID:进锁事务后按 (FLID, STATE_VERSION) 复查,
|
||||
// 仍合格才登记 tombstone 并删除;事件与删除同事务提交或回滚(D1、US-14 AC4)。
|
||||
// 仍合格才登记删除通知并删除;事件与删除同事务提交或回滚(D1、US-14 AC4)。
|
||||
var purged = 0
|
||||
txManager.inTransaction {
|
||||
lock.lock()
|
||||
@@ -78,7 +78,7 @@ class HistorySweepJob(
|
||||
// 从没收到过 FDEL、被这里直接清掉的航班,删除前补发一次通知,否则下游一直以为它还在
|
||||
val preDelete = rechecked.filter { it.wasNeverFdel }
|
||||
if (preDelete.isNotEmpty()) {
|
||||
msgEvents.insertAll(preDelete.map { tombstone(it, now) })
|
||||
msgEvents.insertAll(preDelete.map { deletionNotice(it, now) })
|
||||
}
|
||||
purged = flightState.purgeArchived(rechecked)
|
||||
}
|
||||
@@ -86,10 +86,10 @@ class HistorySweepJob(
|
||||
return SweepOutcome(candidates.size, archivedFlids.size, purged, snapLogPurged)
|
||||
}
|
||||
|
||||
private fun tombstone(candidate: HistoryCandidate, createdAt: Instant) = MsgEvent(
|
||||
target = Targets.KAFKA_SCHD,
|
||||
/** C-9:删除通知只走 KAFKA:msg;value 形态("deleted":true 的 JSON)沿用现状,待 Q5 定稿。 */
|
||||
private fun deletionNotice(candidate: HistoryCandidate, createdAt: Instant) = MsgEvent(
|
||||
target = Targets.KAFKA_MSG,
|
||||
partitionKey = candidate.flid,
|
||||
eventType = EventType.TOMBSTONE,
|
||||
stateVersion = candidate.stateVersion,
|
||||
payloadJson = """{"flid":"${candidate.flid}","stateVersion":${candidate.stateVersion},"deleted":true}""",
|
||||
createdAt = createdAt,
|
||||
|
||||
@@ -86,20 +86,8 @@ class FdelProcessor(
|
||||
val createdAt = clock.instant()
|
||||
msgEvents.insertAll(
|
||||
listOf(
|
||||
MsgEvent(
|
||||
target = Targets.KAFKA_SCHD,
|
||||
partitionKey = payload.flid,
|
||||
eventType = EventType.TOMBSTONE,
|
||||
stateVersion = current?.stateVersion ?: 0L,
|
||||
payloadJson = mapper.writeValueAsString(
|
||||
mapOf(
|
||||
"flid" to payload.flid,
|
||||
"stateVersion" to (current?.stateVersion ?: 0L),
|
||||
"deleted" to true,
|
||||
),
|
||||
),
|
||||
createdAt = createdAt,
|
||||
),
|
||||
// C-9:删除通知只走 KAFKA:msg,schd 不再发 tombstone;
|
||||
// value 形态("deleted":true 的 JSON)沿用现状,待 Q5 定稿
|
||||
MsgEvent(
|
||||
target = Targets.KAFKA_MSG,
|
||||
partitionKey = payload.flid,
|
||||
|
||||
Reference in New Issue
Block a user