Class MerkleTrees

java.lang.Object
org.apache.cassandra.utils.MerkleTrees
All Implemented Interfaces:
Iterable<Map.Entry<Range<Token>,MerkleTree>>

public class MerkleTrees extends Object implements Iterable<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.
  • Field Details

  • Constructor Details

    • MerkleTrees

      public MerkleTrees(IPartitioner partitioner)
      Creates empty MerkleTrees object.
      Parameters:
      partitioner - The partitioner to use
  • Method Details

    • ranges

      public 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, 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 Iterator<Map.Entry<Range<Token>,MerkleTree>> iterator()
      Get an iterator of all ranges and their MerkleTrees.
      Specified by:
      iterator in interface Iterable<Map.Entry<Range<Token>,MerkleTree>>
    • rowCount

      public long rowCount()
    • tryMoveOffHeap

      public MerkleTrees tryMoveOffHeap() throws IOException
      Returns:
      a new MerkleTrees instance with all trees moved off heap.
      Throws:
      IOException
    • difference

      public static List<Range<Token>> difference(MerkleTrees ltrees, MerkleTrees rtrees)
      Get the differences between the two sets of MerkleTrees.
      Parameters:
      ltrees -
      rtrees -
      Returns: