/** * Register a group of requests (not inserts): a GotKeyListener and/or one or more SendableGet's. * * @param listener Listens for specific keys. Can be null if the listener is already registered * i.e. on retrying. * @param getters The actual requests to register to the request sender queue. * @param persistent True if the request is persistent. * @param onDatabaseThread True if we are running on the database thread. NOTE: * delayedStoreCheck/probablyNotInStore is unnecessary because we only register the listener * once. * @throws FetchException */ public void register( final HasKeyListener hasListener, final SendableGet[] getters, final boolean persistent, ObjectContainer container, final BlockSet blocks, final boolean noCheckStore) throws KeyListenerConstructionException { if (logMINOR) Logger.minor(this, "register(" + persistent + "," + hasListener + "," + getters); if (isInsertScheduler) { IllegalStateException e = new IllegalStateException("finishRegister on an insert scheduler"); throw e; } if (persistent) { innerRegister(hasListener, getters, blocks, noCheckStore, container); } else { final KeyListener listener; if (hasListener != null) { listener = hasListener.makeKeyListener(container, clientContext, false); if (listener != null) schedTransient.addPendingKeys(listener); else Logger.normal(this, "No KeyListener for " + hasListener); } else listener = null; if (getters != null && !noCheckStore) { for (SendableGet getter : getters) datastoreChecker.queueTransientRequest(getter, blocks); } else { boolean anyValid = false; for (int i = 0; i < getters.length; i++) { if (!(getters[i].isCancelled(null) || getters[i].getCooldownTime(container, clientContext, System.currentTimeMillis()) != 0)) anyValid = true; } finishRegister(getters, false, container, anyValid, null); } } }