diff options
author | Esha Maharishi <esha.maharishi@mongodb.com> | 2018-03-07 14:08:41 -0500 |
---|---|---|
committer | Esha Maharishi <esha.maharishi@mongodb.com> | 2018-03-12 16:24:39 -0400 |
commit | 7a799697e4024e6cca11dbd99bfe51da69a673b4 (patch) | |
tree | 2662bf768f149b03a541145e4fd5d35ae6837dc0 /src/mongo/s/stale_exception.cpp | |
parent | e372a6848385ec26aeeed4688d472348f87bc88f (diff) | |
download | mongo-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.cpp | 23 |
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 |