summaryrefslogtreecommitdiff
path: root/src/mongo/s/stale_exception.cpp
diff options
context:
space:
mode:
authorEsha Maharishi <esha.maharishi@mongodb.com>2018-03-07 14:08:41 -0500
committerEsha Maharishi <esha.maharishi@mongodb.com>2018-03-12 16:24:39 -0400
commit7a799697e4024e6cca11dbd99bfe51da69a673b4 (patch)
tree2662bf768f149b03a541145e4fd5d35ae6837dc0 /src/mongo/s/stale_exception.cpp
parente372a6848385ec26aeeed4688d472348f87bc88f (diff)
downloadmongo-7a799697e4024e6cca11dbd99bfe51da69a673b4.tar.gz
SERVER-33098 Make shards check the client's databaseVersion and throw StaleDbVersion on mismatch
Diffstat (limited to 'src/mongo/s/stale_exception.cpp')
-rw-r--r--src/mongo/s/stale_exception.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mongo/s/stale_exception.cpp b/src/mongo/s/stale_exception.cpp
index 6aea3833d52..2fad1b5e142 100644
--- a/src/mongo/s/stale_exception.cpp
+++ b/src/mongo/s/stale_exception.cpp
@@ -35,6 +35,7 @@
namespace mongo {
MONGO_INIT_REGISTER_ERROR_EXTRA_INFO(StaleConfigInfo);
+MONGO_INIT_REGISTER_ERROR_EXTRA_INFO(StaleDbRoutingVersion);
void StaleConfigInfo::serialize(BSONObjBuilder* bob) const {
bob->append("ns", _ns);
@@ -51,4 +52,26 @@ std::shared_ptr<const ErrorExtraInfo> StaleConfigInfo::parse(const BSONObj& obj)
return std::make_shared<StaleConfigInfo>(obj);
}
+void StaleDbRoutingVersion::serialize(BSONObjBuilder* bob) const {
+ bob->append("db", _db);
+ bob->append("vReceived", _received.toBSON());
+ if (_wanted) {
+ bob->append("vWanted", _wanted->toBSON());
+ }
+}
+
+StaleDbRoutingVersion::StaleDbRoutingVersion(const BSONObj& obj)
+ : StaleDbRoutingVersion(
+ obj["db"].String(),
+ DatabaseVersion::parse(IDLParserErrorContext("StaleDbRoutingVersion-vReceived"),
+ obj["vReceived"].Obj()),
+ !obj["vWanted"].eoo()
+ ? DatabaseVersion::parse(IDLParserErrorContext("StaleDbRoutingVersion-vWanted"),
+ obj["vWanted"].Obj())
+ : boost::optional<DatabaseVersion>{}) {}
+
+std::shared_ptr<const ErrorExtraInfo> StaleDbRoutingVersion::parse(const BSONObj& obj) {
+ return std::make_shared<StaleDbRoutingVersion>(obj);
+}
+
} // namespace mongo