Serialization Formats for Mutation

The Mutation class supports two serialization formats. While it only currently serializes to the newer version 2 format, it can read both version 1 and version 2 serialized forms.

Version 1 Format

Version 1 mutation data serialization layout
data location description
bytes 0 through 3 4-byte integer for length of row ID
next n bytes row ID
next integer data length
next n bytes data (see below)
next integer number of entries
next boolean values present flag
next integer number of values (only if values present flag is set)
next n sets of integers and byte arrays n value lengths and value data bytes (only if values present flag is set)
Version 1 "data" block layout for each entry
first integer and byte array column family length and bytes
next integer and byte array column qualifier length and bytes
next integer and byte array column visibility length and bytes
next boolean has timestamp flag
next long timestamp
next boolean deleted flag
next integer value length; if negative, value bytes are the same as those for already-read value (-length - 1)
next n bytes value bytes (only if value length is non-negative)

Version 2 Format

Version 2 mutation data serialization layout
(variable length encoding for integers and longs)
data location description
byte 0 control byte: top bit = 1 for version 2; bottom bit = values present flag
next integer length of row ID
next n bytes row ID
next integer data length
next n bytes data (see below)
next integer number of entries
next integer number of values (only if values present flag is set)
next n sets of integers and byte arrays n value lengths and value data bytes (only if values present flag is set)
Version 2 "data" block layout for each entry
first long and byte array column family length and bytes
next long and byte array column qualifier length and bytes
next long and byte array column visibility length and bytes
next boolean has timestamp flag
next long timestamp (only present if timestamp flag is set)
next boolean deleted flag
next long value length; if negative, value bytes are the same as those for already-read value (-length - 1)
next n bytes value bytes (only if value length is non-negative)