Class 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.
    • 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()
      • maxsize

        public void maxsize​(Range<Token> range,
                            int maxsize)
      • 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 -
      • hash

        public byte[] hash​(Range<Token> range)
      • 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 interface java.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: