[infinispan-commits] Infinispan SVN: r2495 - trunk/lucene-directory/src/main/java/org/infinispan/lucene.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Mon Oct 4 19:48:00 EDT 2010


Author: sannegrinovero
Date: 2010-10-04 19:48:00 -0400 (Mon, 04 Oct 2010)
New Revision: 2495

Modified:
   trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanIndexOutput.java
Log:
[ISPN-692] (Avoid unnecessary load of index segment chunks during first creation) - merged from 4.2

Modified: trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanIndexOutput.java
===================================================================
--- trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanIndexOutput.java	2010-10-04 23:45:18 UTC (rev 2494)
+++ trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanIndexOutput.java	2010-10-04 23:48:00 UTC (rev 2495)
@@ -73,7 +73,10 @@
       }
    }
    
-   private static byte[] getChunkById(AdvancedCache cache, FileCacheKey fileKey, int chunkNumber, int bufferSize) {
+   private static byte[] getChunkById(AdvancedCache cache, FileCacheKey fileKey, int chunkNumber, int bufferSize, FileMetadata file) {
+      if (file.getNumberOfChunks() <= chunkNumber) {
+         return new byte[bufferSize];
+      }
       ChunkCacheKey key = new ChunkCacheKey(fileKey.getIndexName(), fileKey.getFileName(), chunkNumber);
       byte[] readBuffer = (byte[]) cache.withFlags(Flag.SKIP_LOCKING).get(key);
       if (readBuffer==null) {
@@ -101,7 +104,7 @@
       storeCurrentBuffer();// save data first
       currentChunkNumber++;
       // check if we have to create new chunk, or get already existing in cache for modification
-      buffer = getChunkById(chunksCache, fileKey, currentChunkNumber, bufferSize);
+      buffer = getChunkById(chunksCache, fileKey, currentChunkNumber, bufferSize, file);
       positionInBuffer = 0;
    }
 
@@ -208,7 +211,7 @@
       }
       if (requestedChunkNumber != currentChunkNumber) {
          storeCurrentBuffer();
-         buffer = getChunkById(chunksCache, fileKey, requestedChunkNumber, bufferSize);
+         buffer = getChunkById(chunksCache, fileKey, requestedChunkNumber, bufferSize, file);
          currentChunkNumber = requestedChunkNumber;
       }
       positionInBuffer = getPositionInBuffer(pos, bufferSize);



More information about the infinispan-commits mailing list