@Override public ChunkCacheKey readObject(final ObjectInput input) throws IOException { final String indexName = input.readUTF(); final String fileName = input.readUTF(); final int chunkId = UnsignedNumeric.readUnsignedInt(input); final int bufferSize = UnsignedNumeric.readUnsignedInt(input); return new ChunkCacheKey(indexName, fileName, chunkId, bufferSize); }
/** * ContainsKey implementation for chunk elements */ private Boolean containsKeyIntern(final ChunkCacheKey chunkCacheKey) throws IOException { try { final long length = directory.fileLength(chunkCacheKey.getFileName()); final int bufferSize = chunkCacheKey.getBufferSize(); final int chunkId = chunkCacheKey.getChunkId(); return Boolean.valueOf((chunkId * bufferSize) < (length + bufferSize)); } catch (FileNotFoundException nfne) { //Ok, we might check for file existence first.. but it's reasonable to be //optimistic. return Boolean.FALSE; } }
public ChunkCacheKey(final String indexName, final String fileName, final int chunkId, final int bufferSize, final int affinitySegmentId) { if (fileName == null) throw new IllegalArgumentException("filename must not be null"); this.indexName = indexName; this.fileName = fileName; this.chunkId = chunkId; this.bufferSize = bufferSize; this.affinitySegmentId = affinitySegmentId; this.hashCode = generatedHashCode(); }
@Test public void testChunkCacheKeyComparison() { AssertJUnit.assertFalse("The object should not be equals to null.", new ChunkCacheKey("index-A", "fileName", 0, 1024, -1).equals(null)); AssertJUnit.assertFalse("The ChunkCacheKey objects should not be equal due to different file names.", new ChunkCacheKey("index-A", "fileName", 0, 1024, -1).equals(new ChunkCacheKey("index-A", "fileName1", 0, 1024, -1))); AssertJUnit.assertEquals("The ChunkCacheKey objects should be equal.", new ChunkCacheKey("index-A", "fileName", 0, 1024, -1), new ChunkCacheKey("index-A", "fileName", 0, 1024, -1)); }
if (key instanceof ChunkCacheKey) { ChunkCacheKey existingChunkKey = (ChunkCacheKey) key; String filename = existingChunkKey.getFileName(); assertEquals(existingChunkKey.getIndexName(), indexName);
private void setBufferToCurrentChunk() throws IOException { ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), filename, currentLoadedChunk, chunkSize, affinitySegmentId); buffer = (byte[]) chunksCache.get(key); if (buffer == null) { throw new IOException("Read past EOF: Chunk value could not be found for key " + key); } currentBufferSize = buffer.length; }
/** * ContainsKey implementation for chunk elements */ private Boolean containsKeyIntern(final ChunkCacheKey chunkCacheKey) throws IOException { try { final long length = directory.fileLength(chunkCacheKey.getFileName()); final int bufferSize = chunkCacheKey.getBufferSize(); final int chunkId = chunkCacheKey.getChunkId(); return Boolean.valueOf((chunkId * bufferSize) < (length + bufferSize)); } catch (NoSuchFileException nfne) { //Ok, we might check for file existence first.. but it's reasonable to be //optimistic. return Boolean.FALSE; } }
public ChunkCacheKey(final String indexName, final String fileName, final int chunkId, final int bufferSize) { if (fileName == null) throw new IllegalArgumentException("filename must not be null"); this.indexName = indexName; this.fileName = fileName; this.chunkId = chunkId; this.bufferSize = bufferSize; this.hashCode = generatedHashCode(); }
private void setBufferToCurrentChunk() throws IOException { ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), filename, currentLoadedChunk, chunkSize); buffer = (byte[]) chunksCache.get(key); if (buffer == null) { throw new IOException("Read past EOF: Chunk value could not be found for key " + key); } currentBufferSize = buffer.length; }
/** * ContainsKey implementation for chunk elements */ private Boolean containsKeyIntern(final ChunkCacheKey chunkCacheKey) throws IOException { try { final long length = directory.fileLength(chunkCacheKey.getFileName()); final int bufferSize = chunkCacheKey.getBufferSize(); final int chunkId = chunkCacheKey.getChunkId(); return Boolean.valueOf((chunkId * bufferSize) < (length + bufferSize)); } catch (NoSuchFileException nfne) { //Ok, we might check for file existence first.. but it's reasonable to be //optimistic. return Boolean.FALSE; } }
public ChunkCacheKey(final String indexName, final String fileName, final int chunkId, final int bufferSize, final int affinitySegmentId) { if (fileName == null) throw new IllegalArgumentException("filename must not be null"); this.indexName = indexName; this.fileName = fileName; this.chunkId = chunkId; this.bufferSize = bufferSize; this.affinitySegmentId = affinitySegmentId; this.hashCode = generatedHashCode(); }
private void setBufferToCurrentChunk() throws IOException { ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), filename, currentLoadedChunk, chunkSize, affinitySegmentId); buffer = (byte[]) chunksCache.get(key); if (buffer == null) { throw new IOException("Read past EOF: Chunk value could not be found for key " + key); } currentBufferSize = buffer.length; }
/** * Loads the actual byte array from a segment, in the range of a specific chunkSize. * Not that while the chunkSize is specified in this case, it's likely derived * from the invocations of other loading methods. */ private byte[] loadIntern(final ChunkCacheKey key) throws IOException { final String fileName = key.getFileName(); final long chunkId = key.getChunkId(); //needs to be long to upcast following operations int bufferSize = key.getBufferSize(); final long seekTo = chunkId * bufferSize; final byte[] buffer; final IndexInput input = directory.openInput(fileName); final long length = input.length(); try { if (seekTo != 0) { input.seek(seekTo); } bufferSize = (int) Math.min(length - seekTo, (long)bufferSize); buffer = new byte[bufferSize]; input.readBytes(buffer, 0, bufferSize); } finally { input.close(); } return buffer; }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "filename must not be null") public void testChunkCacheKeyInitWithNllFileName() { new ChunkCacheKey("index-A", null, 0, 1024, -1); }
/** * Loads the actual byte array from a segment, in the range of a specific chunkSize. * Not that while the chunkSize is specified in this case, it's likely derived * from the invocations of other loading methods. */ private byte[] loadIntern(final ChunkCacheKey key) throws IOException { final String fileName = key.getFileName(); final long chunkId = key.getChunkId(); //needs to be long to upcast following operations int bufferSize = key.getBufferSize(); final long seekTo = chunkId * bufferSize; final byte[] buffer; final IndexInput input = directory.openInput(fileName, IOContext.READ); final long length = input.length(); try { if (seekTo != 0) { input.seek(seekTo); } bufferSize = (int) Math.min(length - seekTo, (long)bufferSize); buffer = new byte[bufferSize]; input.readBytes(buffer, 0, bufferSize); } finally { input.close(); } return buffer; }
private void setBufferToCurrentChunkIfPossible() { ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), filename, currentLoadedChunk, chunkSize); buffer = (byte[]) chunksCache.get(key); if (buffer == null) { currentLoadedChunk--; bufferPosition = chunkSize; } else { currentBufferSize = buffer.length; } }
/** * Loads the actual byte array from a segment, in the range of a specific chunkSize. * Not that while the chunkSize is specified in this case, it's likely derived * from the invocations of other loading methods. */ private byte[] loadIntern(final ChunkCacheKey key) throws IOException { final String fileName = key.getFileName(); final long chunkId = key.getChunkId(); //needs to be long to upcast following operations int bufferSize = key.getBufferSize(); final long seekTo = chunkId * bufferSize; final byte[] buffer; final IndexInput input = directory.openInput(fileName, IOContext.READ); final long length = input.length(); try { if (seekTo != 0) { input.seek(seekTo); } bufferSize = (int) Math.min(length - seekTo, (long)bufferSize); buffer = new byte[bufferSize]; input.readBytes(buffer, 0, bufferSize); } finally { input.close(); } return buffer; }
@Override public ChunkCacheKey readObject(final ObjectInput input) throws IOException { final String indexName = input.readUTF(); final String fileName = input.readUTF(); final int chunkId = UnsignedNumeric.readUnsignedInt(input); final int bufferSize = UnsignedNumeric.readUnsignedInt(input); final int affinitySegmentId = UnsignedNumeric.readUnsignedInt(input); return new ChunkCacheKey(indexName, fileName, chunkId, bufferSize, affinitySegmentId); }
@Override public ChunkCacheKey readObject(final ObjectInput input) throws IOException { final String indexName = input.readUTF(); final String fileName = input.readUTF(); final int chunkId = UnsignedNumeric.readUnsignedInt(input); final int bufferSize = UnsignedNumeric.readUnsignedInt(input); final int affinitySegmentId = UnsignedNumeric.readUnsignedInt(input); return new ChunkCacheKey(indexName, fileName, chunkId, bufferSize, affinitySegmentId); }
private void setBufferToCurrentChunkIfPossible() { ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), filename, currentLoadedChunk, chunkSize, affinitySegmentId); buffer = (byte[]) chunksCache.get(key); if (buffer == null) { currentLoadedChunk--; bufferPosition = chunkSize; } else { currentBufferSize = buffer.length; } }