diff options
author | Ian Boros <ian.boros@mongodb.com> | 2020-08-17 15:02:53 -0400 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2020-09-09 03:06:57 +0000 |
commit | cbb82fd1b270f84e544243acbba2cb3fed779c28 (patch) | |
tree | afe0fc762f61d49a67551e8b5a1e990965f9e5de /src/mongo/db/s/config_server_op_observer.cpp | |
parent | 58fd67fc2232a4ca591ff66443fd22213d4b5cac (diff) | |
download | mongo-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.cpp | 17 |
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; } |