|
Tenant oplog applier fails to handle below edge case involving back-to-back tenant migration (rs0 -> rs1 -> rs0).
1) rs0: Retryable insert at txnNum: 55 succeeds.
2) rs0: No-op session write (E.g. no-op retryable update) at txnNum: 56 succeeds, causing no writes to 'config.transactions' table but updates in-memory transaction participant.
3) Start migration from rs0 -> rs1, copying the oplog chain for txnNum:55 from rs0 to rs1.
4) rs0 -> rs1 migration succeeds.
5) Starting a migration again from rs1 -> rs0 should succeed. But, currently it fails with ErrorCodes.TransactionTooOld because tenant oplog applier doesn't consider no-op session writes (E.g, no-op retryable update, read transactions or abort replica set transactions).
|