When resharding clones the retryable write session info to a recipient, the TransactionParticipant's affectedNamespaces is cloned over as "admin.$cmd", rather than the actual collection name that received the write.
The following is observed:
1. Resharding starts
2. A batched insert (with featureFlagReplicateVectoredInsertsTransactionally enabled) to the donor shard produces the following opLog entry:
{
lsid: {
id: new UUID("b1cc56c0-5e8e-4d2b-8214-b57862671656"),
uid: Binary(Buffer.from("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "hex"), 0)
},
txnNumber: Long("0"),
op: 'c',
ns: 'admin.$cmd',
o: {
applyOps: [
{
op: 'i',
ns: 'test.foo',
ui: new UUID("e261a21a-d619-4a2a-bdda-8ab97a704abc"),
o: { _id: ObjectId("6708f8bfeca9cf5157b53d81"), a: 1, x: -1 },
o2: { x: -1, _id: ObjectId("6708f8bfeca9cf5157b53d81") },
destinedRecipient: 'repro-bf-35320-2-rs1',
stmtId: 0
},
{
op: 'i',
ns: 'test.foo',
ui: new UUID("e261a21a-d619-4a2a-bdda-8ab97a704abc"),
o: { _id: ObjectId("6708f8bfeca9cf5157b53d82"), a: 2, x: -1 },
o2: { x: -1, _id: ObjectId("6708f8bfeca9cf5157b53d82") },
destinedRecipient: 'repro-bf-35320-2-rs1',
stmtId: 1
}
]
},
ts: Timestamp({ t: 1728641215, i: 5 }),
t: Long("1"),
v: Long("2"),
wall: ISODate("2024-10-11T10:06:55.618Z"),
prevOpTime: { ts: Timestamp({ t: 0, i: 0 }), t: Long("-1") },
multiOpType: 1
}
3. Resharding clones this session info to the recipient and produces the following oplog entry (notice the o2.ns field is "admin.$cmd") :
{
lsid: {
id: new UUID("b1cc56c0-5e8e-4d2b-8214-b57862671656"),
uid: Binary(Buffer.from("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "hex"), 0)
},
txnNumber: Long("0"),
op: 'n',
ns: 'admin.$cmd',
o: { '$sessionMigrateInfo': 1 },
o2: {
lsid: {
id: new UUID("b1cc56c0-5e8e-4d2b-8214-b57862671656"),
uid: Binary(Buffer.from("e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "hex"), 0)
},
txnNumber: Long("0"),
op: 'c',
ns: 'admin.$cmd',
o: {
applyOps: [
{
op: 'i',
ns: 'test.foo',
ui: new UUID("e261a21a-d619-4a2a-bdda-8ab97a704abc"),
o: { _id: ObjectId("6708f8bfeca9cf5157b53d81"), a: 1, x: -1 },
o2: { x: -1, _id: ObjectId("6708f8bfeca9cf5157b53d81") },
destinedRecipient: 'repro-bf-35320-2-rs1',
stmtId: 0
},
{
op: 'i',
ns: 'test.foo',
ui: new UUID("e261a21a-d619-4a2a-bdda-8ab97a704abc"),
o: { _id: ObjectId("6708f8bfeca9cf5157b53d82"), a: 2, x: -1 },
o2: { x: -1, _id: ObjectId("6708f8bfeca9cf5157b53d82") },
destinedRecipient: 'repro-bf-35320-2-rs1',
stmtId: 1
}
]
},
ts: Timestamp({ t: 1728641215, i: 5 }),
t: Long("1"),
v: Long("2"),
wall: ISODate("2024-10-11T10:06:55.618Z"),
prevOpTime: { ts: Timestamp({ t: 0, i: 0 }), t: Long("-1") },
multiOpType: 1,
_id: {
clusterTime: Timestamp({ t: 1728641215, i: 5 }),
ts: Timestamp({ t: 1728641215, i: 5 })
}
},
stmtId: [ 0, 1 ],
fromMigrate: true,
ts: Timestamp({ t: 1728641216, i: 8 }),
t: Long("1"),
v: Long("2"),
wall: ISODate("2024-10-11T10:06:56.298Z"),
prevOpTime: { ts: Timestamp({ t: 0, i: 0 }), t: Long("-1") }
}
4. If at a later time the recipient shard needs to follow this session's oplog chain to reconstruct a TransactionParticipant's state, it will add "admin.$cmd" as affectedNamespace, instead of the original namespace (test.foo in this case). This is because when TransactionParticipant processes the entry in (3), it will observe that entry.getNss() (o2.ns) is "admin.$cmd".
- related to
-
SERVER-96052 Investigate all possible types of writes during resharding that can result in bugs like SERVER-95724
-
- Closed
-
-
SERVER-96041 Measure performance impact of processing vectored insert oplog entries
-
- Backlog
-