Package org.apache.cassandra.utils
Class MerkleTrees
- java.lang.Object
-
- org.apache.cassandra.utils.MerkleTrees
-
- All Implemented Interfaces:
java.lang.Iterable<java.util.Map.Entry<Range<Token>,MerkleTree>>
public class MerkleTrees extends java.lang.Object implements java.lang.Iterable<java.util.Map.Entry<Range<Token>,MerkleTree>>
Wrapper class for handling of multiple MerkleTrees at once. The MerkleTree's are divided in Ranges of non-overlapping tokens.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
MerkleTrees.MerkleTreesSerializer
class
MerkleTrees.TreeRangeIterator
-
Field Summary
Fields Modifier and Type Field Description static MerkleTrees.MerkleTreesSerializer
serializer
-
Constructor Summary
Constructors Constructor Description MerkleTrees(IPartitioner partitioner)
Creates empty MerkleTrees object.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description MerkleTree
addMerkleTree(int maxsize, byte hashdepth, Range<Token> range)
MerkleTree
addMerkleTree(int maxsize, Range<Token> range)
Add a MerkleTree with the defined size and range.void
addMerkleTrees(int maxsize, java.util.Collection<Range<Token>> ranges)
Add merkle tree's with the defined maxsize and ranges.static java.util.List<Range<Token>>
difference(MerkleTrees ltrees, MerkleTrees rtrees)
Get the differences between the two sets of MerkleTrees.MerkleTree.TreeRange
get(Token t)
Get the MerkleTree.Range responsible for the given token.MerkleTree
getMerkleTree(Range<Token> range)
Get the MerkleTree responsible for the given token range.byte[]
hash(Range<Token> range)
void
init()
Init all MerkleTree's with an even tree distribution.void
init(Range<Token> range)
Init a selected MerkleTree with an even tree distribution.void
invalidate(Token t)
Invalidate the MerkleTree responsible for the given token.java.util.Iterator<java.util.Map.Entry<Range<Token>,MerkleTree>>
iterator()
Get an iterator of all ranges and their MerkleTrees.void
logRowCountPerLeaf(org.slf4j.Logger logger)
Log the row count per leaf for all MerkleTrees.void
logRowSizePerLeaf(org.slf4j.Logger logger)
Log the row size per leaf for all MerkleTrees.void
maxsize(Range<Token> range, int maxsize)
IPartitioner
partitioner()
Get the partitioner in use.MerkleTrees.TreeRangeIterator
rangeIterator()
Get an iterator for all the iterator generated by the MerkleTrees.java.util.Collection<Range<Token>>
ranges()
Get the ranges that these merkle trees covers.void
release()
Dereference all merkle trees and release direct memory for all off-heap trees.long
rowCount()
long
size()
boolean
split(Token t)
Split the MerkleTree responsible for the given token.MerkleTrees
tryMoveOffHeap()
-
-
-
Field Detail
-
serializer
public static final MerkleTrees.MerkleTreesSerializer serializer
-
-
Constructor Detail
-
MerkleTrees
public MerkleTrees(IPartitioner partitioner)
Creates empty MerkleTrees object.- Parameters:
partitioner
- The partitioner to use
-
-
Method Detail
-
ranges
public java.util.Collection<Range<Token>> ranges()
Get the ranges that these merkle trees covers.- Returns:
-
partitioner
public IPartitioner partitioner()
Get the partitioner in use.- Returns:
-
addMerkleTrees
public void addMerkleTrees(int maxsize, java.util.Collection<Range<Token>> ranges)
Add merkle tree's with the defined maxsize and ranges.- Parameters:
maxsize
-ranges
-
-
addMerkleTree
public MerkleTree addMerkleTree(int maxsize, Range<Token> range)
Add a MerkleTree with the defined size and range.- Parameters:
maxsize
-range
-- Returns:
- The created merkle tree.
-
addMerkleTree
public MerkleTree addMerkleTree(int maxsize, byte hashdepth, Range<Token> range)
-
get
public MerkleTree.TreeRange get(Token t)
Get the MerkleTree.Range responsible for the given token.- Parameters:
t
-- Returns:
-
init
public void init()
Init all MerkleTree's with an even tree distribution.
-
release
public void release()
Dereference all merkle trees and release direct memory for all off-heap trees.
-
init
public void init(Range<Token> range)
Init a selected MerkleTree with an even tree distribution.- Parameters:
range
-
-
split
public boolean split(Token t)
Split the MerkleTree responsible for the given token.- Parameters:
t
-- Returns:
-
invalidate
public void invalidate(Token t)
Invalidate the MerkleTree responsible for the given token.- Parameters:
t
-
-
getMerkleTree
public MerkleTree getMerkleTree(Range<Token> range)
Get the MerkleTree responsible for the given token range.- Parameters:
range
-- Returns:
-
size
public long size()
-
rangeIterator
public MerkleTrees.TreeRangeIterator rangeIterator()
Get an iterator for all the iterator generated by the MerkleTrees.- Returns:
-
logRowCountPerLeaf
public void logRowCountPerLeaf(org.slf4j.Logger logger)
Log the row count per leaf for all MerkleTrees.- Parameters:
logger
-
-
logRowSizePerLeaf
public void logRowSizePerLeaf(org.slf4j.Logger logger)
Log the row size per leaf for all MerkleTrees.- Parameters:
logger
-
-
iterator
public java.util.Iterator<java.util.Map.Entry<Range<Token>,MerkleTree>> iterator()
Get an iterator of all ranges and their MerkleTrees.- Specified by:
iterator
in interfacejava.lang.Iterable<java.util.Map.Entry<Range<Token>,MerkleTree>>
-
rowCount
public long rowCount()
-
tryMoveOffHeap
public MerkleTrees tryMoveOffHeap() throws java.io.IOException
- Returns:
- a new
MerkleTrees
instance with all trees moved off heap. - Throws:
java.io.IOException
-
difference
public static java.util.List<Range<Token>> difference(MerkleTrees ltrees, MerkleTrees rtrees)
Get the differences between the two sets of MerkleTrees.- Parameters:
ltrees
-rtrees
-- Returns:
-
-