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; }