/**
  * Delete the given CrawlURI from persistent store. Requires the key under which it was stored be
  * available.
  *
  * @param item
  * @throws DatabaseException
  */
 public void delete(CrawlURI item) throws DatabaseException {
   OperationStatus status;
   DatabaseEntry de = (DatabaseEntry) item.getHolderKey();
   status = pendingUrisDB.delete(null, de);
   if (status != OperationStatus.SUCCESS) {
     LOGGER.severe(
         "expected item not present: "
             + item
             + "("
             + (new BigInteger(((DatabaseEntry) item.getHolderKey()).getData())).toString(16)
             + ")");
   }
 }
  /**
   * Put the given CrawlURI in at the appropriate place.
   *
   * @param curi
   * @throws DatabaseException
   */
  public void put(CrawlURI curi, boolean overwriteIfPresent) throws DatabaseException {
    DatabaseEntry insertKey = (DatabaseEntry) curi.getHolderKey();
    if (insertKey == null) {
      insertKey = calculateInsertKey(curi);
      curi.setHolderKey(insertKey);
    }
    DatabaseEntry value = new DatabaseEntry();
    crawlUriBinding.objectToEntry(curi, value);
    // Output tally on avg. size if level is FINE or greater.
    if (LOGGER.isLoggable(Level.FINE)) {
      tallyAverageEntrySize(curi, value);
    }
    OperationStatus status;
    if (overwriteIfPresent) {
      status = pendingUrisDB.put(null, insertKey, value);
    } else {
      status = pendingUrisDB.putNoOverwrite(null, insertKey, value);
    }

    if (status != OperationStatus.SUCCESS) {
      LOGGER.log(
          Level.SEVERE, "URI enqueueing failed; " + status + " " + curi, new RuntimeException());
    }
  }