-
Type:
Task
-
Resolution: Unresolved
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Sharding
-
None
-
Cluster Scalability
-
3
-
None
-
None
-
None
-
None
-
None
-
None
-
None
As part of SERVER-67492, it was found that the following "op" = "n" oplog entry with empty "o2" field and "o" value as "$wouldChangeOwningShard" : 1 is created when "featureFlagUpdateDocumentShardKeyUsingTransactionApi" feature flag is set for "findAndModify" command:
{
"lsid" : {
"id" : UUID("d7bf4672-6df6-4ab3-9aa5-738a68c4fbb2"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"txnNumber" : NumberLong(62),
"op" : "n",
"ns" : "test0_fsmdb0.fsmcoll0",
"ui" : UUID("723d67f7-ce95-4812-9171-07c39130c567"),
"o" : {
"$wouldChangeOwningShard" : 1
},
"o2" : {
},
"stmtId" : 0,
"fromMigrate" : true,
"ts" : Timestamp(1658761337, 107),
"t" : NumberLong(1),
"v" : NumberLong(2),
"wall" : ISODate("2022-07-25T15:02:17.027Z"),
"prevOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
}
}
On the other hand, "op" = "n" with an empty "o2" field and "fromMigrate:true" indicates a pre/postImage oplog entry which can be easily mixed together with "$wouldChangeOwningShard" : 1 case above:
{
"lsid" : {
"id" : UUID("77972370-47d2-40c6-a786-c91e17c90e9c"),
"uid" : BinData(0,"47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=")
},
"txnNumber" : NumberLong(30),
"op" : "n",
"ns" : "test5_fsmdb0.fsmcoll0",
"ui" : UUID("9b26f8b6-ab52-4d92-8309-7ca77213d083"),
"o" : {
"_id" : 450,
"skey" : 511,
"tid" : 2,
"counter" : 1
},
"o2" : {
},
"stmtId" : 0,
"fromMigrate" : true,
"ts" : Timestamp(1654658045, 197),
"t" : NumberLong(34),
"v" : NumberLong(2),
"wall" : ISODate("2022-06-08T03:14:05.522Z"),
"prevOpTime" : {
"ts" : Timestamp(0, 0),
"t" : NumberLong(-1)
}
}
It would be great if we can consolidate oplog format to avoid handling special cases in code in order to make the code more maintainable over time.