You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by si...@apache.org on 2013/03/20 22:16:56 UTC

svn commit: r1459059 - in /lucene/dev/branches/lucene_solr_4_2: ./ dev-tools/ lucene/ lucene/analysis/ lucene/analysis/icu/src/java/org/apache/lucene/collation/ lucene/backwards/ lucene/benchmark/ lucene/classification/ lucene/classification/src/ lucen...

Author: simonw
Date: Wed Mar 20 21:16:55 2013
New Revision: 1459059

URL: http://svn.apache.org/r1459059
Log:
LUCENE-4865: BytesRefArray#append returns wrong index

Modified:
    lucene/dev/branches/lucene_solr_4_2/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/dev-tools/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/BUILD.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/CHANGES.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/JRE_VERSION_MIGRATION.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/LICENSE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/MIGRATE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/README.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/analysis/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/analysis/icu/src/java/org/apache/lucene/collation/ICUCollationKeyFilterFactory.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/backwards/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/benchmark/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/classification/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/classification/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/classification/ivy.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/classification/src/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/codecs/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/common-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/index/index.40.cfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/index/index.40.nocfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.cfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/index/index.40.optimized.nocfs.zip   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/search/TestSort.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/search/TestSortDocValues.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/search/TestSortRandom.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/search/TestTopFieldCollector.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/core/src/test/org/apache/lucene/search/TestTotalHitCountCollector.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/demo/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/facet/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/grouping/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/highlighter/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/ivy-settings.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/join/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/licenses/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/memory/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/misc/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/module-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/queries/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/queryparser/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/sandbox/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/site/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/spatial/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/suggest/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/java/org/apache/lucene/search/suggest/BytesRefArray.java
    lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestBytesRefArray.java
    lucene/dev/branches/lucene_solr_4_2/lucene/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/lucene/tools/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/CHANGES.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/LICENSE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/README.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/SYSTEM_REQUIREMENTS.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/cloud-dev/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/common-build.xml   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/contrib/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/core/src/test/org/apache/solr/core/TestConfig.java   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/example/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpclient-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpclient-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpcore-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpcore-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpmime-LICENSE-ASL.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/licenses/httpmime-NOTICE.txt   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/scripts/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/site/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/solrj/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/testlogging.properties   (props changed)
    lucene/dev/branches/lucene_solr_4_2/solr/webapp/   (props changed)

Modified: lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/java/org/apache/lucene/search/suggest/BytesRefArray.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/java/org/apache/lucene/search/suggest/BytesRefArray.java?rev=1459059&r1=1459058&r2=1459059&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/java/org/apache/lucene/search/suggest/BytesRefArray.java (original)
+++ lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/java/org/apache/lucene/search/suggest/BytesRefArray.java Wed Mar 20 21:16:55 2013
@@ -70,7 +70,7 @@ public final class BytesRefArray {
   /**
    * Appends a copy of the given {@link BytesRef} to this {@link BytesRefArray}.
    * @param bytes the bytes to append
-   * @return the ordinal of the appended bytes
+   * @return the index of the appended bytes
    */
   public int append(BytesRef bytes) {
     if (lastElement >= offsets.length) {
@@ -82,7 +82,7 @@ public final class BytesRefArray {
     pool.append(bytes);
     offsets[lastElement++] = currentOffset;
     currentOffset += bytes.length;
-    return lastElement;
+    return lastElement-1;
   }
   
   /**
@@ -96,21 +96,21 @@ public final class BytesRefArray {
   /**
    * Returns the <i>n'th</i> element of this {@link BytesRefArray}
    * @param spare a spare {@link BytesRef} instance
-   * @param ord the elements ordinal to retrieve 
+   * @param index the elements index to retrieve 
    * @return the <i>n'th</i> element of this {@link BytesRefArray}
    */
-  public BytesRef get(BytesRef spare, int ord) {
-    if (lastElement > ord) {
-      int offset = offsets[ord];
-      int length = ord == lastElement - 1 ? currentOffset - offset
-          : offsets[ord + 1] - offset;
+  public BytesRef get(BytesRef spare, int index) {
+    if (lastElement > index) {
+      int offset = offsets[index];
+      int length = index == lastElement - 1 ? currentOffset - offset
+          : offsets[index + 1] - offset;
       assert spare.offset == 0;
       spare.grow(length);
       spare.length = length;
       pool.readBytes(offset, spare.bytes, spare.offset, spare.length);
       return spare;
     }
-    throw new IndexOutOfBoundsException("index " + ord
+    throw new IndexOutOfBoundsException("index " + index
         + " must be less than the size: " + lastElement);
     
   }
@@ -130,20 +130,20 @@ public final class BytesRefArray {
       
       @Override
       protected int compare(int i, int j) {
-        final int ord1 = orderedEntries[i], ord2 = orderedEntries[j];
-        return comp.compare(get(scratch1, ord1), get(scratch2, ord2));
+        final int idx1 = orderedEntries[i], idx2 = orderedEntries[j];
+        return comp.compare(get(scratch1, idx1), get(scratch2, idx2));
       }
       
       @Override
       protected void setPivot(int i) {
-        final int ord = orderedEntries[i];
-        get(pivot, ord);
+        final int index = orderedEntries[i];
+        get(pivot, index);
       }
       
       @Override
       protected int comparePivot(int j) {
-        final int ord = orderedEntries[j];
-        return comp.compare(pivot, get(scratch2, ord));
+        final int index = orderedEntries[j];
+        return comp.compare(pivot, get(scratch2, index));
       }
       
       private final BytesRef pivot = new BytesRef(), scratch1 = new BytesRef(),
@@ -176,14 +176,14 @@ public final class BytesRefArray {
   public BytesRefIterator iterator(final Comparator<BytesRef> comp) {
     final BytesRef spare = new BytesRef();
     final int size = size();
-    final int[] ords = comp == null ? null : sort(comp);
+    final int[] indices = comp == null ? null : sort(comp);
     return new BytesRefIterator() {
       int pos = 0;
       
       @Override
       public BytesRef next() {
         if (pos < size) {
-          return get(spare, ords == null ? pos++ : ords[pos++]);
+          return get(spare, indices == null ? pos++ : indices[pos++]);
         }
         return null;
       }

Modified: lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestBytesRefArray.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestBytesRefArray.java?rev=1459059&r1=1459058&r2=1459059&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestBytesRefArray.java (original)
+++ lucene/dev/branches/lucene_solr_4_2/lucene/suggest/src/test/org/apache/lucene/search/suggest/TestBytesRefArray.java Wed Mar 20 21:16:55 2013
@@ -39,11 +39,12 @@ public class TestBytesRefArray extends L
       }
       int entries = atLeast(500);
       BytesRef spare = new BytesRef();
+      int initSize = list.size();
       for (int i = 0; i < entries; i++) {
         String randomRealisticUnicodeString = _TestUtil
             .randomRealisticUnicodeString(random);
         spare.copyChars(randomRealisticUnicodeString);
-        list.append(spare);
+        assertEquals(i+initSize, list.append(spare));
         stringList.add(randomRealisticUnicodeString);
       }
       for (int i = 0; i < entries; i++) {
@@ -81,11 +82,12 @@ public class TestBytesRefArray extends L
       }
       int entries = atLeast(500);
       BytesRef spare = new BytesRef();
+      final int initSize = list.size();
       for (int i = 0; i < entries; i++) {
         String randomRealisticUnicodeString = _TestUtil
             .randomRealisticUnicodeString(random);
         spare.copyChars(randomRealisticUnicodeString);
-        list.append(spare);
+        assertEquals(initSize + i, list.append(spare));
         stringList.add(randomRealisticUnicodeString);
       }