Пример #1
0
  protected CrawlURI peekItem(final WorkQueueFrontier frontier) throws IOException {
    final BdbMultipleWorkQueues queues = ((BdbFrontier) frontier).getWorkQueues();
    DatabaseEntry key = new DatabaseEntry(origin);
    CrawlURI curi = null;
    int tries = 1;
    while (true) {
      try {
        curi = queues.get(key);
      } catch (DatabaseException e) {
        LOGGER.log(Level.SEVERE, "peekItem failure; retrying", e);
      }

      // ensure CrawlURI, if any,  came from acceptable range:
      if (!ArchiveUtils.startsWith(key.getData(), origin)) {
        LOGGER.severe(
            "inconsistency: "
                + classKey
                + "("
                + getPrefixClassKey(origin)
                + ") with "
                + getCount()
                + " items gave "
                + curi
                + "("
                + getPrefixClassKey(key.getData()));
        // clear curi to allow retry
        curi = null;
        // reset key to original origin for retry
        key.setData(origin);
      }

      if (curi != null) {
        // success
        break;
      }

      if (tries > 3) {
        LOGGER.severe("no item where expected in queue " + classKey);
        break;
      }
      tries++;
      LOGGER.severe(
          "Trying get #"
              + Integer.toString(tries)
              + " in queue "
              + classKey
              + " with "
              + getCount()
              + " items using key "
              + getPrefixClassKey(key.getData()));
    }

    return curi;
  }