示例#1
0
 public Token getSuccessor(Token token) {
   List tokens = sortedTokens();
   int index = Collections.binarySearch(tokens, token);
   assert index >= 0
       : token + " not found in " + StringUtils.join(tokenToEndPointMap.keySet(), ", ");
   return (Token) ((index == (tokens.size() - 1)) ? tokens.get(0) : tokens.get(index + 1));
 }
 public static int firstTokenIndex(final ArrayList ring, Token start, boolean insertMin) {
   assert ring.size() > 0;
   // insert the minimum token (at index == -1) if we were asked to include it and it isn't a
   // member of the ring
   int i = Collections.binarySearch(ring, start);
   if (i < 0) {
     i = (i + 1) * (-1);
     if (i >= ring.size()) i = insertMin ? -1 : 0;
   }
   return i;
 }
示例#3
0
  /**
   * iterator over the Tokens in the given ring, starting with the token for the node owning start
   * (which does not have to be a Token in the ring)
   *
   * @param includeMin True if the minimum token should be returned in the ring even if it has no
   *     owner.
   */
  public static Iterator<Token> ringIterator(final List ring, Token start, boolean includeMin) {
    assert ring.size() > 0;
    // insert the minimum token (at index == -1) if we were asked to include it and it isn't a
    // member of the ring
    final boolean insertMin =
        (includeMin && !ring.get(0).equals(StorageService.getPartitioner().getMinimumToken()))
            ? true
            : false;

    int i = Collections.binarySearch(ring, start);
    if (i < 0) {
      i = (i + 1) * (-1);
      if (i >= ring.size()) i = insertMin ? -1 : 0;
    }

    final int startIndex = i;
    return new AbstractIterator<Token>() {
      int j = startIndex;

      protected Token computeNext() {
        if (j < -1) return endOfData();
        try {
          // return minimum for index == -1
          if (j == -1) return StorageService.getPartitioner().getMinimumToken();
          // return ring token for other indexes
          return (Token) ring.get(j);
        } finally {
          j++;
          if (j == ring.size()) j = insertMin ? -1 : 0;
          if (j == startIndex)
            // end iteration
            j = -2;
        }
      }
    };
  }