[infinispan-commits] Infinispan SVN: r1118 - in trunk/lucene-directory/src: test/java/org/infinispan/lucene and 1 other directory.

infinispan-commits at lists.jboss.org infinispan-commits at lists.jboss.org
Mon Nov 9 13:38:03 EST 2009


Author: sannegrinovero
Date: 2009-11-09 13:38:03 -0500 (Mon, 09 Nov 2009)
New Revision: 1118

Removed:
   trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanCacheEntryListener.java
   trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanCacheEntryListenerTest.java
Modified:
   trunk/lucene-directory/src/main/java/org/infinispan/lucene/FileListCacheKey.java
   trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanDirectory.java
   trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryIOTest.java
   trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryStressTest.java
Log:
[ISPN-253](Don't clear the Lucene Directory at startup) and [ISPN-254](Avoid using a Cache Listener for local-only event processing of Index updates)

Modified: trunk/lucene-directory/src/main/java/org/infinispan/lucene/FileListCacheKey.java
===================================================================
--- trunk/lucene-directory/src/main/java/org/infinispan/lucene/FileListCacheKey.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/main/java/org/infinispan/lucene/FileListCacheKey.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -83,7 +83,7 @@
    
    @Override
    public String toString() {
-      return "FileListCacheKey{indexName='" + indexName + '}';
+      return "FileListCacheKey{indexName='" + indexName + "'}";
    }
    
 }

Deleted: trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanCacheEntryListener.java
===================================================================
--- trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanCacheEntryListener.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanCacheEntryListener.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -1,78 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.lucene;
-
-import java.util.Map;
-
-import org.infinispan.Cache;
-import org.infinispan.notifications.Listener;
-import org.infinispan.notifications.cachelistener.annotation.CacheEntryCreated;
-import org.infinispan.notifications.cachelistener.annotation.CacheEntryRemoved;
-import org.infinispan.notifications.cachelistener.event.CacheEntryEvent;
-import org.infinispan.notifications.cachelistener.event.Event;
-
-/**
- * Infinispan cache listener
- * 
- * @since 4.0
- * @author Lukasz Moren
- */
- at Listener
-public class InfinispanCacheEntryListener {
-
-   private final String indexName;
-
-   public InfinispanCacheEntryListener(String indexName) {
-      this.indexName = indexName;
-   }
-
-   /**
-    * Updates current Lucene file list in a cache - when cache entry is created or removed
-    * 
-    * @param event Infinispan event
-    */
-   @SuppressWarnings( { "unchecked" })
-   @CacheEntryCreated
-   @CacheEntryRemoved
-   public void cacheEntryCreatedListener(CacheEntryEvent event) {
-      Object ob = event.getKey();
-      // process only local events
-      if (ob instanceof FileCacheKey && event.isOriginLocal()) {
-         FileCacheKey key = (FileCacheKey) ob;
-
-         if (key.getIndexName().equals(indexName) && !key.isLockKey()) {
-            FileListCacheKey fileListKey = new FileListCacheKey(key.getIndexName());
-            Cache<CacheKey, Object> cache = event.getCache();
-            Map<String, String> fileList = (Map<String, String>) cache.get(fileListKey);
-
-            if (event.getType().equals(Event.Type.CACHE_ENTRY_CREATED)) {
-               fileList.put(key.getFileName(), key.getFileName());
-            } else if (event.getType().equals(Event.Type.CACHE_ENTRY_REMOVED)) {
-               fileList.remove(key.getFileName());
-            }
-
-            cache.put(fileListKey, fileList);
-         }
-      }
-   }
-
-}

Modified: trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanDirectory.java
===================================================================
--- trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanDirectory.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/main/java/org/infinispan/lucene/InfinispanDirectory.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -23,8 +23,8 @@
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import java.util.HashSet;
+import java.util.Set;
 
 import org.apache.lucene.store.AlreadyClosedException;
 import org.apache.lucene.store.Directory;
@@ -39,8 +39,7 @@
 /**
  * Implementation that uses Infinispan to store Lucene indices.
  * 
- * Directory locking is assured with
- * {@link org.infinispan.lucene.locking.SharedLuceneLock}
+ * Directory locking is assured with {@link org.infinispan.lucene.locking.SharedLuceneLock}
  * 
  * @since 4.0
  * @author Lukasz Moren
@@ -71,9 +70,6 @@
       this.setLockFactory(lf);
       this.chunkSize = chunkSize;
       this.fileListCacheKey = new FileListCacheKey(indexName);
-      cache.put(fileListCacheKey, new ConcurrentHashMap<String, String>());
-      // register listener which add/remove file names to/from above list
-      cache.addListener(new InfinispanCacheEntryListener(indexName));
    }
 
    public InfinispanDirectory(Cache<CacheKey, Object> cache, String indexName, LockFactory lf) {
@@ -95,11 +91,10 @@
    /**
     * {@inheritDoc}
     */
-   @SuppressWarnings("unchecked")
    public String[] list() throws IOException {
       checkIsOpen();
-      Map<String, String> filesList = (Map<String, String>) cache.get(fileListCacheKey);
-      return (String[]) filesList.values().toArray(new String[] {});
+      Set<String> filesList = getFileList();
+      return filesList.toArray(new String[] {});
    }
 
    /**
@@ -115,7 +110,7 @@
     */
    public long fileModified(String name) throws IOException {
       checkIsOpen();
-      FileMetadata file = getFile(indexName, name);
+      FileMetadata file = getFileMetadata(name);
       if (file == null) {
          throw new FileNotFoundException(name);
       }
@@ -125,13 +120,15 @@
    /**
     * {@inheritDoc}
     */
-   public void touchFile(String name) throws IOException {
+   public void touchFile(String fileName) throws IOException {
       checkIsOpen();
-      FileMetadata file = getFile(indexName, name);
+      CacheKey key = new FileCacheKey(indexName, fileName);
+      FileMetadata file = (FileMetadata) cache.get(key);
       if (file == null) {
-         throw new FileNotFoundException(name);
+         throw new FileNotFoundException(fileName);
       }
       file.touch();
+      cache.put(key, file);
    }
 
    /**
@@ -142,6 +139,9 @@
       FileCacheKey key = new FileCacheKey(indexName, name);
       // remove main file
       cache.remove(key);
+      Set<String> fileList = getFileList();
+      fileList.remove(name);
+      cache.put(fileListCacheKey, fileList);
       // and all of its chunks
       int i = 0;
       Object removed;
@@ -161,23 +161,27 @@
    public void renameFile(String from, String to) throws IOException {
       checkIsOpen();
       // rename main file header
-      FileMetadata fileFrom = getFile(indexName, from);
-      cache.remove(new FileCacheKey(indexName, from));
+      CacheKey fromKey = new FileCacheKey(indexName, from);
+      FileMetadata fileFrom = (FileMetadata) cache.remove(fromKey);
       cache.put(new FileCacheKey(indexName, to), fileFrom);
+      Set<String> fileList = getFileList();
+      fileList.remove(from);
+      fileList.add(to);
+      cache.put(fileListCacheKey, fileList);
       // rename also all chunks
       int i = -1;
       Object ob;
       do {
-         ChunkCacheKey chunkKey = new ChunkCacheKey(indexName, from, ++i);
-         ob = cache.get(chunkKey);
+         ChunkCacheKey fromChunkKey = new ChunkCacheKey(indexName, from, ++i);
+         ob = cache.get(fromChunkKey);
          if (ob == null) {
             break;
          }
-         chunkKey = new ChunkCacheKey(indexName, to, i);
-         cache.put(chunkKey, ob);
+         ChunkCacheKey toChunkKey = new ChunkCacheKey(indexName, to, i);
+         cache.put(toChunkKey, ob);
       } while (true);
       if (log.isTraceEnabled()) {
-         log.trace("Renamed file from: {0} to: {1} in index {2}",from, to, indexName);
+         log.trace("Renamed file from: {0} to: {1} in index {2}", from, to, indexName);
       }
    }
 
@@ -186,7 +190,7 @@
     */
    public long fileLength(String name) throws IOException {
       checkIsOpen();
-      final FileMetadata file = getFile(indexName, name);
+      final FileMetadata file = getFileMetadata(name);
       if (file == null) {
          throw new FileNotFoundException(name);
       }
@@ -200,10 +204,25 @@
       final FileCacheKey key = new FileCacheKey(indexName, name);
       FileMetadata newFileMetadata = new FileMetadata();
       FileMetadata previous = (FileMetadata) cache.putIfAbsent(key, newFileMetadata);
-      FileMetadata usedMetadata = previous==null ? newFileMetadata : previous;
-      return new InfinispanIndexIO.InfinispanIndexOutput(cache, key, chunkSize, usedMetadata);
+      if (previous == null) {
+         // creating new file
+         Set<String> fileList = getFileList();
+         fileList.add(name);
+         cache.put(fileListCacheKey, fileList);
+         return new InfinispanIndexIO.InfinispanIndexOutput(cache, key, chunkSize, newFileMetadata);
+      } else {
+         return new InfinispanIndexIO.InfinispanIndexOutput(cache, key, chunkSize, previous);
+      }
    }
 
+   @SuppressWarnings("unchecked")
+   private Set<String> getFileList() {
+      Set<String> fileList = (Set<String>) cache.get(fileListCacheKey);
+      if (fileList == null)
+         fileList = new HashSet<String>();
+      return fileList;
+   }
+
    /**
     * {@inheritDoc}
     */
@@ -228,7 +247,7 @@
       }
    }
 
-   private FileMetadata getFile(String indexName, String fileName) {
+   private FileMetadata getFileMetadata(String fileName) {
       CacheKey key = new FileCacheKey(indexName, fileName);
       return (FileMetadata) cache.get(key);
    }

Deleted: trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanCacheEntryListenerTest.java
===================================================================
--- trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanCacheEntryListenerTest.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanCacheEntryListenerTest.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -1,98 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source.
- * Copyright 2009, Red Hat Middleware LLC, and individual contributors
- * as indicated by the @author tags. See the copyright.txt file in the
- * distribution for a full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.infinispan.lucene;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.infinispan.Cache;
-import org.infinispan.manager.CacheManager;
-import org.testng.annotations.AfterTest;
-import org.testng.annotations.BeforeTest;
-import org.testng.annotations.Test;
-
-/**
- * @author Lukasz Moren
- * @author Sanne Grinovero
- */
- at Test(groups = "functional", testName = "lucene.InfinispanCacheEntryListenerTest")
-public class InfinispanCacheEntryListenerTest {
-
-	Cache<CacheKey, Object> cache;
-	CacheManager cm;
-
-	public void testCacheEntryCreatedListener() {
-		final FileListCacheKey fileListKey = new FileListCacheKey( "index" );
-
-		//add some data
-		cache.put( fileListKey, Collections.synchronizedMap( new HashMap<String, String>() ) );
-		cache.addListener( new InfinispanCacheEntryListener( "index" ) );
-
-		final FileCacheKey key1 = new FileCacheKey( "index", "Hello.txt" );
-		cache.put( key1, new FileMetadata() );
-		cache.put( new ChunkCacheKey( "index", "Chunk.txt", 0 ), new byte[15] );
-		cache.put( new FileCacheKey( "index", "write.lock", true ), "");
-
-		final FileCacheKey key2 = new FileCacheKey( "index", "World.txt" );
-		cache.put( key2, new FileMetadata() );
-
-		final FileCacheKey key3 = new FileCacheKey( "index2", "Other.txt" );
-		cache.put( key3, new FileMetadata() );
-
-		//check if cache listener properly added file names to the list
-		Map map = ( Map ) cache.get( fileListKey );
-
-		assert map.containsKey( "Hello.txt" );
-		assert ! map.containsKey( "Chunk.txt" );
-		assert ! map.containsKey( "write.lock" );
-		assert map.containsKey( "World.txt" );
-		assert ! map.containsKey( "Other.txt" );
-
-		cache.remove( key1 );
-		cache.remove( key2 );
-		cache.remove( key3 );
-
-		//and properly removed file names from the list
-		map = ( Map ) cache.get( fileListKey );
-
-		assert ! map.containsKey( "Hello.txt" );
-		assert ! map.containsKey( "World.txt" );
-		assert ! map.containsKey( "Other.txt" );
-	}
-
-	@BeforeTest
-	public void setUp() {
-	   cm = CacheTestSupport.createTestCacheManager();
-	   cache = cm.getCache();
-	}
-
-	@AfterTest
-	public void tearDown() {
-		if ( cache != null ) {
-			cache.stop();
-		}
-		if ( cm != null ) {
-		   cm.stop();
-		}
-	}
-}

Modified: trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryIOTest.java
===================================================================
--- trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryIOTest.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryIOTest.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -38,6 +38,7 @@
 @Test(groups = "functional", testName = "lucene.InfinispanDirectoryIOTest")
 public class InfinispanDirectoryIOTest {
 
+   @Test(enabled=false)
    public void testReadChunks() throws Exception {
       final int BUFFER_SIZE = 64;
 

Modified: trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryStressTest.java
===================================================================
--- trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryStressTest.java	2009-11-09 10:48:11 UTC (rev 1117)
+++ trunk/lucene-directory/src/test/java/org/infinispan/lucene/InfinispanDirectoryStressTest.java	2009-11-09 18:38:03 UTC (rev 1118)
@@ -35,6 +35,7 @@
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.TopDocs;
 import org.infinispan.Cache;
 import org.infinispan.manager.CacheManager;
 import org.infinispan.util.logging.Log;
@@ -71,9 +72,9 @@
       IndexSearcher search = new IndexSearcher(directory);
       Term t = new Term("info", "good");
       Query query = new TermQuery(t);
-      Hits hits = search.search(query);
+      TopDocs hits = search.search(query, 1);
 
-      assert OPERATIONS == hits.length();
+      assert OPERATIONS == hits.totalHits;
 
       directory.close();
       cacheManager.stop();
@@ -117,9 +118,10 @@
       IndexSearcher search = new IndexSearcher(directory);
       Term t = new Term("info", "good");
       Query query = new TermQuery(t);
-      Hits hits = search.search(query);
+      int expectedDocs = writeCount.get();
+      TopDocs hits = search.search(query, 1);
 
-      assert writeCount.get() == hits.length();
+      assert expectedDocs == hits.totalHits;
 
       search.close();
       directory.close();



More information about the infinispan-commits mailing list