public long countQueuedRequests() { return chkFetchSchedulerBulk.countQueuedRequests() + sskFetchSchedulerBulk.countQueuedRequests() + chkPutSchedulerBulk.countQueuedRequests() + sskPutSchedulerBulk.countQueuedRequests() + chkFetchSchedulerRT.countQueuedRequests() + sskFetchSchedulerRT.countQueuedRequests() + chkPutSchedulerRT.countQueuedRequests() + sskPutSchedulerRT.countQueuedRequests(); }
public void dequeueOfferedKey(Key key) { ClientRequestScheduler sched = requestStarters.getScheduler(key instanceof NodeSSK, false, false); sched.dequeueOfferedKey(key); sched = requestStarters.getScheduler(key instanceof NodeSSK, false, true); sched.dequeueOfferedKey(key); }
@Override public String get(){ if(csBulk != null) return csBulk.getChoosenPriorityScheduler(); else return ClientRequestScheduler.PRIORITY_SOFT; }
@Override public synchronized long getWakeupTime(ClientContext context, long now) { if(isEmpty()) return -1; if(scheduler.fetchingKeys().hasInsert(new MySendableRequestItem(this))) return Long.MAX_VALUE; return 0; }
try { if(count) { long queued = core.requestStarters.chkFetchSchedulerBulk.countPersistentWaitingKeys() + core.requestStarters.chkFetchSchedulerRT.countPersistentWaitingKeys(); Logger.minor(this, "Total waiting CHKs: "+queued); long reallyQueued = core.requestStarters.chkFetchSchedulerBulk.countQueuedRequests() + core.requestStarters.chkFetchSchedulerRT.countQueuedRequests(); Logger.minor(this, "Total queued CHK requests (including transient): "+reallyQueued); PageNode page = pageMaker.getPageNode(l10n("title"), ctx);
if(logMINOR) Logger.minor(this, "Found key"); if(key instanceof NodeSSK) sched.tripPendingKey(block); else // CHK sched.tripPendingKey(block); } else { anyValid = true; sched.finishRegister(new SendableGet[] { getter }, false, anyValid);
@Override public boolean run(ClientContext context) { try { scheduler.finishRegister(new SendableGet[] { get }, true, valid); } catch (Throwable t) { Logger.error(this, "Failed to register "+get+": "+t, t); try { get.onFailure(new LowLevelGetException(LowLevelGetException.INTERNAL_ERROR, "Internal error: "+t, t), null, context); } catch (Throwable t1) { Logger.error(this, "Failed to fail: "+t, t); } } return false; }
@Override public long checkRecentlyFailed(Key key, boolean realTime) { Node node = sched.getNode(); return node.clientCore.checkRecentlyFailed(key, realTime); }
@Override public KeySalter getSalter() { return context.getChkFetchScheduler(realTimeFlag).getGlobalKeySalter(persistent); }
/** LOCKING: Caller should hold as few locks as possible */ public void removeFetchingKey(final Key key) { WeakReference<BaseSendableGet>[] transientWaiting; if(logMINOR) Logger.minor(this, "Removing from keysFetching: "+key); if(key != null) { synchronized(keysFetching) { keysFetching.remove(key); transientWaiting = this.transientRequestsWaitingForKeysFetching.remove(key); } if(transientWaiting != null) { if(transientWaiting != null) { for(WeakReference<BaseSendableGet> ref : transientWaiting) { BaseSendableGet get = ref.get(); if(get == null) continue; get.clearWakeupTime(sched.getContext()); } } } } }
chkRequestStarterBulk = new RequestStarter(core, chkRequestThrottleBulk, "CHK Request starter ("+portNumber+ ')', stats.localChkFetchBytesSentAverage, stats.localChkFetchBytesReceivedAverage, false, false, false); chkRequestStarterRT = new RequestStarter(core, chkRequestThrottleRT, "CHK Request starter ("+portNumber+ ')', stats.localChkFetchBytesSentAverage, stats.localChkFetchBytesReceivedAverage, false, false, true); chkFetchSchedulerBulk = new ClientRequestScheduler(false, false, false, random, chkRequestStarterBulk, node, core, "CHKrequester", ctx); chkFetchSchedulerRT = new ClientRequestScheduler(false, false, true, random, chkRequestStarterRT, node, core, "CHKrequester", ctx); chkRequestStarterBulk.setScheduler(chkFetchSchedulerBulk); chkRequestStarterRT.setScheduler(chkFetchSchedulerRT); chkInsertStarterBulk = new RequestStarter(core, chkInsertThrottleBulk, "CHK Insert starter ("+portNumber+ ')', stats.localChkInsertBytesSentAverage, stats.localChkInsertBytesReceivedAverage, true, false, false); chkInsertStarterRT = new RequestStarter(core, chkInsertThrottleRT, "CHK Insert starter ("+portNumber+ ')', stats.localChkInsertBytesSentAverage, stats.localChkInsertBytesReceivedAverage, true, false, true); chkPutSchedulerBulk = new ClientRequestScheduler(true, false, false, random, chkInsertStarterBulk, node, core, "CHKinserter", ctx); chkPutSchedulerRT = new ClientRequestScheduler(true, false, true, random, chkInsertStarterRT, node, core, "CHKinserter", ctx); chkInsertStarterBulk.setScheduler(chkPutSchedulerBulk); chkInsertStarterRT.setScheduler(chkPutSchedulerRT); sskRequestStarterBulk = new RequestStarter(core, sskRequestThrottleBulk, "SSK Request starter ("+portNumber+ ')', stats.localSskFetchBytesSentAverage, stats.localSskFetchBytesReceivedAverage, false, true, false); sskRequestStarterRT = new RequestStarter(core, sskRequestThrottleRT, "SSK Request starter ("+portNumber+ ')', stats.localSskFetchBytesSentAverage, stats.localSskFetchBytesReceivedAverage, false, true, true); sskFetchSchedulerBulk = new ClientRequestScheduler(false, true, false, random, sskRequestStarterBulk, node, core, "SSKrequester", ctx); sskFetchSchedulerRT = new ClientRequestScheduler(false, true, true, random, sskRequestStarterRT, node, core, "SSKrequester", ctx); sskRequestStarterBulk.setScheduler(sskFetchSchedulerBulk); sskRequestStarterRT.setScheduler(sskFetchSchedulerRT); sskInsertStarterBulk = new RequestStarter(core, sskInsertThrottleBulk, "SSK Insert starter ("+portNumber+ ')', stats.localSskInsertBytesSentAverage, stats.localSskFetchBytesReceivedAverage, true, true, false); sskInsertStarterRT = new RequestStarter(core, sskInsertThrottleRT, "SSK Insert starter ("+portNumber+ ')', stats.localSskInsertBytesSentAverage, stats.localSskFetchBytesReceivedAverage, true, true, true); sskPutSchedulerBulk = new ClientRequestScheduler(true, true, false, random, sskInsertStarterBulk, node, core, "SSKinserter", ctx); sskPutSchedulerRT = new ClientRequestScheduler(true, true, true, random, sskInsertStarterRT, node, core, "SSKinserter", ctx); sskInsertStarterBulk.setScheduler(sskPutSchedulerBulk); sskInsertStarterRT.setScheduler(sskPutSchedulerRT);
@Override public synchronized long getWakeupTime(ClientContext context, long now) { if(cancelled || finished) return -1; long wakeTime = cooldownWakeupTime; if(wakeTime <= now) cooldownWakeupTime = wakeTime = 0; KeysFetchingLocally fetching = getScheduler(context).fetchingKeys(); if(wakeTime <= 0 && fetching.hasKey(getNodeKey(null), this)) { wakeTime = Long.MAX_VALUE; // tracker.cooldownWakeupTime is only set for a real cooldown period, NOT when we go into hierarchical cooldown because the request is already running. } if(wakeTime == 0) return 0; return wakeTime; }
anyValid = true; finishRegister(getters, false, anyValid);
@Override public long getWakeupTime(ClientContext context, long now) { KeysFetchingLocally keysFetching = getScheduler(context).fetchingKeys(); synchronized(this) { if(finished) return -1; BlockItemKey key = new BlockItemKey(this, hashCode()); if(keysFetching.hasInsert(key)) return Long.MAX_VALUE; return 0; } }
context.ticker, context.memoryLimitedJobRunner, checker, persistent, fileCompleteViaTruncation, context.getFileRandomAccessBufferFactory(persistent), context.getChkFetchScheduler(realTimeFlag).fetchingKeys()); } catch (InsufficientDiskSpaceException e) { throw new FetchException(FetchExceptionMode.NOT_ENOUGH_DISK_SPACE);
context.getChkInsertScheduler(realTime).fetchingKeys(), topDontCompress, topRequiredBlocks, topTotalBlocks, origDataSize, origCompressedDataSize); int mustSucceed = storage.topRequiredBlocks - topRequiredBlocks;
this.storage = new SplitFileFetcherStorage(raf, realTimeFlag, this, blockFetchContext, context.random, context.jobRunner, context.getChkFetchScheduler(realTimeFlag).fetchingKeys(), context.ticker, context.memoryLimitedJobRunner, new CRCChecksumChecker(), context.jobRunner.newSalt(), salter, resumed,
this.storage = new SplitFileInserterStorage(raf, originalData, this, context.fastWeakRandom, context.memoryLimitedJobRunner, context.getJobRunner(true), context.ticker, context.getChkInsertScheduler(realTime).fetchingKeys(), context.persistentFG, context.persistentFileTracker, context.getPersistentMasterSecret()); storage.onResume(context);