private void processCacheCollisions(long[] collisionMask, List<? extends CacheChunk> toDecompress, MemoryBuffer[] targetBuffers, List<MemoryBuffer> cacheBuffers) { if (collisionMask == null) return; assert collisionMask.length >= (toDecompress.size() >>> 6); // There are some elements that were cached in parallel, take care of them. long maskVal = -1; for (int i = 0; i < toDecompress.size(); ++i) { if ((i & 63) == 0) { maskVal = collisionMask[i >>> 6]; } if ((maskVal & 1) == 1) { // Cache has found an old buffer for the key and put it into array instead of our new one. CacheChunk replacedChunk = toDecompress.get(i); MemoryBuffer replacementBuffer = targetBuffers[i]; if (isTracingEnabled) { LOG.trace("Discarding data due to cache collision: " + replacedChunk.getBuffer() + " replaced with " + replacementBuffer); } assert replacedChunk.getBuffer() != replacementBuffer : i + " was not replaced in the results " + "even though mask is [" + Long.toBinaryString(maskVal) + "]"; replacedChunk.handleCacheCollision(cacheWrapper, replacementBuffer, cacheBuffers); } maskVal >>= 1; } }
private void processCacheCollisions(long[] collisionMask, List<? extends CacheChunk> toDecompress, MemoryBuffer[] targetBuffers, List<MemoryBuffer> cacheBuffers) { if (collisionMask == null) return; assert collisionMask.length >= (toDecompress.size() >>> 6); // There are some elements that were cached in parallel, take care of them. long maskVal = -1; for (int i = 0; i < toDecompress.size(); ++i) { if ((i & 63) == 0) { maskVal = collisionMask[i >>> 6]; } if ((maskVal & 1) == 1) { // Cache has found an old buffer for the key and put it into array instead of our new one. CacheChunk replacedChunk = toDecompress.get(i); MemoryBuffer replacementBuffer = targetBuffers[i]; if (isTracingEnabled) { LOG.trace("Discarding data due to cache collision: " + replacedChunk.getBuffer() + " replaced with " + replacementBuffer); } trace.logCacheCollision(replacedChunk, replacementBuffer); assert replacedChunk.getBuffer() != replacementBuffer : i + " was not replaced in the results " + "even though mask is [" + Long.toBinaryString(maskVal) + "]"; replacedChunk.handleCacheCollision(cacheWrapper, replacementBuffer, cacheBuffers); } maskVal >>= 1; } }