コード例 #1
0
  /**
   * Update the list of members of this group. Members that disappear are lost, but members that
   * remain across the operation retain their state.
   *
   * @param urls
   */
  public synchronized void setMembers(String[] urls) {
    HashMap<String, RangeMember> newMembers = new HashMap<String, RangeMember>();

    for (int i = 0; i < urls.length; i++) {
      if (members.containsKey(urls[i])) {
        newMembers.put(urls[i], members.get(urls[i]));
      } else {
        RangeMember newMember = new RangeMember();
        newMember.setUrlBase(urls[i]);
        newMembers.put(urls[i], newMember);
      }
    }
    members = newMembers;
  }
コード例 #2
0
  protected synchronized RangeMember findBestMember() {
    RangeMember best = null;
    int lowestWeight = RangeMember.UNUSABLE_WEIGHT;
    Iterator<RangeMember> itr = members.values().iterator();
    while (itr.hasNext()) {
      RangeMember cur = itr.next();
      int curWeight = cur.getWeight();
      if (curWeight != RangeMember.UNUSABLE_WEIGHT) {

        if ((lowestWeight == RangeMember.UNUSABLE_WEIGHT) || (curWeight < lowestWeight)) {

          best = cur;
          lowestWeight = curWeight;
        }
      }
    }
    return best;
  }
コード例 #3
0
  /* (non-Javadoc)
   * @see org.archive.wayback.ResourceIndex#query(org.archive.wayback.core.WaybackRequest)
   */
  public SearchResults query(WaybackRequest wbRequest)
      throws ResourceIndexNotAvailableException, ResourceNotInArchiveException, BadQueryException,
          AccessControlException {
    while (true) {
      RangeMember best = findBestMember();
      if (best == null) {
        throw new ResourceIndexNotAvailableException("Unable to find active range for request.");
      }
      best.noteConnectionStart();
      SearchResults results;
      try {

        results = best.query(wbRequest);
        best.noteConnectionSuccess();
        return results;

      } catch (ResourceIndexNotAvailableException e) {

        best.noteConnectionFailure();

      } catch (ResourceNotInArchiveException e1) {

        // need to catch and rethrow so we do accounting on
        // activeConnections. ResourceNotInArchive is still a
        // "connection success".

        best.noteConnectionSuccess();
        throw e1;
      }
    }
  }
コード例 #4
0
 public void shutdown() throws IOException {
   for (RangeMember member : members.values()) {
     member.shutdown();
   }
 }