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 classMerkleTrees.MerkleTreesSerializerclassMerkleTrees.TreeRangeIterator
-
Field Summary
Fields Modifier and Type Field Description static MerkleTrees.MerkleTreesSerializerserializer
-
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 MerkleTreeaddMerkleTree(int maxsize, byte hashdepth, Range<Token> range)MerkleTreeaddMerkleTree(int maxsize, Range<Token> range)Add a MerkleTree with the defined size and range.voidaddMerkleTrees(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.TreeRangeget(Token t)Get the MerkleTree.Range responsible for the given token.MerkleTreegetMerkleTree(Range<Token> range)Get the MerkleTree responsible for the given token range.byte[]hash(Range<Token> range)voidinit()Init all MerkleTree's with an even tree distribution.voidinit(Range<Token> range)Init a selected MerkleTree with an even tree distribution.voidinvalidate(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.voidlogRowCountPerLeaf(org.slf4j.Logger logger)Log the row count per leaf for all MerkleTrees.voidlogRowSizePerLeaf(org.slf4j.Logger logger)Log the row size per leaf for all MerkleTrees.voidmaxsize(Range<Token> range, int maxsize)IPartitionerpartitioner()Get the partitioner in use.MerkleTrees.TreeRangeIteratorrangeIterator()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.voidrelease()Dereference all merkle trees and release direct memory for all off-heap trees.longrowCount()longsize()booleansplit(Token t)Split the MerkleTree responsible for the given token.MerkleTreestryMoveOffHeap()
-
-
-
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:
iteratorin 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
MerkleTreesinstance 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:
-
-