Class CSN
- All Implemented Interfaces:
Serializable,Comparable<CSN>
- See Also:
-
- Inspiration for this class
comes from LDAPChangeSequenceNumber
A CSN has the same internal representation regardless of the version used to encode it. The version is used to ensure compatibility with older servers.
The CSN external representation depends on the version:
- Version 1: fixed length, historical:
00{rest of the 8 bytes timestamp}{numeric replicaId on two bytes}{seqnum} - Version 2: variable length, used from DJ 6.5.0 onwards:
01{replicaId length}{timestamp}{seqnum}{string replicaId} - Version 3: used in Leader-based replication:
02{replicaId length}{streamTimeStamp}{single 0xFF byte}{timestamp}{seqnum}{string replicaId}
{replicaId length}is encoded on a single byte; each timestamp in V2 and V3 is encoded on 6 bytes,{streamTimeStamp}is encoded on 6 bytes;{seqnum}is always encoded on 4 bytes. The single 0xFF byte in version 3 is used to separate the stream timestamp from the timestamp for debugging purposes.The replication stream timestamp, corresponding to the time a stream is created, is an invariant in comparing CSNs, since the CSN timestamp is in itself an absolute time reference, hence the stream timestamp is not used in comparisons nor equality checks. {@see StreamId}
- Version 1: fixed length, historical:
- Serialized Form
- Inspiration for this class
comes from LDAPChangeSequenceNumber
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic enumThe version of a CSN to ask for a particular representation. -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final intThe number of bytes used by the byte string representation of a change number v1.static final CSNThe maximum possible value for a CSN; used for comparisons and initialization, the stream id does not count.static final CSNThe minimum possible value for a CSN; used for comparisons and initialization, the stream id does not count.static final longThe has no meaning for this CSN.static final intThe position of the replica name in a string representation of a CSN V1 and V2.static final intThe position of the replica name in a string representation of a CSN V3.static final intThe number of characters used by the string representation of a change number v1. -
Method Summary
Modifier and TypeMethodDescriptionstatic intCompares this CSN with the provided CSN for order and returns a negative number ifcsn1is older thancsn2, zero if they have the same age, or a positive number ifcsn1is newer thancsn2.intCompares this CSN with the provided CSN for order and returns a negative number if this CSN is older thancsn, zero if they have the same age, or a positive number if this CSN is newer thancsn.booleanGetter for the replica ID.intGetter for the sequence number.longGet the stream timestamp associated to thisCSNin milliseconds.longgetTime()Getter for the time.longGet the timestamp associated to thisCSNin seconds.inthashCode()booleanisNewerThan(CSN csn) Returnstrueif this CSN is newer than the provided CSN.booleanisNewerThanOrEqualTo(CSN csn) Returnstrueif this CSN is newer than or equal to the provided CSN.booleanisOlderThan(CSN csn) Returnstrueif this CSN is older than the provided CSN.booleanisOlderThanOrEqualTo(CSN csn) Returnstrueif this CSN is older than or equal to the provided CSN.booleanisOldestCsn(ReplicaId replicaId) Returns if this is the oldest possible CSN for a replica.static booleanReturnstrueif the provided string can be parsed as a CSN.static CSNCreate a newCSN.static CSNnewCsnV1(long timeStamp, int seqNum, int replicaId) Create a newCSN.static CSNCreate a newCSN.static CSNnewestCsn(long timeStamp) Return the newest possible CSN for the given time.static CSNReturns the newest possible CSN for a replica.static CSNoldestCsn(long timeStamp) Returns the oldest possible CSN for the given time.static CSNReturns the oldest possible CSN for a replica.static voidskipCsn(ByteStringReader reader) Advances reading the provided reader to the end of the CSN representation, by skipping over it.Encodes this CSN as a byte string.voidtoByteString(ByteStringBuilder builder, CSN.CsnVersion version) Encodes this CSN into the provided byte string builder according to the given CSN version.toByteString(CSN.CsnVersion version) Encodes this CSN as a byte string according to the given CSN version.Returns theInstantrepresenting the CSN time.toJson()Returns the json representation of this CSN.toString()Convert theCSNto a printable String.toString(CSN.CsnVersion version) Convert theCSNto a printable String according to the given CSN version.Convert theCSNto a printable String with a user friendly format.static CSNParses the providedtoString()representation of a CSN.static CSNvalueOf(ByteString bs) Decodes the providedtoByteString(CsnVersion)representation of a CSN.static CSNvalueOf(ByteStringReader reader) Decodes the providedtoByteString(CsnVersion)representation of a CSN, possibly embedded in a larger sequence.
-
Field Details
-
BYTE_ENCODING_V1_LENGTH
public static final int BYTE_ENCODING_V1_LENGTHThe number of bytes used by the byte string representation of a change number v1. -
STRING_ENCODING_V1_LENGTH
public static final int STRING_ENCODING_V1_LENGTHThe number of characters used by the string representation of a change number v1.- See Also:
-
REPLICA_NAME_POSITION_V2
public static final int REPLICA_NAME_POSITION_V2The position of the replica name in a string representation of a CSN V1 and V2.- See Also:
-
REPLICA_NAME_POSITION_V3
public static final int REPLICA_NAME_POSITION_V3The position of the replica name in a string representation of a CSN V3.- See Also:
-
NO_STREAM
public static final long NO_STREAMThe has no meaning for this CSN.- See Also:
-
MIN_VALUE
The minimum possible value for a CSN; used for comparisons and initialization, the stream id does not count. -
MAX_VALUE
The maximum possible value for a CSN; used for comparisons and initialization, the stream id does not count.
-
-
Method Details
-
isValid
Returnstrueif the provided string can be parsed as a CSN.- Parameters:
str- the CSN- Returns:
trueif the provided string can be parsed as a CSN
-
valueOf
Parses the providedtoString()representation of a CSN.- Parameters:
str- The string to be parsed.- Returns:
- The parsed CSN.
- See Also:
-
valueOf
Decodes the providedtoByteString(CsnVersion)representation of a CSN.- Parameters:
bs- The byte string to be parsed.- Returns:
- The decoded CSN.
- See Also:
-
valueOf
Decodes the providedtoByteString(CsnVersion)representation of a CSN, possibly embedded in a larger sequence.- Parameters:
reader- The reader of the byte string to be parsed.- Returns:
- The decoded CSN.
-
skipCsn
Advances reading the provided reader to the end of the CSN representation, by skipping over it.- Parameters:
reader- The reader to advance
-
newCsnV1
Create a newCSN. -
newCsnV2
Create a newCSN. -
newCsn
Create a newCSN. -
getTime
public long getTime()Getter for the time.- Returns:
- the time
-
getTimeSec
public long getTimeSec()Get the timestamp associated to thisCSNin seconds.- Returns:
- timestamp associated to this
CSNin seconds
-
getStreamTimeStamp
public long getStreamTimeStamp()Get the stream timestamp associated to thisCSNin milliseconds.- Returns:
- the stream timestamp associated to this
CSNin milliseconds
-
getSeqnum
public int getSeqnum()Getter for the sequence number.- Returns:
- the sequence number
-
getReplicaId
Getter for the replica ID.- Returns:
- the replica ID
-
equals
-
hashCode
public int hashCode() -
toByteString
Encodes this CSN as a byte string.The returned representation is according to the most recent CSN version. Use
toByteString(CsnVersion)to get a representation compatible with earlier protocol versions.- Returns:
- The encoded representation of this CSN.
- See Also:
-
toByteString
Encodes this CSN as a byte string according to the given CSN version.- Parameters:
version- The required representation version- Returns:
- The encoded representation of this CSN.
-
toByteString
Encodes this CSN into the provided byte string builder according to the given CSN version.- Parameters:
builder- The byte string builder.version- The required representation version- See Also:
-
toString
Convert theCSNto a printable String.The returned representation is according to the most recent CSN version. Use
toString(CsnVersion)to get a representation compatible with earlier protocol versions. -
toString
Convert theCSNto a printable String according to the given CSN version.- Parameters:
version- The required representation version- Returns:
- the string
-
toStringUI
Convert theCSNto a printable String with a user friendly format.- Returns:
- the string
-
compare
Compares this CSN with the provided CSN for order and returns a negative number ifcsn1is older thancsn2, zero if they have the same age, or a positive number ifcsn1is newer thancsn2.- Parameters:
csn1- The first CSN to be compared, which may benull.csn2- The second CSN to be compared, which may benull.- Returns:
- A negative number if
csn1is older thancsn2, zero if they have the same age, or a positive number ifcsn1is newer thancsn2.
-
isOlderThan
Returnstrueif this CSN is older than the provided CSN.- Parameters:
csn- The CSN to be compared.- Returns:
trueif this CSN is older than the provided CSN.
-
isOlderThanOrEqualTo
Returnstrueif this CSN is older than or equal to the provided CSN.- Parameters:
csn- The CSN to be compared.- Returns:
trueif this CSN is older than or equal to the provided CSN.
-
isNewerThanOrEqualTo
Returnstrueif this CSN is newer than or equal to the provided CSN.- Parameters:
csn- The CSN to be compared.- Returns:
trueif this CSN is newer than or equal to the provided CSN.
-
isNewerThan
Returnstrueif this CSN is newer than the provided CSN.- Parameters:
csn- The CSN to be compared.- Returns:
trueif this CSN is newer than the provided CSN.
-
compareTo
Compares this CSN with the provided CSN for order and returns a negative number if this CSN is older thancsn, zero if they have the same age, or a positive number if this CSN is newer thancsn.- Specified by:
compareToin interfaceComparable<CSN>- Parameters:
csn- The CSN to be compared.- Returns:
- A negative number if this CSN is older than
csn, zero if they have the same age, or a positive number if this CSN is newer thancsn.
-
toInstant
Returns theInstantrepresenting the CSN time.- Returns:
- the
Instantrepresenting the CSN time
-
oldestCsn
Returns the oldest possible CSN for the given time.- Parameters:
timeStamp- the time of the CSN- Returns:
- the oldest possible CSN for the given time
-
oldestCsn
Returns the oldest possible CSN for a replica.- Parameters:
replicaId- the replica- Returns:
- the oldest possible CSN for a replica
-
isOldestCsn
Returns if this is the oldest possible CSN for a replica.- Parameters:
replicaId- the replica- Returns:
- if this is the oldest possible CSN for a replica
-
newestCsn
Return the newest possible CSN for the given time.- Parameters:
timeStamp- the time of the CSN- Returns:
- the newest possible CSN for the given time
-
newestCsn
Returns the newest possible CSN for a replica.- Parameters:
replicaId- the replica- Returns:
- the newest possible CSN for a replica
-
toJson
Returns the json representation of this CSN.- Returns:
- the json representation of this CSN
-