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 2011/06/01 09:55:56 UTC

svn commit: r1130039 - in /lucene/dev/trunk/lucene: ./ contrib/misc/src/test/org/apache/lucene/index/ contrib/misc/src/test/org/apache/lucene/misc/ src/java/org/apache/lucene/document/ src/java/org/apache/lucene/index/

Author: shaie
Date: Wed Jun  1 07:55:55 2011
New Revision: 1130039

URL: http://svn.apache.org/viewvc?rev=1130039&view=rev
Log:
LUCENE-3146: IndexReader.setNorms is no op if one of the field instances omits norms

Modified:
    lucene/dev/trunk/lucene/CHANGES.txt
    lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java
    lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
    lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java

Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Wed Jun  1 07:55:55 2011
@@ -236,6 +236,9 @@ Changes in Runtime Behavior
   
   (Mike McCandless, Michael Busch, Simon Willnauer)
 
+* LUCENE-3146: IndexReader.setNorm throws IllegalStateException if the field
+  does not store norms. (Shai Erera, Mike McCandless)
+  
 API Changes
 
 * LUCENE-2302, LUCENE-1458, LUCENE-2111, LUCENE-2514: Terms are no longer

Modified: lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java (original)
+++ lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/index/TestFieldNormModifier.java Wed Jun  1 07:55:55 2011
@@ -86,7 +86,11 @@ public class TestFieldNormModifier exten
   
   public void testMissingField() throws Exception {
     FieldNormModifier fnm = new FieldNormModifier(store, s);
-    fnm.reSetNorms("nobodyherebutuschickens");
+    try {
+      fnm.reSetNorms("nobodyherebutuschickens");
+    } catch (IllegalStateException e) {
+      // expected
+    }
   }
   
   public void testFieldWithNoNorm() throws Exception {
@@ -101,7 +105,11 @@ public class TestFieldNormModifier exten
     r.close();
     
     FieldNormModifier fnm = new FieldNormModifier(store, s);
-    fnm.reSetNorms("nonorm");
+    try {
+      fnm.reSetNorms("nonorm");
+    } catch (IllegalStateException e) {
+      // expected
+    }
     
     // nothing should have changed
     r = IndexReader.open(store, false);

Modified: lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java (original)
+++ lucene/dev/trunk/lucene/contrib/misc/src/test/org/apache/lucene/misc/TestLengthNormModifier.java Wed Jun  1 07:55:55 2011
@@ -92,12 +92,12 @@ public class TestLengthNormModifier exte
       super.tearDown();
     }
     
-    public void testMissingField() {
+    public void testMissingField() throws Exception {
 	FieldNormModifier fnm = new FieldNormModifier(store, s);
 	try {
 	    fnm.reSetNorms("nobodyherebutuschickens");
-	} catch (Exception e) {
-	    assertNull("caught something", e);
+	} catch (IllegalStateException e) {
+	    // expected
 	}
     }
 	
@@ -115,8 +115,8 @@ public class TestLengthNormModifier exte
 	FieldNormModifier fnm = new FieldNormModifier(store, s);
 	try {
 	    fnm.reSetNorms("nonorm");
-	} catch (Exception e) {
-	    assertNull("caught something", e);
+	} catch (IllegalStateException e) {
+	  // expected
 	}
 
 	// nothing should have changed

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/document/Field.java Wed Jun  1 07:55:55 2011
@@ -96,7 +96,7 @@ public final class Field extends Abstrac
     },
 
     /** Expert: Index the field's value without an Analyzer,
-     * and also disable the storing of norms.  Note that you
+     * and also disable the indexing of norms.  Note that you
      * can also separately enable/disable norms by calling
      * {@link Field#setOmitNorms}.  No norms means that
      * index-time field and document boosting and field
@@ -104,11 +104,11 @@ public final class Field extends Abstrac
      * less memory usage as norms take up one byte of RAM
      * per indexed field for every document in the index,
      * during searching.  Note that once you index a given
-     * field <i>with</i> norms enabled, disabling norms will
+     * field <i>with</i> norms disabled, enabling norms will
      * have no effect.  In other words, for this to have the
-     * above described effect on a field, all instances of
+     * above described effect on a field, one instance of
      * that field must be indexed with NOT_ANALYZED_NO_NORMS
-     * from the beginning. */
+     * at some point. */
     NOT_ANALYZED_NO_NORMS {
       @Override
       public boolean isIndexed()  { return true;  }

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexReader.java Wed Jun  1 07:55:55 2011
@@ -1025,8 +1025,8 @@ public abstract class IndexReader implem
    * length normalization}.  Thus, to preserve the length normalization
    * values when resetting this, one should base the new value upon the old.
    *
-   * <b>NOTE:</b> If this field does not store norms, then
-   * this method call will silently do nothing.
+   * <b>NOTE:</b> If this field does not index norms, then
+   * this method throws {@link IllegalStateException}.
    *
    * @see #norms(String)
    * @see Similarity#decodeNormValue(byte)
@@ -1037,6 +1037,7 @@ public abstract class IndexReader implem
    *  has this index open (<code>write.lock</code> could not
    *  be obtained)
    * @throws IOException if there is a low-level IO error
+   * @throws IllegalStateException if the field does not index norms
    */
   public synchronized  void setNorm(int doc, String field, byte value)
           throws StaleReaderException, CorruptIndexException, LockObtainFailedException, IOException {

Modified: lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java?rev=1130039&r1=1130038&r2=1130039&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentReader.java Wed Jun  1 07:55:55 2011
@@ -566,8 +566,10 @@ public class SegmentReader extends Index
   protected void doSetNorm(int doc, String field, byte value)
           throws IOException {
     SegmentNorms norm = norms.get(field);
-    if (norm == null)                             // not an indexed field
-      return;
+    if (norm == null) {
+      // field does not store norms
+      throw new IllegalStateException("Cannot setNorm for field " + field + ": norms were omitted");
+    }
 
     normsDirty = true;
     norm.copyOnWrite()[doc] = value;                    // set the value