summaryrefslogtreecommitdiff
path: root/src/mongo/db/s/config_server_op_observer.cpp
diff options
context:
space:
mode:
authorIan Boros <ian.boros@mongodb.com>2020-08-17 15:02:53 -0400
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2020-09-09 03:06:57 +0000
commitcbb82fd1b270f84e544243acbba2cb3fed779c28 (patch)
treeafe0fc762f61d49a67551e8b5a1e990965f9e5de /src/mongo/db/s/config_server_op_observer.cpp
parent58fd67fc2232a4ca591ff66443fd22213d4b5cac (diff)
downloadmongo-cbb82fd1b270f84e544243acbba2cb3fed779c28.tar.gz
SERVER-50218 Change shard server and config server op observers to support $v:2 update oplog entries
Diffstat (limited to 'src/mongo/db/s/config_server_op_observer.cpp')
-rw-r--r--src/mongo/db/s/config_server_op_observer.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/mongo/db/s/config_server_op_observer.cpp b/src/mongo/db/s/config_server_op_observer.cpp
index e04a4f01b5a..eb4692e1a75 100644
--- a/src/mongo/db/s/config_server_op_observer.cpp
+++ b/src/mongo/db/s/config_server_op_observer.cpp
@@ -34,6 +34,7 @@
#include "mongo/db/s/config_server_op_observer.h"
#include "mongo/db/s/config/sharding_catalog_manager.h"
+#include "mongo/db/update/update_oplog_entry_serialization.h"
#include "mongo/db/vector_clock_mutable.h"
#include "mongo/logv2/log.h"
#include "mongo/s/catalog/type_config_version.h"
@@ -174,17 +175,21 @@ void ConfigServerOpObserver::onApplyOps(OperationContext* opCtx,
if (updateShard["ns"].str() != ShardType::ConfigNS.ns()) {
return;
}
+
auto updateElem = updateShard["o"];
- if (updateElem.type() != Object) {
+ if (updateElem.type() != BSONType::Object) {
return;
}
- auto updateObj = updateElem.Obj();
- auto setElem = updateObj["$set"];
- if (setElem.type() != Object) {
+
+ auto updateObj = updateElem.embeddedObject();
+ if (update_oplog_entry::extractUpdateType(updateObj) ==
+ update_oplog_entry::UpdateType::kReplacement) {
return;
}
- auto setObj = setElem.Obj();
- auto newTopologyTime = setObj[ShardType::topologyTime()].timestamp();
+
+ auto newTopologyTime =
+ update_oplog_entry::extractNewValueForField(updateObj, ShardType::topologyTime())
+ .timestamp();
if (newTopologyTime == Timestamp()) {
return;
}