bereng commented on code in PR #2464:
URL: https://github.com/apache/cassandra/pull/2464#discussion_r1266224505
##########
src/java/org/apache/cassandra/db/DeletionTime.java:
##########
@@ -195,42 +195,126 @@ public static Serializer getSerializer(Version version)
return legacySerializer;
}
- // Serializer for Usigned Integer ldt
+ /* Serializer for Usigned Integer ldt
+ *
+ * ldt is encoded as a uint in seconds since unix epoch, it can go up o
2106-02-07T06:28:13+00:00 only.
+ * Since mfda is micros since the Unix Epoch with 7 bytes we can encode
2^56 ~= 2284 years. That leaves
+ * 1 free byte we can use to store flags for sentinel values with some
space saving.
+ *
+ * Currently we flag:
+ * - A LIVE ldt 0x01
+ * - A maxed mfda 0x02
+ */
public static class Serializer implements ISerializer<DeletionTime>
{
+ private final static int IS_LIVE_DELETION = 0x01;
+ private final static int IS_MAX_MFDA = 0x02;
+ // Long.MAX_VALUE sentinel value equivalent in 7bytes
+ public final static long MAX_MFDA = (1L << (7 * 8)) - 1;
+
public void serialize(DeletionTime delTime, DataOutputPlus out) throws
IOException
{
- out.writeInt(delTime.localDeletionTimeUnsignedInteger);
- out.writeLong(delTime.markedForDeleteAt());
+ if (delTime.equals(LIVE))
+ out.writeByte(IS_LIVE_DELETION);
+ else if (delTime.markedForDeleteAt() == Long.MAX_VALUE)
+ {
+ out.writeByte(IS_MAX_MFDA);
+ out.writeInt(delTime.localDeletionTimeUnsignedInteger);
+ }
+ else
+ {
+ if (delTime.markedForDeleteAt() > MAX_MFDA &&
delTime.markedForDeleteAt() != Long.MAX_VALUE)
+ throw new IOException("Value too high for markForDeleteAt
to encode in 7 bytes: " + delTime.markedForDeleteAt());
Review Comment:
Agreed. But let's wait see how the mail to the ML resolves first and then we
can shoot for the right solution.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]