You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2012/12/16 11:13:40 UTC
svn commit: r1422497 - in /lucene/dev/branches/branch_4x: ./ lucene/
lucene/facet/
lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/
lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/
Author: shaie
Date: Sun Dec 16 10:13:39 2012
New Revision: 1422497
URL: http://svn.apache.org/viewvc?rev=1422497&view=rev
Log:
LUCENE-4633: DirectoryTaxonomyWriter.replaceTaxonomy should refresh its reader
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/lucene/ (props changed)
lucene/dev/branches/branch_4x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/lucene/facet/ (props changed)
lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java
lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java
Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1422497&r1=1422496&r2=1422497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Sun Dec 16 10:13:39 2012
@@ -276,6 +276,10 @@ Bug Fixes
indexed and the Iterator throws an exception. Documents were only rolled back
if the actual indexing process failed. (Simon Willnauer)
+* LUCENE-4633: DirectoryTaxonomyWriter.replaceTaxonomy did not refresh its
+ internal reader, which could cause an existing category to be added twice.
+ (Shai Erera)
+
Changes in Runtime Behavior
* LUCENE-4586: Change default ResultMode of FacetRequest to PER_NODE_IN_TREE.
Modified: lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java?rev=1422497&r1=1422496&r2=1422497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/java/org/apache/lucene/facet/taxonomy/directory/DirectoryTaxonomyWriter.java Sun Dec 16 10:13:39 2012
@@ -1027,6 +1027,8 @@ public class DirectoryTaxonomyWriter imp
indexWriter.deleteAll();
indexWriter.addIndexes(taxoDir);
shouldRefreshReaderManager = true;
+ initReaderManager(); // ensure that it's initialized
+ refreshReaderManager();
nextID = indexWriter.maxDoc();
// need to clear the cache, so that addCategory won't accidentally return
Modified: lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java?rev=1422497&r1=1422496&r2=1422497&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java (original)
+++ lucene/dev/branches/branch_4x/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestDirectoryTaxonomyWriter.java Sun Dec 16 10:13:39 2012
@@ -9,6 +9,7 @@ import java.util.concurrent.atomic.Atomi
import org.apache.lucene.facet.taxonomy.CategoryPath;
import org.apache.lucene.facet.taxonomy.TaxonomyReader;
+import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.MemoryOrdinalMap;
import org.apache.lucene.facet.taxonomy.writercache.TaxonomyWriterCache;
import org.apache.lucene.facet.taxonomy.writercache.cl2o.Cl2oTaxonomyWriterCache;
import org.apache.lucene.facet.taxonomy.writercache.lru.LruTaxonomyWriterCache;
@@ -316,12 +317,12 @@ public class TestDirectoryTaxonomyWriter
public void testReplaceTaxonomy() throws Exception {
Directory input = newDirectory();
DirectoryTaxonomyWriter taxoWriter = new DirectoryTaxonomyWriter(input);
- taxoWriter.addCategory(new CategoryPath("a"));
+ int ordA = taxoWriter.addCategory(new CategoryPath("a"));
taxoWriter.close();
Directory dir = newDirectory();
taxoWriter = new DirectoryTaxonomyWriter(dir);
- int ordinal = taxoWriter.addCategory(new CategoryPath("b"));
+ int ordB = taxoWriter.addCategory(new CategoryPath("b"));
taxoWriter.addCategory(new CategoryPath("c"));
taxoWriter.commit();
@@ -330,11 +331,16 @@ public class TestDirectoryTaxonomyWriter
// replace the taxonomy with the input one
taxoWriter.replaceTaxonomy(input);
+ // LUCENE-4633: make sure that category "a" is not added again in any case
+ taxoWriter.addTaxonomy(input, new MemoryOrdinalMap());
+ assertEquals("no categories should have been added", 2, taxoWriter.getSize()); // root + 'a'
+ assertEquals("category 'a' received new ordinal?", ordA, taxoWriter.addCategory(new CategoryPath("a")));
+
// add the same category again -- it should not receive the same ordinal !
- int newOrdinal = taxoWriter.addCategory(new CategoryPath("b"));
- assertNotSame("new ordinal cannot be the original ordinal", ordinal, newOrdinal);
- assertEquals("ordinal should have been 2 since only one category was added by replaceTaxonomy", 2, newOrdinal);
-
+ int newOrdB = taxoWriter.addCategory(new CategoryPath("b"));
+ assertNotSame("new ordinal cannot be the original ordinal", ordB, newOrdB);
+ assertEquals("ordinal should have been 2 since only one category was added by replaceTaxonomy", 2, newOrdB);
+
taxoWriter.close();
long newEpoch = getEpoch(dir);