You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2015/09/18 17:13:52 UTC

svn commit: r1703881 [3/5] - in /lucene/dev/branches/lucene6780: ./ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/hunspell/ lucene/benchmark/ lucene/benchmark/src/test/org/apache/lucene/benc...

Modified: lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java (original)
+++ lucene/dev/branches/lucene6780/lucene/queryparser/src/test/org/apache/lucene/queryparser/classic/TestQueryParser.java Fri Sep 18 15:13:49 2015
@@ -35,6 +35,7 @@ import org.apache.lucene.search.BooleanQ
 import org.apache.lucene.search.BoostQuery;
 import org.apache.lucene.search.MultiPhraseQuery;
 import org.apache.lucene.search.Query;
+import org.apache.lucene.search.SynonymQuery;
 import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.util.automaton.TooComplexToDeterminizeException;
 
@@ -300,21 +301,16 @@ public class TestQueryParser extends Que
     /** ordinary behavior, synonyms form uncoordinated boolean query */
     QueryParser dumb = new QueryParser("field",
         new Analyzer1());
-    BooleanQuery.Builder expanded = new BooleanQuery.Builder();
-    expanded.setDisableCoord(true);
-    expanded.add(new TermQuery(new Term("field", "dogs")),
-        BooleanClause.Occur.SHOULD);
-    expanded.add(new TermQuery(new Term("field", "dog")),
-        BooleanClause.Occur.SHOULD);
-    assertEquals(expanded.build(), dumb.parse("\"dogs\""));
+    Query expanded = new SynonymQuery(new Term("field", "dogs"), new Term("field", "dog"));
+    assertEquals(expanded, dumb.parse("\"dogs\""));
     /** even with the phrase operator the behavior is the same */
-    assertEquals(expanded.build(), dumb.parse("dogs"));
+    assertEquals(expanded, dumb.parse("dogs"));
     
     /**
      * custom behavior, the synonyms are expanded, unless you use quote operator
      */
     QueryParser smart = new SmartQueryParser();
-    assertEquals(expanded.build(), smart.parse("dogs"));
+    assertEquals(expanded, smart.parse("dogs"));
     
     Query unexpanded = new TermQuery(new Term("field", "dogs"));
     assertEquals(unexpanded, smart.parse("\"dogs\""));
@@ -333,11 +329,7 @@ public class TestQueryParser extends Que
   
   /** simple synonyms test */
   public void testSynonyms() throws Exception {
-    BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
-    expectedB.setDisableCoord(true);
-    expectedB.add(new TermQuery(new Term("field", "dogs")), BooleanClause.Occur.SHOULD);
-    expectedB.add(new TermQuery(new Term("field", "dog")), BooleanClause.Occur.SHOULD);
-    Query expected = expectedB.build();
+    Query expected = new SynonymQuery(new Term("field", "dogs"), new Term("field", "dog"));
     QueryParser qp = new QueryParser("field", new MockSynonymAnalyzer());
     assertEquals(expected, qp.parse("dogs"));
     assertEquals(expected, qp.parse("\"dogs\""));
@@ -405,11 +397,7 @@ public class TestQueryParser extends Que
   
   /** simple CJK synonym test */
   public void testCJKSynonym() throws Exception {
-    BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
-    expectedB.setDisableCoord(true);
-    expectedB.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    expectedB.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    Query expected = expectedB.build();
+    Query expected = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
     QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
     assertEquals(expected, qp.parse("国"));
     qp.setDefaultOperator(Operator.AND);
@@ -422,11 +410,8 @@ public class TestQueryParser extends Que
   public void testCJKSynonymsOR() throws Exception {
     BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
     expectedB.add(new TermQuery(new Term("field", "中")), BooleanClause.Occur.SHOULD);
-    BooleanQuery.Builder inner = new BooleanQuery.Builder();
-    inner.setDisableCoord(true);
-    inner.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner.build(), BooleanClause.Occur.SHOULD);
+    Query inner = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner, BooleanClause.Occur.SHOULD);
     Query expected = expectedB.build();
     QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
     assertEquals(expected, qp.parse("中国"));
@@ -438,16 +423,10 @@ public class TestQueryParser extends Que
   public void testCJKSynonymsOR2() throws Exception {
     BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
     expectedB.add(new TermQuery(new Term("field", "中")), BooleanClause.Occur.SHOULD);
-    BooleanQuery.Builder inner = new BooleanQuery.Builder();
-    inner.setDisableCoord(true);
-    inner.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner.build(), BooleanClause.Occur.SHOULD);
-    BooleanQuery.Builder inner2 = new BooleanQuery.Builder();
-    inner2.setDisableCoord(true);
-    inner2.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner2.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner2.build(), BooleanClause.Occur.SHOULD);
+    SynonymQuery inner = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner, BooleanClause.Occur.SHOULD);
+    SynonymQuery inner2 = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner2, BooleanClause.Occur.SHOULD);
     Query expected = expectedB.build();
     QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
     assertEquals(expected, qp.parse("中国国"));
@@ -459,11 +438,8 @@ public class TestQueryParser extends Que
   public void testCJKSynonymsAND() throws Exception {
     BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
     expectedB.add(new TermQuery(new Term("field", "中")), BooleanClause.Occur.MUST);
-    BooleanQuery.Builder inner = new BooleanQuery.Builder();
-    inner.setDisableCoord(true);
-    inner.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner.build(), BooleanClause.Occur.MUST);
+    Query inner = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner, BooleanClause.Occur.MUST);
     Query expected = expectedB.build();
     QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
     qp.setDefaultOperator(Operator.AND);
@@ -476,16 +452,10 @@ public class TestQueryParser extends Que
   public void testCJKSynonymsAND2() throws Exception {
     BooleanQuery.Builder expectedB = new BooleanQuery.Builder();
     expectedB.add(new TermQuery(new Term("field", "中")), BooleanClause.Occur.MUST);
-    BooleanQuery.Builder inner = new BooleanQuery.Builder();
-    inner.setDisableCoord(true);
-    inner.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner.build(), BooleanClause.Occur.MUST);
-    BooleanQuery.Builder inner2 = new BooleanQuery.Builder();
-    inner2.setDisableCoord(true);
-    inner2.add(new TermQuery(new Term("field", "国")), BooleanClause.Occur.SHOULD);
-    inner2.add(new TermQuery(new Term("field", "國")), BooleanClause.Occur.SHOULD);
-    expectedB.add(inner2.build(), BooleanClause.Occur.MUST);
+    Query inner = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner, BooleanClause.Occur.MUST);
+    Query inner2 = new SynonymQuery(new Term("field", "国"), new Term("field", "國"));
+    expectedB.add(inner2, BooleanClause.Occur.MUST);
     Query expected = expectedB.build();
     QueryParser qp = new QueryParser("field", new MockCJKSynonymAnalyzer());
     qp.setDefaultOperator(Operator.AND);

Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/FuzzyLikeThisQuery.java Fri Sep 18 15:13:49 2015
@@ -41,7 +41,7 @@ import org.apache.lucene.search.Constant
 import org.apache.lucene.search.MaxNonCompetitiveBoostAttribute;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.TFIDFSimilarity;
 import org.apache.lucene.util.AttributeSource;
 import org.apache.lucene.util.BytesRef;
@@ -68,7 +68,7 @@ public class FuzzyLikeThisQuery extends
     // a better way might be to convert this into multitermquery rewrite methods.
     // the rewrite method can 'average' the TermContext's term statistics (docfreq,totalTermFreq) 
     // provided to TermQuery, so that the general idea is agnostic to any scoring system...
-    static TFIDFSimilarity sim=new DefaultSimilarity();
+    static TFIDFSimilarity sim=new ClassicSimilarity();
     ArrayList<FieldVals> fieldVals=new ArrayList<>();
     Analyzer analyzer;
 

Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JakartaRegexpCapabilities.java Fri Sep 18 15:13:49 2015
@@ -18,9 +18,8 @@ package org.apache.lucene.sandbox.querie
  */
 
 import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
 import org.apache.lucene.util.CharsRefBuilder;
-import org.apache.lucene.util.UnicodeUtil;
+import org.apache.lucene.util.SuppressForbidden;
 import org.apache.regexp.CharacterIterator;
 import org.apache.regexp.RE;
 import org.apache.regexp.REProgram;
@@ -40,6 +39,11 @@ public class JakartaRegexpCapabilities i
   private static Method getPrefixMethod;
 
   static {
+    initClass();
+  }
+  
+  @SuppressForbidden(reason = "TODO: Remove this class completely and also the hack around setAccessible!")
+  private static void initClass() {
     try {
       getPrefixMethod = REProgram.class.getMethod("getPrefix");
     } catch (Exception e) {

Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/java/org/apache/lucene/sandbox/queries/regex/JavaUtilRegexCapabilities.java Fri Sep 18 15:13:49 2015
@@ -21,9 +21,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.CharsRef;
 import org.apache.lucene.util.CharsRefBuilder;
-import org.apache.lucene.util.UnicodeUtil;
 
 /**
  * An implementation tying Java's built-in java.util.regex to RegexQuery.

Modified: lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java (original)
+++ lucene/dev/branches/lucene6780/lucene/sandbox/src/test/org/apache/lucene/sandbox/queries/TestSlowFuzzyQuery2.java Fri Sep 18 15:13:49 2015
@@ -33,7 +33,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MultiTermQuery;
 import org.apache.lucene.search.TopDocs;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.LuceneTestCase;
@@ -111,7 +111,7 @@ public class TestSlowFuzzyQuery2 extends
     }
     // even though this uses a boost-only rewrite, this test relies upon queryNorm being the default implementation,
     // otherwise scores are different!
-    searcher.setSimilarity(new DefaultSimilarity());
+    searcher.setSimilarity(new ClassicSimilarity());
     
     writer.close();
     String line;

Modified: lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java (original)
+++ lucene/dev/branches/lucene6780/lucene/spatial3d/src/test/org/apache/lucene/bkdtree3d/TestGeo3DPointField.java Fri Sep 18 15:13:49 2015
@@ -557,7 +557,7 @@ public class TestGeo3DPointField extends
                 hits.add(docID);
               }
             }
-            break;
+            continue;
           case GeoArea.OVERLAPS:
             if (VERBOSE) {
               log.println("    GeoArea.OVERLAPS: keep splitting");

Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/search/RandomSimilarityProvider.java Fri Sep 18 15:13:49 2015
@@ -37,7 +37,7 @@ import org.apache.lucene.search.similari
 import org.apache.lucene.search.similarities.BasicModelIne;
 import org.apache.lucene.search.similarities.BasicModelP;
 import org.apache.lucene.search.similarities.DFRSimilarity;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.Distribution;
 import org.apache.lucene.search.similarities.DistributionLL;
 import org.apache.lucene.search.similarities.DistributionSPL;
@@ -63,7 +63,7 @@ import org.apache.lucene.search.similari
  * for the same field.
  */
 public class RandomSimilarityProvider extends PerFieldSimilarityWrapper {
-  final DefaultSimilarity defaultSim = new DefaultSimilarity();
+  final ClassicSimilarity defaultSim = new ClassicSimilarity();
   final List<Similarity> knownSims;
   Map<String,Similarity> previousMappings = new HashMap<>();
   final int perFieldSeed;
@@ -139,7 +139,7 @@ public class RandomSimilarityProvider ex
   static List<Similarity> allSims;
   static {
     allSims = new ArrayList<>();
-    allSims.add(new DefaultSimilarity());
+    allSims.add(new ClassicSimilarity());
     allSims.add(new BM25Similarity());
     for (BasicModel basicModel : BASIC_MODELS) {
       for (AfterEffect afterEffect : AFTER_EFFECTS) {

Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Fri Sep 18 15:13:49 2015
@@ -29,7 +29,6 @@ import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
 import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.nio.file.NoSuchFileException;
 import java.nio.file.Path;
@@ -684,23 +683,12 @@ public abstract class LuceneTestCase ext
   /** Tells {@link IndexWriter} to enforce the specified limit as the maximum number of documents in one index; call
    *  {@link #restoreIndexWriterMaxDocs} once your test is done. */
   public void setIndexWriterMaxDocs(int limit) {
-    Method m;
-    try {
-      m = IndexWriter.class.getDeclaredMethod("setMaxDocs", int.class);
-    } catch (NoSuchMethodException nsme) {
-      throw new RuntimeException(nsme);
-    }
-    m.setAccessible(true);
-    try {
-      m.invoke(IndexWriter.class, limit);
-    } catch (IllegalAccessException | InvocationTargetException iae) {
-      throw new RuntimeException(iae);
-    }
+    IndexWriterMaxDocsChanger.setMaxDocs(limit);
   }
 
-  /** Returns the default {@link IndexWriter#MAX_DOCS} limit. */
+  /** Returns to the default {@link IndexWriter#MAX_DOCS} limit. */
   public void restoreIndexWriterMaxDocs() {
-    setIndexWriterMaxDocs(IndexWriter.MAX_DOCS);
+    IndexWriterMaxDocsChanger.restoreMaxDocs();
   }
 
   // -----------------------------------------------------------------

Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/RamUsageTester.java Fri Sep 18 15:13:49 2015
@@ -20,6 +20,8 @@ package org.apache.lucene.util;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -184,32 +186,35 @@ public final class RamUsageTester {
    * Create a cached information about shallow size and reference fields for 
    * a given class.
    */
+  @SuppressForbidden(reason = "We need to access private fields of measured objects.")
   private static ClassCache createCacheEntry(final Class<?> clazz) {
-    ClassCache cachedInfo;
-    long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
-    final ArrayList<Field> referenceFields = new ArrayList<>(32);
-    for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
-      if (c == Class.class) {
-        // prevent inspection of Class' fields, throws SecurityException in Java 9!
-        continue; 
-      }
-      final Field[] fields = c.getDeclaredFields();
-      for (final Field f : fields) {
-        if (!Modifier.isStatic(f.getModifiers())) {
-          shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
-
-          if (!f.getType().isPrimitive()) {
-            f.setAccessible(true);
-            referenceFields.add(f);
+    return AccessController.doPrivileged((PrivilegedAction<ClassCache>) () -> {
+      ClassCache cachedInfo;
+      long shallowInstanceSize = RamUsageEstimator.NUM_BYTES_OBJECT_HEADER;
+      final ArrayList<Field> referenceFields = new ArrayList<>(32);
+      for (Class<?> c = clazz; c != null; c = c.getSuperclass()) {
+        if (c == Class.class) {
+          // prevent inspection of Class' fields, throws SecurityException in Java 9!
+          continue; 
+        }
+        final Field[] fields = c.getDeclaredFields();
+        for (final Field f : fields) {
+          if (!Modifier.isStatic(f.getModifiers())) {
+            shallowInstanceSize = RamUsageEstimator.adjustForField(shallowInstanceSize, f);
+  
+            if (!f.getType().isPrimitive()) {
+              f.setAccessible(true);
+              referenceFields.add(f);
+            }
           }
         }
       }
-    }
-
-    cachedInfo = new ClassCache(
-        RamUsageEstimator.alignObjectSize(shallowInstanceSize), 
-        referenceFields.toArray(new Field[referenceFields.size()]));
-    return cachedInfo;
+  
+      cachedInfo = new ClassCache(
+          RamUsageEstimator.alignObjectSize(shallowInstanceSize), 
+          referenceFields.toArray(new Field[referenceFields.size()]));
+      return cachedInfo;
+    });
   }
 
 }

Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/Rethrow.java Fri Sep 18 15:13:49 2015
@@ -24,22 +24,19 @@ package org.apache.lucene.util;
  * <p>Pulled from <a href="http://www.javapuzzlers.com">Java Puzzlers</a>.</p>
  * @see <a href="http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X">http://www.amazon.com/Java-Puzzlers-Traps-Pitfalls-Corner/dp/032133678X</a>
  */
-@SuppressWarnings({"unchecked","rawtypes"})
 public final class Rethrow {
-  /**
-   * Classy puzzler to rethrow any checked exception as an unchecked one.
-   */
-  private static class Rethrower<T extends Throwable> {
-    private void rethrow(Throwable t) throws T {
-      throw (T) t;
-    }
-  }
-  
+  private Rethrow() {}
+
   /**
    * Rethrows <code>t</code> (identical object).
    */
   public static void rethrow(Throwable t) {
-    new Rethrower<Error>().rethrow(t);
+    Rethrow.<Error>rethrow0(t);
+  }
+  
+  @SuppressWarnings("unchecked")
+  private static <T extends Throwable> void rethrow0(Throwable t) throws T {
+    throw (T) t;
   }
 }
 

Modified: lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java (original)
+++ lucene/dev/branches/lucene6780/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java Fri Sep 18 15:13:49 2015
@@ -38,7 +38,7 @@ import org.apache.lucene.codecs.mockrand
 import org.apache.lucene.codecs.simpletext.SimpleTextCodec;
 import org.apache.lucene.index.RandomCodec;
 import org.apache.lucene.search.RandomSimilarityProvider;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.util.LuceneTestCase.SuppressCodecs;
 import org.junit.internal.AssumptionViolatedException;
@@ -207,7 +207,7 @@ final class TestRuleSetupAndRestoreClass
     TimeZone randomTimeZone = randomTimeZone(random());
     timeZone = testTimeZone.equals("random") ? randomTimeZone : TimeZone.getTimeZone(testTimeZone);
     TimeZone.setDefault(timeZone);
-    similarity = random().nextBoolean() ? new DefaultSimilarity() : new RandomSimilarityProvider(random());
+    similarity = random().nextBoolean() ? new ClassicSimilarity() : new RandomSimilarityProvider(random());
 
     // Check codec restrictions once at class level.
     try {

Modified: lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt (original)
+++ lucene/dev/branches/lucene6780/lucene/tools/forbiddenApis/base.txt Fri Sep 18 15:13:49 2015
@@ -27,13 +27,16 @@ java.util.Properties#load(java.io.InputS
 java.util.Properties#save(java.io.OutputStream,java.lang.String)
 java.util.Properties#store(java.io.OutputStream,java.lang.String)
 
+@defaultMessage Accessing private members of foreign classes breaks in security-sensitive environments. In addition, it no longer works with Java 9 on runtime classes.
+java.lang.reflect.AccessibleObject#setAccessible(boolean)
+java.lang.reflect.AccessibleObject#setAccessible(java.lang.reflect.AccessibleObject[],boolean)
+
 java.lang.Character#codePointBefore(char[],int) @ Implicit start offset is error-prone when the char[] is a buffer and the first chars are random chars
 java.lang.Character#codePointAt(char[],int) @ Implicit end offset is error-prone when the char[] is a buffer and the last chars are random chars
 
 java.io.File#delete() @ use Files.delete for real exception, IOUtils.deleteFilesIgnoringExceptions if you dont care
 
-@defaultMessage Use shuffle(List, Random) instead so that it can be reproduced
-java.util.Collections#shuffle(java.util.List)
+java.util.Collections#shuffle(java.util.List) @ Use shuffle(List, Random) instead so that it can be reproduced
 
 # START: forbidden-apis patch
 # TODO: remove this once forbidden-apis was updated to next version with following commit:

Modified: lucene/dev/branches/lucene6780/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/CHANGES.txt?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene6780/solr/CHANGES.txt Fri Sep 18 15:13:49 2015
@@ -67,11 +67,18 @@ New Features
 
 * SOLR-7903: Add the FacetStream to the Streaming API and wire it into the SQLHandler (Joel Bernstein)
 
+* SOLR-7986: JDBC Driver for SQL Interface (Uwe Schindler, Joel Bernstein)
+
 Optimizations
 ----------------------
 * SOLR-7876: Speed up queries and operations that use many terms when timeAllowed has not been
   specified.  Speedups of up to 8% were observed.  (yonik)
 
+* SOLR-8037: Speed up creation of filters from term range queries (i.e. non-numeric range queries)
+  and use the filter cache for term range queries that are part of larger queries.  Some observed
+  speedups were up to 2.5x for production of filters, and up to 10x for query evaluation with
+  embedded term range queres that resulted in filter cache hits.  (yonik)
+
 
 Other Changes
 ----------------------
@@ -148,6 +155,12 @@ New Features
 
 * SOLR-7915: Provide pluggable context tool support for VelocityResponseWriter (Erik Hatcher)
 
+* LUCENE-6795: SystemInfoHandler was improved to also show detailed operating
+  system statistics on IBM J9 virtual machines. It also no longer fails on Java 9
+  with Jigsaw module system.  (Uwe Schindler)
+
+* SOLR-8053: Basic auth support in SolrJ (noble)
+
 Bug Fixes
 ----------------------
 
@@ -188,6 +201,14 @@ Bug Fixes
   related to leader initiated recovery is performed by a dedicated LIR thread in the background.
   (Ramkumar Aiyengar, shalin)
 
+* SOLR-7746: Ping requests stopped working with distrib=true in Solr 5.2.1.  (Michael Sun)
+
+* SOLR-6547: ClassCastException in SolrResponseBase.getQTime on update response from CloudSolrClient
+  when parallelUpdates is enabled (default) and multiple docs are sent as a single update.
+  (kevin, hossman, shalin)
+
+* SOLR-8058: Fix the exclusion filter so that collections that start with js, css, img, tpl
+  can be accessed. (Upayavira, Steve Rowe, Anshum Gupta)
 
 Optimizations
 ----------------------
@@ -251,6 +272,11 @@ Other Changes
 * SOLR-7999: SolrRequestParser tests no longer depend on external URLs
   that may fail to work.  (Uwe Schindler)
 
+* SOLR-8034: Leader no longer puts replicas in recovery in case of a failed update, when minRF
+  isn't achieved. (Jessica Cheng, Timothy Potter, Anshum Gupta)
+
+* SOLR-8066: SolrCore.checkStale method doesn't restore interrupt status. (shalin)
+
 ==================  5.3.1 ==================
 
 Bug Fixes
@@ -274,6 +300,9 @@ Bug Fixes
 * SOLR-7990: Use of timeAllowed can cause incomplete filters to be cached and incorrect
   results to be returned on subsequent requests. (Erick Erickson, yonik)
 
+* SOLR-8041: Fix VelocityResponseWriter's $resource.get(key,baseName,locale) to use specified locale.
+  (Erik Hatcher)
+
 ==================  5.3.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
@@ -1125,6 +1154,8 @@ Other Changes
 
 * SOLR-7662: Refactored response writing to consolidate the logic in  one place (Noble Paul)
 
+* SOLR-7110: Added option to optimize JavaBinCodec to minimize string Object creation (Noble Paul)
+
 ==================  5.1.0 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release
@@ -1442,6 +1473,9 @@ Optimizations
  * SOLR-7239: improved performance of min & max in StatsComponent, as well as situations
    where local params disable all stats (hossman)
 
+ * SOLR-7050: realtime get should internally load only fields specified in fl.
+   (yonik, Noble Paul)
+
 Other Changes
 ----------------------
 

Modified: lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/AbstractAnalyticsStatsTest.java Fri Sep 18 15:13:49 2015
@@ -41,6 +41,8 @@ import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.util.MedianCalculator;
 import org.apache.solr.analytics.util.PercentileCalculator;
 import org.apache.solr.request.SolrQueryRequest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
@@ -73,16 +75,28 @@ public class AbstractAnalyticsStatsTest
   }
 
   static private Document doc;
-  static private XPathFactory xPathFact =  XPathFactory.newInstance();
+  static private XPathFactory xPathFact;
 
   static private String rawResponse;
+  
+  @BeforeClass
+  public static void beforeClassAbstractAnalysis() {
+    xPathFact = XPathFactory.newInstance();
+  }
+  
+  @AfterClass
+  public static void afterClassAbstractAnalysis() {
+    xPathFact = null;
+    doc = null;
+    rawResponse = null;
+    defaults.clear();
+  }
 
   public static void setResponse(String response) throws ParserConfigurationException, IOException, SAXException {
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     factory.setNamespaceAware(true); // never forget this!
     DocumentBuilder builder = factory.newDocumentBuilder();
     doc = builder.parse(new InputSource(new ByteArrayInputStream(response.getBytes(StandardCharsets.UTF_8))));
-    xPathFact = XPathFactory.newInstance();
     rawResponse = response;
   }
 

Modified: lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/analytics/src/test/org/apache/solr/analytics/facet/AbstractAnalyticsFacetTest.java Fri Sep 18 15:13:49 2015
@@ -35,6 +35,8 @@ import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.util.MedianCalculator;
 import org.apache.solr.analytics.util.PercentileCalculator;
 import org.apache.solr.request.SolrQueryRequest;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
 
 import com.google.common.collect.ObjectArrays;
 
@@ -57,15 +59,27 @@ public class AbstractAnalyticsFacetTest
   protected String latestType = "";
 
   private static Document doc;
-  private static XPathFactory xPathFact =  XPathFactory.newInstance();
+  private static XPathFactory xPathFact;
   private static String rawResponse;
 
+  @BeforeClass
+  public static void beforeClassAbstractAnalysis() {
+    xPathFact = XPathFactory.newInstance();
+  }
+  
+  @AfterClass
+  public static void afterClassAbstractAnalysis() {
+    xPathFact = null;
+    doc = null;
+    rawResponse = null;
+    defaults.clear();
+  }
+
   protected static void setResponse(String response) throws ParserConfigurationException, IOException, SAXException {
     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
     factory.setNamespaceAware(true); // never forget this!
     DocumentBuilder builder = factory.newDocumentBuilder();
     doc = builder.parse(new InputSource(new ByteArrayInputStream(response.getBytes(StandardCharsets.UTF_8))));
-    xPathFact = XPathFactory.newInstance();
     rawResponse = response;
   }
 

Modified: lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/FieldStreamDataSource.java Fri Sep 18 15:13:49 2015
@@ -16,17 +16,16 @@
  */
 package org.apache.solr.handler.dataimport;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
 
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
 import java.sql.Blob;
+import java.sql.SQLException;
 import java.util.Properties;
 
-import static org.apache.solr.handler.dataimport.DataImportHandlerException.SEVERE;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 
 /**
@@ -62,24 +61,13 @@ public class FieldStreamDataSource exten
     Object o = wrapper.getVariableResolver().resolve(dataField);
     if (o == null) {
       throw new DataImportHandlerException(SEVERE, "No field available for name : " + dataField);
-    }
-    if (o instanceof Blob) {
+    } else if (o instanceof Blob) {
       Blob blob = (Blob) o;
       try {
-        //Most of the JDBC drivers have getBinaryStream defined as public
-        // so let us just check it
-        Method m = blob.getClass().getDeclaredMethod("getBinaryStream");
-        if (Modifier.isPublic(m.getModifiers())) {
-          return (InputStream) m.invoke(blob);
-        } else {
-          // force invoke
-          m.setAccessible(true);
-          return (InputStream) m.invoke(blob);
-        }
-      } catch (Exception e) {
+        return blob.getBinaryStream();
+      } catch (SQLException sqle) {
         LOG.info("Unable to get data from BLOB");
         return null;
-
       }
     } else if (o instanceof byte[]) {
       byte[] bytes = (byte[]) o;

Modified: lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/map-reduce/src/test/org/apache/solr/hadoop/MRUnitBase.java Fri Sep 18 15:13:49 2015
@@ -46,6 +46,7 @@ public abstract class MRUnitBase extends
   @AfterClass
   public static void teardownClass() throws Exception {
     if (solrHomeZip != null) Files.delete(solrHomeZip.toPath());
+    solrHomeZip = null;
   }
   
   protected void setupHadoopConfig(Configuration config) throws IOException {

Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-cell/src/test/org/apache/solr/morphlines/cell/SolrCellMorphlineTest.java Fri Sep 18 15:13:49 2015
@@ -39,6 +39,7 @@ public class SolrCellMorphlineTest exten
 
   private Map<String,Integer> expectedRecords = new HashMap<>();
   private Map<String, Map<String, Object>> expectedRecordContents = new HashMap<>();
+  
   @BeforeClass
   public static void beforeClass2() {
     assumeFalse("FIXME: Morphlines currently has issues with Windows paths", Constants.WINDOWS);

Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineTestBase.java Fri Sep 18 15:13:49 2015
@@ -100,6 +100,7 @@ public class AbstractSolrMorphlineTestBa
     if (savedLocale != null) {
       Locale.setDefault(savedLocale);
     }
+    savedLocale = null;
   }
 
   protected static void myInitCore(String baseDirName) throws Exception {

Modified: lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/morphlines-core/src/test/org/apache/solr/morphlines/solr/AbstractSolrMorphlineZkTestBase.java Fri Sep 18 15:13:49 2015
@@ -20,6 +20,7 @@ package org.apache.solr.morphlines.solr;
 import com.codahale.metrics.MetricRegistry;
 import com.google.common.collect.ListMultimap;
 import com.typesafe.config.Config;
+
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.embedded.JettySolrRunner;
@@ -27,6 +28,7 @@ import org.apache.solr.cloud.AbstractFul
 import org.apache.solr.cloud.AbstractZkTestCase;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.cloud.SolrZkClient;
+import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.kitesdk.morphline.api.Collector;
 import org.kitesdk.morphline.api.Command;
@@ -72,6 +74,11 @@ public abstract class AbstractSolrMorphl
     FileUtils.copyDirectory(SOLR_INSTANCE_DIR, solrHomeDirectory);
   }
   
+  @AfterClass
+  public static void tearDownClass() throws Exception {
+    solrHomeDirectory = null;
+  }
+  
   @Override
   public void distribSetUp() throws Exception {
     super.distribSetUp();

Modified: lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/velocity/src/java/org/apache/solr/response/VelocityResponseWriter.java Fri Sep 18 15:13:49 2015
@@ -368,7 +368,10 @@ public class VelocityResponseWriter impl
     @Override
     protected ResourceBundle getBundle(String baseName, Object loc) {
       // resource bundles for this tool must be in velocity "package"
-      return ResourceBundle.getBundle("velocity." + baseName, getLocale(), solrClassLoader);
+      return ResourceBundle.getBundle(
+          "velocity." + baseName,
+          (loc == null) ? this.getLocale() : this.toLocale(loc),
+          solrClassLoader);
     }
 
     // Why did Velocity Tools make this private?  Copied from ResourceTools.java

Modified: lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java (original)
+++ lucene/dev/branches/lucene6780/solr/contrib/velocity/src/test/org/apache/solr/velocity/VelocityResponseWriterTest.java Fri Sep 18 15:13:49 2015
@@ -148,6 +148,9 @@ public class VelocityResponseWriterTest
         VelocityResponseWriter.LOCALE,"en_US")));
     assertEquals("Colour", h.query(req("q", "*:*", "wt", "velocity", VelocityResponseWriter.TEMPLATE, "locale",
         VelocityResponseWriter.LOCALE,"en_UK")));
+
+    // Test that $resource.get(key,baseName,locale) works with specified locale
+    assertEquals("Colour", h.query(req("q","*:*", "wt","velocity",VelocityResponseWriter.TEMPLATE,"resource_get")));
   }
 
   @Test

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java Fri Sep 18 15:13:49 2015
@@ -28,6 +28,7 @@ import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.server.session.HashSessionIdManager;
+import org.eclipse.jetty.servlet.BaseHolder;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
@@ -85,6 +86,8 @@ public class JettySolrRunner {
   private volatile boolean startedBefore = false;
 
   private LinkedList<FilterHolder> extraFilters;
+
+  private static final String excludePatterns = "/css/.+,/js/.+,/img/.+,/tpl/.+";
   
   private int proxyPort = -1;
 
@@ -333,9 +336,10 @@ public class JettySolrRunner {
           String pathSpec = config.extraServlets.get(servletHolder);
           root.addServlet(servletHolder, pathSpec);
         }
-
-        dispatchFilter = root.addFilter(SolrDispatchFilter.class, "*", EnumSet.of(DispatcherType.REQUEST) );
-
+        dispatchFilter = root.getServletHandler().newFilterHolder(BaseHolder.Source.EMBEDDED);
+        dispatchFilter.setHeldClass(SolrDispatchFilter.class);
+        dispatchFilter.setInitParameter("excludePatterns", excludePatterns);
+        root.addFilter(dispatchFilter, "*", EnumSet.of(DispatcherType.REQUEST));
       }
 
       @Override

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/core/SolrCore.java Fri Sep 18 15:13:49 2015
@@ -2640,7 +2640,7 @@ public final class SolrCore implements S
     } catch (KeeperException e) {
       log.error("error refreshing solrconfig ", e);
     } catch (InterruptedException e) {
-      Thread.currentThread().isInterrupted();
+      Thread.currentThread().interrupt();
     }
     return false;
   }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/PingRequestHandler.java Fri Sep 18 15:13:49 2015
@@ -23,18 +23,19 @@ import java.nio.file.Files;
 import java.util.Date;
 import java.util.Locale;
 
+import org.apache.commons.io.FileUtils;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.SolrCore;
-import org.apache.solr.util.DateFormatUtil;
-import org.apache.solr.util.plugin.SolrCoreAware;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
 import org.apache.solr.response.SolrQueryResponse;
-import org.apache.commons.io.FileUtils;
+import org.apache.solr.util.DateFormatUtil;
+import org.apache.solr.util.plugin.SolrCoreAware;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -53,10 +54,13 @@ import org.slf4j.LoggerFactory;
  * executed.  If the request succeeds, then the PingRequestHandler
  * will respond back with a simple "OK" status.  If the request fails,
  * then the PingRequestHandler will respond back with the
- * corrisponding HTTP Error code.  Clients (such as load balancers)
+ * corresponding HTTP Error code.  Clients (such as load balancers)
  * can be configured to poll the PingRequestHandler monitoring for
  * these types of responses (or for a simple connection failure) to
  * know if there is a problem with the Solr server.
+ * 
+ * Note in case isShard=true, PingRequestHandler respond back with 
+ * what the delegated handler returns (by default it's /select handler).
  * </p>
  *
  * <pre class="prettyprint">
@@ -233,7 +237,7 @@ public class PingRequestHandler extends
     SolrCore core = req.getCore();
     
     // Get the RequestHandler
-    String qt = params.get( CommonParams.QT );//optional; you get the default otherwise
+    String qt = params.get( CommonParams.QT );//optional; you get the default otherwise    
     SolrRequestHandler handler = core.getRequestHandler( qt );
     if( handler == null ) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
@@ -241,27 +245,54 @@ public class PingRequestHandler extends
     }
     
     if( handler instanceof PingRequestHandler ) {
-      throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
-          "Cannot execute the PingRequestHandler recursively" );
+      // In case it's a query for shard, use default handler     
+      if (params.getBool(ShardParams.IS_SHARD, false)) {
+        handler = core.getRequestHandler( null );
+        ModifiableSolrParams wparams = new ModifiableSolrParams(params);
+        wparams.remove(CommonParams.QT);
+        req.setParams(wparams);
+      } else { 
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, 
+            "Cannot execute the PingRequestHandler recursively" );
+      }
     }
     
     // Execute the ping query and catch any possible exception
     Throwable ex = null;
-    try {
-      SolrQueryResponse pingrsp = new SolrQueryResponse();
-      core.execute(handler, req, pingrsp );
-      ex = pingrsp.getException();
-    }
-    catch( Exception e ) {
-      ex = e;
-    }
     
-    // Send an error or an 'OK' message (response code will be 200)
-    if( ex != null ) {
-      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, 
-          "Ping query caused exception: "+ex.getMessage(), ex );
-    }
-    rsp.add( "status", "OK" );
+    // In case it's a query for shard, return the result from delegated handler for distributed query to merge result
+    if (params.getBool(ShardParams.IS_SHARD, false)) {
+      try {
+        core.execute(handler, req, rsp );
+        ex = rsp.getException(); 
+      }
+      catch( Exception e ) {
+        ex = e;
+      }
+      // Send an error or return
+      if( ex != null ) {
+        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, 
+            "Ping query caused exception: "+ex.getMessage(), ex );
+      }
+    } else {
+      try {
+        SolrQueryResponse pingrsp = new SolrQueryResponse();
+        core.execute(handler, req, pingrsp );
+        ex = pingrsp.getException();       
+      }
+      catch( Exception e ) {
+        ex = e;
+      }
+      
+      // Send an error or an 'OK' message (response code will be 200)
+      if( ex != null ) {
+        throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, 
+            "Ping query caused exception: "+ex.getMessage(), ex );
+      }
+      
+      rsp.add( "status", "OK" );     
+    }   
+
   }
   
   protected void handleEnable(boolean enable) throws SolrException {

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Fri Sep 18 15:13:49 2015
@@ -17,24 +17,31 @@
 
 package org.apache.solr.handler.admin;
 
+import java.beans.BeanInfo;
+import java.beans.IntrospectionException;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.lang.management.ManagementFactory;
 import java.lang.management.OperatingSystemMXBean;
+import java.lang.management.PlatformManagedObject;
 import java.lang.management.RuntimeMXBean;
-import java.lang.reflect.Method;
+import java.lang.reflect.InvocationTargetException;
 import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.nio.charset.Charset;
 import java.text.DecimalFormat;
 import java.text.DecimalFormatSymbols;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.Locale;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.lucene.LucenePackage;
+import org.apache.lucene.util.Constants;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.CoreContainer;
@@ -160,58 +167,68 @@ public class SystemInfoHandler extends R
     SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
     
     OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
-    info.add(NAME, os.getName());
-    info.add( "version", os.getVersion() );
-    info.add( "arch", os.getArch() );
-    info.add( "systemLoadAverage", os.getSystemLoadAverage());
-
-    // com.sun.management.OperatingSystemMXBean
-    addGetterIfAvaliable( os, "committedVirtualMemorySize", info);
-    addGetterIfAvaliable( os, "freePhysicalMemorySize", info);
-    addGetterIfAvaliable( os, "freeSwapSpaceSize", info);
-    addGetterIfAvaliable( os, "processCpuTime", info);
-    addGetterIfAvaliable( os, "totalPhysicalMemorySize", info);
-    addGetterIfAvaliable( os, "totalSwapSpaceSize", info);
-
-    // com.sun.management.UnixOperatingSystemMXBean
-    addGetterIfAvaliable( os, "openFileDescriptorCount", info );
-    addGetterIfAvaliable( os, "maxFileDescriptorCount", info );
+    info.add(NAME, os.getName()); // add at least this one
+    try {
+      // add remaining ones dynamically using Java Beans API
+      addMXBeanProperties(os, OperatingSystemMXBean.class, info);
+    } catch (IntrospectionException | ReflectiveOperationException e) {
+      log.warn("Unable to fetch properties of OperatingSystemMXBean.", e);
+    }
+
+    // There are some additional beans we want to add (not available on all JVMs):
+    for (String clazz : Arrays.asList(
+        "com.sun.management.OperatingSystemMXBean",
+        "com.sun.management.UnixOperatingSystemMXBean", 
+        "com.ibm.lang.management.OperatingSystemMXBean"
+    )) {
+      try {
+        final Class<? extends PlatformManagedObject> intf = Class.forName(clazz)
+            .asSubclass(PlatformManagedObject.class);
+        addMXBeanProperties(os, intf, info);
+      } catch (ClassNotFoundException e) {
+        // ignore
+      } catch (IntrospectionException | ReflectiveOperationException e) {
+        log.warn("Unable to fetch properties of JVM-specific OperatingSystemMXBean.", e);
+      }
+    }
 
+    // Try some command line things:
     try { 
-      if( !os.getName().toLowerCase(Locale.ROOT).startsWith( "windows" ) ) {
-        // Try some command line things
+      if (!Constants.WINDOWS) {
         info.add( "uname",  execute( "uname -a" ) );
         info.add( "uptime", execute( "uptime" ) );
       }
-    }
-    catch( Exception ex ) {
-      ex.printStackTrace();
+    } catch( Exception ex ) {
+      log.warn("Unable to execute command line tools to get operating system properties.", ex);
     } 
     return info;
   }
   
   /**
-   * Try to run a getter function.  This is useful because java 1.6 has a few extra
-   * useful functions on the <code>OperatingSystemMXBean</code>
-   * 
-   * If you are running a sun jvm, there are nice functions in:
-   * UnixOperatingSystemMXBean and com.sun.management.OperatingSystemMXBean
-   * 
-   * it is package protected so it can be tested...
+   * Add all bean properties of a {@link PlatformManagedObject} to the given {@link NamedList}.
+   * <p>
+   * If you are running a OpenJDK/Oracle JVM, there are nice properties in:
+   * {@code com.sun.management.UnixOperatingSystemMXBean} and
+   * {@code com.sun.management.OperatingSystemMXBean}
    */
-  static void addGetterIfAvaliable( Object obj, String getter, NamedList<Object> info )
-  {
-    // This is a 1.6 function, so lets do a little magic to *try* to make it work
-    try {
-      String n = Character.toUpperCase( getter.charAt(0) ) + getter.substring( 1 );
-      Method m = obj.getClass().getMethod( "get" + n );
-      m.setAccessible(true);
-      Object v = m.invoke( obj, (Object[])null );
-      if( v != null ) {
-        info.add( getter, v );
+  static <T extends PlatformManagedObject> void addMXBeanProperties(T obj, Class<? extends T> intf, NamedList<Object> info)
+      throws IntrospectionException, ReflectiveOperationException {
+    if (intf.isInstance(obj)) {
+      final BeanInfo beanInfo = Introspector.getBeanInfo(intf, intf.getSuperclass(), Introspector.IGNORE_ALL_BEANINFO);
+      for (final PropertyDescriptor desc : beanInfo.getPropertyDescriptors()) {
+        final String name = desc.getName();
+        if (info.get(name) == null) {
+          try {
+            final Object v = desc.getReadMethod().invoke(obj);
+            if(v != null) {
+              info.add(name, v);
+            }
+          } catch (InvocationTargetException ite) {
+            // ignore (some properties throw UOE)
+          }
+        }
       }
     }
-    catch( Exception ex ) {} // don't worry, this only works for 1.6
   }
   
   
@@ -314,7 +331,9 @@ public class SystemInfoHandler extends R
     SimpleOrderedMap<Object> jmx = new SimpleOrderedMap<>();
     try{
       RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
-      jmx.add( "bootclasspath", mx.getBootClassPath());
+      if (mx.isBootClassPathSupported()) {
+        jmx.add( "bootclasspath", mx.getBootClassPath());
+      }
       jmx.add( "classpath", mx.getClassPath() );
 
       // the input arguments passed to the Java virtual machine

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/parser/SolrQueryParserBase.java Fri Sep 18 15:13:49 2015
@@ -152,7 +152,7 @@ public abstract class SolrQueryParserBas
     try {
       // TopLevelQuery is a Query followed by the end-of-input (EOF)
       Query res = TopLevelQuery(null);  // pass null so we can tell later if an explicit field was provided or not
-      return res!=null ? res : newBooleanQuery(false).build();
+      return res!=null ? res : newBooleanQuery().build();
     }
     catch (ParseException | TokenMgrError tme) {
       throw new SyntaxError("Cannot parse '" +query+ "': " + tme.getMessage(), tme);
@@ -488,30 +488,12 @@ public abstract class SolrQueryParserBas
    *
    * @return Resulting {@link org.apache.lucene.search.Query} object.
    */
-  protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError {
-    return getBooleanQuery(clauses, false);
-  }
-
-  /**
-   * Factory method for generating query, given a set of clauses.
-   * By default creates a boolean query composed of clauses passed in.
-   *
-   * Can be overridden by extending classes, to modify query being
-   * returned.
-   *
-   * @param clauses List that contains {@link org.apache.lucene.search.BooleanClause} instances
-   *    to join.
-   * @param disableCoord true if coord scoring should be disabled.
-   *
-   * @return Resulting {@link org.apache.lucene.search.Query} object.
-   */
-  protected Query getBooleanQuery(List<BooleanClause> clauses, boolean disableCoord)
-    throws SyntaxError
+  protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError
   {
     if (clauses.size()==0) {
       return null; // all clause words were filtered away by the analyzer.
     }
-    BooleanQuery.Builder query = newBooleanQuery(disableCoord);
+    BooleanQuery.Builder query = newBooleanQuery();
     for(final BooleanClause clause: clauses) {
       query.add(clause);
     }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/FieldType.java Fri Sep 18 15:13:49 2015
@@ -63,6 +63,7 @@ import org.apache.solr.common.SolrExcept
 import org.apache.solr.common.util.Base64;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.StrUtils;
+import org.apache.solr.query.SolrRangeQuery;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.Sorting;
@@ -720,12 +721,11 @@ public abstract class FieldType extends
           part2 == null ? null : new BytesRef(toInternal(part2)),
           minInclusive, maxInclusive);
     } else {
-      MultiTermQuery rangeQuery = TermRangeQuery.newStringRange(
+      SolrRangeQuery rangeQuery = new SolrRangeQuery(
             field.getName(),
-            part1 == null ? null : toInternal(part1),
-            part2 == null ? null : toInternal(part2),
+            part1 == null ? null : new BytesRef(toInternal(part1)),
+            part2 == null ? null : new BytesRef(toInternal(part2)),
             minInclusive, maxInclusive);
-      rangeQuery.setRewriteMethod(getRewriteMethod(parser, field));
       return rangeQuery;
     }
   }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/schema/TextField.java Fri Sep 18 15:13:49 2015
@@ -28,6 +28,7 @@ import org.apache.lucene.uninverting.Uni
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.QueryBuilder;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.query.SolrRangeQuery;
 import org.apache.solr.response.TextResponseWriter;
 import org.apache.solr.search.QParser;
 import org.apache.solr.search.Sorting;
@@ -136,7 +137,7 @@ public class TextField extends FieldType
     Analyzer multiAnalyzer = getMultiTermAnalyzer();
     BytesRef lower = analyzeMultiTerm(field.getName(), part1, multiAnalyzer);
     BytesRef upper = analyzeMultiTerm(field.getName(), part2, multiAnalyzer);
-    return new TermRangeQuery(field.getName(), lower, upper, minInclusive, maxInclusive);
+    return new SolrRangeQuery(field.getName(), lower, upper, minInclusive, maxInclusive);
   }
 
   public static BytesRef analyzeMultiTerm(String field, String part, Analyzer analyzerIn) {

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/BitDocSet.java Fri Sep 18 15:13:49 2015
@@ -285,8 +285,7 @@ public class BitDocSet extends DocSetBas
         }
 
         final int base = context.docBase;
-        final int maxDoc = reader.maxDoc();
-        final int max = base + maxDoc;   // one past the max doc in this segment.
+        final int max = base + reader.maxDoc();   // one past the max doc in this segment.
 
         return BitsFilteredDocIdSet.wrap(new DocIdSet() {
           @Override
@@ -302,10 +301,11 @@ public class BitDocSet extends DocSetBas
 
               @Override
               public int nextDoc() {
-                if (pos >= bs.length() - 1) {
+                int next = pos+1;
+                if (next >= max) {
                   return adjustedDoc = NO_MORE_DOCS;
                 } else {
-                  pos = bs.nextSetBit(pos + 1);
+                  pos = bs.nextSetBit(next);
                   return adjustedDoc = pos < max ? pos - base : NO_MORE_DOCS;
                 }
               }
@@ -314,7 +314,7 @@ public class BitDocSet extends DocSetBas
               public int advance(int target) {
                 if (target == NO_MORE_DOCS) return adjustedDoc = NO_MORE_DOCS;
                 int adjusted = target + base;
-                if (adjusted >= bs.length()) {
+                if (adjusted >= max) {
                   return adjustedDoc = NO_MORE_DOCS;
                 } else {
                   pos = bs.nextSetBit(adjusted);
@@ -326,6 +326,7 @@ public class BitDocSet extends DocSetBas
               public long cost() {
                 // we don't want to actually compute cardinality, but
                 // if it's already been computed, we use it (pro-rated for the segment)
+                int maxDoc = max-base;
                 if (size != -1) {
                   return (long)(size * ((FixedBitSet.bits2words(maxDoc)<<6) / (float)bs.length()));
                 } else {
@@ -350,7 +351,7 @@ public class BitDocSet extends DocSetBas
 
               @Override
               public int length() {
-                return maxDoc;
+                return max-base;
               }
             };
           }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetCollector.java Fri Sep 18 15:13:49 2015
@@ -40,6 +40,10 @@ public class DocSetCollector extends Sim
   // in case there are only a few.
   final int[] scratch;
 
+  public DocSetCollector(int maxDoc) {
+    this(DocSetUtil.smallSetSize(maxDoc), maxDoc);
+  }
+
   public DocSetCollector(int smallSetSize, int maxDoc) {
     this.smallSetSize = smallSetSize;
     this.maxDoc = maxDoc;

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/DocSetUtil.java Fri Sep 18 15:13:49 2015
@@ -46,43 +46,16 @@ import org.apache.lucene.util.FixedBitSe
 /** @lucene.experimental */
 public class DocSetUtil {
 
-  private static DocSet createDocSetByIterator(SolrIndexSearcher searcher, Filter filter) throws IOException {
-    int maxDoc = searcher.getIndexReader().maxDoc();
-
-    Map fcontext = null;
-    if (filter instanceof SolrFilter) {
-      fcontext = ValueSource.newContext(searcher);
-      ((SolrFilter) filter).createWeight(fcontext, searcher);
-    }
-
-    DocSetCollector collector = new DocSetCollector((maxDoc >> 6) + 5, maxDoc);
-
-    for (LeafReaderContext readerContext : searcher.getIndexReader().getContext().leaves()) {
-      collector.doSetNextReader(readerContext);
-      Bits acceptDocs = readerContext.reader().getLiveDocs();
-
-      DocIdSet docIdSet = filter instanceof SolrFilter
-          ? ((SolrFilter) filter).getDocIdSet(fcontext, readerContext, acceptDocs)
-          : filter.getDocIdSet(readerContext, acceptDocs);
-
-      if (docIdSet == null) continue;
-      DocIdSetIterator iter = docIdSet.iterator();
-
-      for (;;) {
-        int id = iter.nextDoc();
-        if (id == DocIdSetIterator.NO_MORE_DOCS) {
-          break;
-        }
-        collector.collect(id);
-      }
-
-    }
-
-    return collector.getDocSet();
-
+  /** The cut-off point for small sets (SortedIntDocSet) vs large sets (BitDocSet) */
+  public static int smallSetSize(int maxDoc) {
+    return (maxDoc>>6)+5;  // The +5 is for better test coverage for small sets
   }
 
-  private static boolean equals(DocSet a, DocSet b) {
+  /**
+   * Iterates DocSets to test for equality - slow and for testing purposes only.
+   * @lucene.internal
+   */
+  public static boolean equals(DocSet a, DocSet b) {
     DocIterator iter1 = a.iterator();
     DocIterator iter2 = b.iterator();
 
@@ -129,7 +102,7 @@ public class DocSetUtil {
   public static DocSet createDocSetGeneric(SolrIndexSearcher searcher, Query query) throws IOException {
 
     int maxDoc = searcher.getIndexReader().maxDoc();
-    DocSetCollector collector = new DocSetCollector((maxDoc >> 6) + 5, maxDoc);
+    DocSetCollector collector = new DocSetCollector(maxDoc);
 
     // This may throw an ExitableDirectoryReader.ExitingReaderException
     // but we should not catch it here, as we don't know how this DocSet will be used (it could be negated before use) or cached.
@@ -141,7 +114,7 @@ public class DocSetUtil {
   public static DocSet createDocSet(SolrIndexSearcher searcher, Term term) throws IOException {
     DirectoryReader reader = searcher.getRawReader();  // raw reader to avoid extra wrapping overhead
     int maxDoc = searcher.getIndexReader().maxDoc();
-    int smallSetSize = (maxDoc >> 6) + 5;
+    int smallSetSize = smallSetSize(maxDoc);
 
 
     String field = term.field();
@@ -219,7 +192,7 @@ public class DocSetUtil {
 
     BitDocSet docSet = new BitDocSet( new FixedBitSet(bits, maxDoc), sz );
 
-    int smallSetSize = (maxDoc >> 6) + 5;
+    int smallSetSize = smallSetSize(maxDoc);
     if (sz < smallSetSize) {
       // make this optional?
       DocSet smallSet = toSmallSet( docSet );

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java Fri Sep 18 15:13:49 2015
@@ -1010,8 +1010,8 @@ public class ExtendedDismaxQParser exten
     }
     
     @Override
-    protected Query getBooleanQuery(List<BooleanClause> clauses, boolean disableCoord) throws SyntaxError {
-      Query q = super.getBooleanQuery(clauses, disableCoord);
+    protected Query getBooleanQuery(List<BooleanClause> clauses) throws SyntaxError {
+      Query q = super.getBooleanQuery(clauses);
       if (q != null) {
         q = QueryUtils.makeQueryable(q);
       }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/Grouping.java Fri Sep 18 15:13:49 2015
@@ -347,7 +347,7 @@ public class Grouping {
 
     DocSetCollector setCollector = null;
     if (getDocSet && allGroupHeadsCollector == null) {
-      setCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+      setCollector = new DocSetCollector(maxDoc);
       collectors.add(setCollector);
     }
     Collector allCollectors = MultiCollector.wrap(collectors);

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Fri Sep 18 15:13:49 2015
@@ -462,6 +462,10 @@ public class SolrIndexSearcher extends I
     return fieldNames;
   }
 
+  public SolrCache<Query,DocSet> getFilterCache() {
+    return filterCache;
+  }
+
   /**
    * Returns a collection of the names of all stored fields which can be
    * highlighted the index reader knows about.
@@ -919,12 +923,12 @@ public class SolrIndexSearcher extends I
       DocSet absAnswer = filterCache.get(absQ);
       if (absAnswer!=null) {
         if (positive) return absAnswer;
-        else return getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
+        else return getLiveDocs().andNot(absAnswer);
       }
     }
 
     DocSet absAnswer = getDocSetNC(absQ, null);
-    DocSet answer = positive ? absAnswer : getPositiveDocSet(matchAllDocsQuery).andNot(absAnswer);
+    DocSet answer = positive ? absAnswer : getLiveDocs().andNot(absAnswer);
 
     if (filterCache != null) {
       // cache negative queries as positive
@@ -948,7 +952,15 @@ public class SolrIndexSearcher extends I
   }
 
   private static Query matchAllDocsQuery = new MatchAllDocsQuery();
+  private BitDocSet liveDocs;
 
+  public BitDocSet getLiveDocs() throws IOException {
+    // going through the filter cache will provide thread safety here
+    if (liveDocs == null) {
+       liveDocs = getDocSetBits(matchAllDocsQuery);
+    }
+    return liveDocs;
+  }
 
   public static class ProcessedFilter {
     public DocSet answer;  // the answer, if non-null
@@ -967,7 +979,7 @@ public class SolrIndexSearcher extends I
   private DocSet getDocSetScore(List<Query> queries) throws IOException {
     Query main = queries.remove(0);
     ProcessedFilter pf = getProcessedFilter(null, queries);
-    DocSetCollector setCollector = new DocSetCollector(maxDoc()>>6, maxDoc());
+    DocSetCollector setCollector = new DocSetCollector(maxDoc());
     Collector collector = setCollector;
     if (pf.postFilter != null) {
       pf.postFilter.setLastDelegate(collector);
@@ -1014,7 +1026,7 @@ public class SolrIndexSearcher extends I
     if (pf.answer != null) return pf.answer;
 
 
-    DocSetCollector setCollector = new DocSetCollector(maxDoc()>>6, maxDoc());
+    DocSetCollector setCollector = new DocSetCollector(maxDoc());
     Collector collector = setCollector;
     if (pf.postFilter != null) {
       pf.postFilter.setLastDelegate(collector);
@@ -1129,7 +1141,7 @@ public class SolrIndexSearcher extends I
 
     // Are all of our normal cached filters negative?
     if (end > 0 && answer==null) {
-      answer = getPositiveDocSet(matchAllDocsQuery);
+      answer = getLiveDocs();
     }
 
     // do negative queries first to shrink set size
@@ -1152,7 +1164,7 @@ public class SolrIndexSearcher extends I
     } else {
       if (postFilters == null) {
         if (answer == null) {
-          answer = getPositiveDocSet(matchAllDocsQuery);
+          answer = getLiveDocs();
         }
         // "answer" is the only part of the filter, so set it.
         pf.answer = answer;
@@ -1187,7 +1199,7 @@ public class SolrIndexSearcher extends I
       if (result != null) return result;
     }
 
-    int smallSetSize = maxDoc()>>6;
+    int smallSetSize = DocSetUtil.smallSetSize(maxDoc());
     int scratchSize = Math.min(smallSetSize, largestPossible);
     if (deState.scratch == null || deState.scratch.length < scratchSize)
       deState.scratch = new int[scratchSize];
@@ -1715,7 +1727,6 @@ public class SolrIndexSearcher extends I
 
     boolean needScores = (cmd.getFlags() & GET_SCORES) != 0;
     int maxDoc = maxDoc();
-    int smallSetSize = maxDoc>>6;
 
     ProcessedFilter pf = getProcessedFilter(cmd.getFilter(), cmd.getFilterList());
     Query query = QueryUtils.makeQueryable(cmd.getQuery());
@@ -1731,7 +1742,7 @@ public class SolrIndexSearcher extends I
       final float[] topscore = new float[] { Float.NEGATIVE_INFINITY };
 
       Collector collector;
-      final DocSetCollector setCollector = new DocSetCollector(smallSetSize, maxDoc);
+      final DocSetCollector setCollector = new DocSetCollector(maxDoc);
 
        if (!needScores) {
          collector = setCollector;
@@ -1774,7 +1785,7 @@ public class SolrIndexSearcher extends I
     } else {
 
       final TopDocsCollector topCollector = buildTopDocsCollector(len, cmd);
-      DocSetCollector setCollector = new DocSetCollector(maxDoc>>6, maxDoc);
+      DocSetCollector setCollector = new DocSetCollector(maxDoc);
       Collector collector = MultiCollector.wrap(topCollector, setCollector);
 
       buildAndRunCollectorChain(qr, query, collector, cmd, pf.postFilter);
@@ -2151,7 +2162,7 @@ public class SolrIndexSearcher extends I
 
     // if both negative, we need to create a temp DocSet since we
     // don't have a counting method that takes three.
-    DocSet all = getPositiveDocSet(matchAllDocsQuery);
+    DocSet all = getLiveDocs();
 
     // -a -b == *:*.andNot(a).andNotSize(b) == *.*.andNotSize(a.union(b))
     // we use the last form since the intermediate DocSet should normally be smaller.

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/facet/BlockJoin.java Fri Sep 18 15:13:49 2015
@@ -26,6 +26,7 @@ import org.apache.solr.search.BitDocSet;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocSet;
 import org.apache.solr.search.DocSetCollector;
+import org.apache.solr.search.DocSetUtil;
 import org.apache.solr.search.QueryContext;
 
 /** @lucene.experimental */
@@ -36,7 +37,7 @@ public class BlockJoin {
    */
   public static DocSet toChildren(DocSet parentInput, BitDocSet parentList, DocSet acceptDocs, QueryContext qcontext) throws IOException {
     FixedBitSet parentBits = parentList.getBits();
-    DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc()>>6, qcontext.searcher().maxDoc());
+    DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc());
     DocIterator iter = parentInput.iterator();
     while (iter.hasNext()) {
       int parentDoc = iter.nextDoc();
@@ -56,7 +57,7 @@ public class BlockJoin {
   /** childInput may also contain parents (i.e. a parent or below will all roll up to that parent) */
   public static DocSet toParents(DocSet childInput, BitDocSet parentList, QueryContext qcontext) throws IOException {
     FixedBitSet parentBits = parentList.getBits();
-    DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc()>>6, qcontext.searcher().maxDoc());
+    DocSetCollector collector = new DocSetCollector(qcontext.searcher().maxDoc());
     DocIterator iter = childInput.iterator();
     int currentParent = -1;
     while (iter.hasNext()) {

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/grouping/CommandHandler.java Fri Sep 18 15:13:49 2015
@@ -190,7 +190,7 @@ public class CommandHandler {
   private DocSet computeDocSet(Query query, ProcessedFilter filter, List<Collector> collectors) throws IOException {
     int maxDoc = searcher.maxDoc();
     final Collector collector;
-    final DocSetCollector docSetCollector = new DocSetCollector(maxDoc >> 6, maxDoc);
+    final DocSetCollector docSetCollector = new DocSetCollector(maxDoc);
     List<Collector> allCollectors = new ArrayList<>(collectors);
     allCollectors.add(docSetCollector);
     searchWithTimeLimiter(query, filter, MultiCollector.wrap(allCollectors));

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/DefaultSimilarityFactory.java Fri Sep 18 15:13:49 2015
@@ -17,22 +17,22 @@ package org.apache.solr.search.similarit
  * limitations under the License.
  */
 
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.lucene.search.similarities.TFIDFSimilarity; // javadoc
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.schema.SimilarityFactory;
 
 /**
- * Factory for {@link DefaultSimilarity}
+ * Factory for {@link ClassicSimilarity}
  * <p>
- * DefaultSimilarity is Lucene's default scoring implementation, based
+ * ClassicSimilarity is Lucene's original scoring implementation, based
  * upon the Vector Space Model.
  * <p>
  * Optional settings:
  * <ul>
  *   <li>discountOverlaps (bool): Sets
- *       {@link DefaultSimilarity#setDiscountOverlaps(boolean)}</li>
+ *       {@link ClassicSimilarity#setDiscountOverlaps(boolean)}</li>
  * </ul>
  * @see TFIDFSimilarity
  * @lucene.experimental
@@ -40,13 +40,13 @@ import org.apache.solr.schema.Similarity
 public class DefaultSimilarityFactory extends SimilarityFactory {
 
   /** Init param name for specifying the value to use in 
-   * {@link DefaultSimilarity#setDiscountOverlaps(boolean)} 
+   * {@link ClassicSimilarity#setDiscountOverlaps(boolean)} 
    */
   public static final String DISCOUNT_OVERLAPS = "discountOverlaps";
 
   /** 
-   * Controls the value of {@link DefaultSimilarity#setDiscountOverlaps(boolean)} 
-   * on newly constructed instances of {@link DefaultSimilarity}
+   * Controls the value of {@link ClassicSimilarity#setDiscountOverlaps(boolean)} 
+   * on newly constructed instances of {@link ClassicSimilarity}
    */
   protected boolean discountOverlaps = true;
 
@@ -58,7 +58,7 @@ public class DefaultSimilarityFactory ex
 
   @Override
   public Similarity getSimilarity() {
-    DefaultSimilarity sim = new DefaultSimilarity();
+    ClassicSimilarity sim = new ClassicSimilarity();
     sim.setDiscountOverlaps(discountOverlaps);
     return sim;
   }

Modified: lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java?rev=1703881&r1=1703880&r2=1703881&view=diff
==============================================================================
--- lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java (original)
+++ lucene/dev/branches/lucene6780/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java Fri Sep 18 15:13:49 2015
@@ -17,7 +17,7 @@ package org.apache.solr.search.similarit
  * limitations under the License.
  */
 
-import org.apache.lucene.search.similarities.DefaultSimilarity;
+import org.apache.lucene.search.similarities.ClassicSimilarity;
 import org.apache.lucene.search.similarities.PerFieldSimilarityWrapper;
 import org.apache.lucene.search.similarities.Similarity;
 import org.apache.solr.common.params.SolrParams;
@@ -29,7 +29,7 @@ import org.apache.solr.util.plugin.SolrC
 /**
  * SimilarityFactory that returns a {@link PerFieldSimilarityWrapper}
  * that delegates to the field type, if it's configured, otherwise
- * {@link DefaultSimilarity}.
+ * {@link ClassicSimilarity}.
  *
  * <p>
  * <b>NOTE:</b> Users should be aware that in addition to supporting 
@@ -45,7 +45,7 @@ import org.apache.solr.util.plugin.SolrC
  */
 public class SchemaSimilarityFactory extends SimilarityFactory implements SolrCoreAware {
   private Similarity similarity;
-  private Similarity defaultSimilarity = new DefaultSimilarity();
+  private Similarity defaultSimilarity = new ClassicSimilarity();
   private volatile SolrCore core;
 
   @Override