@Test(dataProvider = "caches") @CacheSpec(compute = Compute.SYNC, implementation = Implementation.Caffeine, population = Population.EMPTY, maximumSize = Maximum.FULL) public void exceedsMaximumBufferSize_onWrite(Cache<Integer, Integer> cache, CacheContext context) { BoundedLocalCache<Integer, Integer> localCache = asBoundedLocalCache(cache); boolean[] ran = new boolean[1]; localCache.afterWrite(() -> ran[0] = true); assertThat(ran[0], is(true)); assertThat(localCache.writeBuffer().size(), is(0)); }
@Test(dataProvider = "caches") @CacheSpec(compute = Compute.SYNC, implementation = Implementation.Caffeine, population = Population.FULL, maximumSize = Maximum.FULL) public void afterWrite_drainFullWriteBuffer(Cache<Integer, Integer> cache, CacheContext context) { BoundedLocalCache<Integer, Integer> localCache = asBoundedLocalCache(cache); localCache.drainStatus = PROCESSING_TO_IDLE; int[] processed = { 0 }; Runnable pendingTask = () -> processed[0]++; int[] expectedCount = { 0 }; while (localCache.writeBuffer().offer(pendingTask)) { expectedCount[0]++; } int[] triggered = { 0 }; Runnable triggerTask = () -> triggered[0] = 1 + expectedCount[0]; localCache.afterWrite(triggerTask); assertThat(processed[0], is(expectedCount[0])); assertThat(triggered[0], is(expectedCount[0] + 1)); }
notifyRemoval(castKey, oldValue, cause); afterWrite(new RemovalTask(node)); return (cause == RemovalCause.EXPLICIT) ? oldValue : null;
}); if (prior == node) { afterWrite(new AddTask(node, newWeight)); return null; prior = data.putIfAbsent(node.getKeyReference(), node); if (prior == null) { afterWrite(new AddTask(node, newWeight)); return null; afterWrite(new UpdateTask(prior, weightedDifference)); } else if (!onlyIfAbsent && expiresAfterWrite() && withinTolerance) { afterWrite(new UpdateTask(prior, weightedDifference)); } else { if (mayUpdate) {
notifyRemoval(oldKey[0], oldValue[0], cause[0]); afterWrite(new RemovalTask(removed[0])); return (cause[0] == RemovalCause.EXPLICIT);
afterWrite(new UpdateTask(node, weightedDifference)); } else { afterRead(node, now[0], /* recordHit */ false);
afterWrite(new RemovalTask(node[0])); if (hasRemovalListener()) { notifyRemoval(castKey, oldValue[0], cause[0]);
afterWrite(new RemovalTask(removed[0])); afterWrite(new AddTask(node, weight[1])); } else { int weightedDifference = (weight[1] - weight[0]); afterWrite(new UpdateTask(node, weightedDifference));
afterWrite(new UpdateTask(node, weightedDifference)); } else { afterRead(node, now[0], /* recordHit */ false);
afterWrite(new RemovalTask(removed[0])); } else if (node == null) { afterWrite(new AddTask(node, weight[1])); } else { int weightedDifference = weight[1] - weight[0]; if (expiresAfterWrite() || (weightedDifference != 0)) { afterWrite(new UpdateTask(node, weightedDifference)); } else { if (cause[0] == null) {
notifyRemoval(castKey, oldValue, cause); afterWrite(new RemovalTask(node)); return (cause == RemovalCause.EXPLICIT) ? oldValue : null;
afterWrite(new RemovalTask(node[0])); if (hasRemovalListener()) { notifyRemoval(castKey, oldValue[0], cause[0]);
}); if (prior == node) { afterWrite(new AddTask(node, newWeight)); return null; prior = data.putIfAbsent(node.getKeyReference(), node); if (prior == null) { afterWrite(new AddTask(node, newWeight)); return null; afterWrite(new UpdateTask(prior, weightedDifference)); } else if (!onlyIfAbsent && expiresAfterWrite() && withinTolerance) { afterWrite(new UpdateTask(prior, weightedDifference)); } else { if (mayUpdate) {
notifyRemoval(oldKey[0], oldValue[0], cause[0]); afterWrite(new RemovalTask(removed[0])); return (cause[0] == RemovalCause.EXPLICIT);
afterWrite(new UpdateTask(node, weightedDifference)); } else { afterRead(node, now[0], /* recordHit */ false);
afterWrite(new UpdateTask(node, weightedDifference)); } else { afterRead(node, now[0], /* recordHit */ false);
afterWrite(new RemovalTask(removed[0])); afterWrite(new AddTask(node, weight[1])); } else { int weightedDifference = (weight[1] - weight[0]); afterWrite(new UpdateTask(node, weightedDifference));
afterWrite(new RemovalTask(removed[0])); } else if (node == null) { afterWrite(new AddTask(node, weight[1])); } else { int weightedDifference = weight[1] - weight[0]; if (expiresAfterWrite() || (weightedDifference != 0)) { afterWrite(new UpdateTask(node, weightedDifference)); } else { if (cause[0] == null) {