diff options
Diffstat (limited to 'src/mongo/bson')
-rw-r--r-- | src/mongo/bson/oid.cpp | 4 | ||||
-rw-r--r-- | src/mongo/bson/oid.h | 7 | ||||
-rw-r--r-- | src/mongo/bson/oid_test.cpp | 6 |
3 files changed, 11 insertions, 6 deletions
diff --git a/src/mongo/bson/oid.cpp b/src/mongo/bson/oid.cpp index ca9c6e558a9..26d90d97bad 100644 --- a/src/mongo/bson/oid.cpp +++ b/src/mongo/bson/oid.cpp @@ -162,6 +162,10 @@ void OID::init(Date_t date, bool max) { std::memcpy(_view().view(kInstanceUniqueOffset), &rest, kInstanceUniqueSize + kIncrementSize); } +time_t OID::asTimeT() const { + return getTimestamp(); +} + std::string OID::toString() const { return toHexLower(_data, kOIDSize); } diff --git a/src/mongo/bson/oid.h b/src/mongo/bson/oid.h index 7f4f31a4369..4474a12dbe2 100644 --- a/src/mongo/bson/oid.h +++ b/src/mongo/bson/oid.h @@ -176,8 +176,9 @@ public: */ void initFromTermNumber(int64_t term); + time_t asTimeT() const; Date_t asDateT() const { - return Date_t::fromMillisSinceEpoch(getTimestamp() * 1000LL); + return Date_t::fromMillisSinceEpoch(asTimeT() * 1000LL); } // True iff the OID is not empty @@ -197,8 +198,8 @@ public: static unsigned getMachineId(); // used by the 'features' command static void regenMachineId(); - // Timestamp is a 4-byte positive integer so we use uint32_t - typedef uint32_t Timestamp; + // Timestamp is 4 bytes so we just use int32_t + typedef int32_t Timestamp; // Wrappers so we can return stuff by value. struct InstanceUnique { diff --git a/src/mongo/bson/oid_test.cpp b/src/mongo/bson/oid_test.cpp index 6d34d6a5808..8be156ae41d 100644 --- a/src/mongo/bson/oid_test.cpp +++ b/src/mongo/bson/oid_test.cpp @@ -109,7 +109,7 @@ TEST(Basic, Deserialize) { 0xDEu, 0xADu, 0xBEu, - 0xEFu, // timestamp is 3735928559 (unsigned) + 0xEFu, // timestamp is -559038737 (signed) 0x00u, 0x00u, 0x00u, @@ -122,7 +122,7 @@ TEST(Basic, Deserialize) { OID o1 = OID::from(OIDbytes); - ASSERT_EQUALS(o1.getTimestamp(), 3735928559); + ASSERT_EQUALS(o1.getTimestamp(), -559038737); OID::InstanceUnique u = o1.getInstanceUnique(); for (std::size_t i = 0; i < OID::kInstanceUniqueSize; ++i) { ASSERT_EQUALS(u.bytes[i], 0x00u); @@ -158,7 +158,7 @@ TEST(Basic, FromTerm) { auto oidHead = oidStr.substr(0, 8); auto oidTail = oidStr.substr(oidStr.length() - 1); - ASSERT_EQUALS("ffffffff", oidHead); + ASSERT_EQUALS("7fffffff", oidHead); ASSERT_EQUALS(term, std::stoi(oidTail)); } } |