@Override public boolean run(ClientContext context) { long now = System.currentTimeMillis(); long wakeupTime; synchronized(cooldownLock) { if(cooldownTime < now) return false; long oldCooldownTime = overallCooldownWakeupTime; if(overallCooldownWakeupTime > now) return false; // Wait for it to wake up. wakeupTime = Long.MAX_VALUE; for(SplitFileFetcherSegmentStorage segment : segments) { long segmentTime = segment.getOverallCooldownTime(); if(segmentTime < now) return false; wakeupTime = Math.min(segmentTime, wakeupTime); } overallCooldownWakeupTime = wakeupTime; if(overallCooldownWakeupTime < oldCooldownTime) return false; } fetcher.reduceCooldown(wakeupTime); return false; }
assertEquals(storage.chooseRandomKey(), -1); assertEquals(storage.getOverallCooldownTime(), Long.MAX_VALUE); assertEquals(storage.getOverallCooldownTime(), 0); assertTrue(storage.getOverallCooldownTime() != Long.MAX_VALUE || storage.hasFailed());
innerChooseKeyTest(dataBlocks, checkBlocks, storage.segments[0], tried, test, true); assertTrue(storage.segments[0].getOverallCooldownTime() > now); assertFalse(storage.segments[0].getOverallCooldownTime() == Long.MAX_VALUE);