diff --git a/src/server.cpp b/src/server.cpp index dda218cf4..cb47457e0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -4887,14 +4887,14 @@ uint64_t getMvccTstamp() void incrementMvccTstamp() { - uint64_t msPrev = server.mvcc_tstamp >> 22; + uint64_t msPrev = server.mvcc_tstamp >> 20; if (msPrev >= (uint64_t)server.mstime) // we can be greater if the count overflows { atomicIncr(server.mvcc_tstamp, 1); } else { - server.mvcc_tstamp = ((uint64_t)server.mstime) << 22; + server.mvcc_tstamp = ((uint64_t)server.mstime) << 20; } } diff --git a/src/server.h b/src/server.h index 0f2fc3783..f9de2f656 100644 --- a/src/server.h +++ b/src/server.h @@ -1524,6 +1524,10 @@ struct redisServer { unsigned char uuid[UUID_BINARY_LEN]; /* This server's UUID - populated on boot */ struct fastlock flock; + + // Format: + // Lower 20 bits: a counter incrementing for each command executed in the same millisecond + // Upper 44 bits: mstime (least significant 44-bits) enough for ~500 years before rollover from date of addition uint64_t mvcc_tstamp; };