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 2014/03/16 20:39:37 UTC

svn commit: r1578144 [26/37] - in /lucene/dev/branches/lucene5376_2: ./ dev-tools/ dev-tools/idea/.idea/libraries/ dev-tools/idea/solr/contrib/dataimporthandler/ dev-tools/idea/solr/contrib/map-reduce/ dev-tools/idea/solr/core/src/test/ dev-tools/scrip...

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Sun Mar 16 19:39:10 2014
@@ -17,21 +17,8 @@
 
 package org.apache.solr.handler.admin;
 
-import static org.apache.solr.common.cloud.DocCollection.DOC_ROUTER;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.concurrent.Future;
-
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Lists;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.index.DirectoryReader;
@@ -55,6 +42,7 @@ import org.apache.solr.common.params.Cor
 import org.apache.solr.common.params.ModifiableSolrParams;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.core.CloseHook;
@@ -75,14 +63,31 @@ import org.apache.solr.update.SplitIndex
 import org.apache.solr.update.UpdateLog;
 import org.apache.solr.update.processor.UpdateRequestProcessor;
 import org.apache.solr.update.processor.UpdateRequestProcessorChain;
+import org.apache.solr.util.DefaultSolrThreadFactory;
 import org.apache.solr.util.NumberUtils;
 import org.apache.solr.util.RefCounted;
 import org.apache.zookeeper.KeeperException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+
+import static org.apache.solr.common.cloud.DocCollection.DOC_ROUTER;
 
 /**
  *
@@ -91,6 +96,24 @@ import com.google.common.collect.Lists;
 public class CoreAdminHandler extends RequestHandlerBase {
   protected static Logger log = LoggerFactory.getLogger(CoreAdminHandler.class);
   protected final CoreContainer coreContainer;
+  protected static HashMap<String, Map<String, TaskObject>> requestStatusMap =
+      new HashMap<String,Map<String, TaskObject>>();
+
+  protected ExecutorService parallelExecutor = null;
+
+  protected static int MAX_TRACKED_REQUESTS = 100;
+  public static String RUNNING = "running";
+  public static String COMPLETED = "completed";
+  public static String FAILED = "failed";
+  public static String RESPONSE = "Response";
+  public static String RESPONSE_STATUS = "STATUS";
+  public static String RESPONSE_MESSAGE = "msg";
+
+  static {
+    requestStatusMap.put(RUNNING, Collections.synchronizedMap(new LinkedHashMap<String, TaskObject>()));
+    requestStatusMap.put(COMPLETED, Collections.synchronizedMap(new LinkedHashMap<String, TaskObject>()));
+    requestStatusMap.put(FAILED, Collections.synchronizedMap(new LinkedHashMap<String, TaskObject>()));
+  }
 
   public CoreAdminHandler() {
     super();
@@ -136,6 +159,18 @@ public class CoreAdminHandler extends Re
               "Core container instance missing");
     }
     //boolean doPersist = false;
+    String taskId = req.getParams().get("async");
+    TaskObject taskObject = new TaskObject(taskId);
+
+    if(taskId != null) {
+      // Put the tasks into the maps for tracking
+      if (getMap(RUNNING).containsKey(taskId) || getMap(COMPLETED).containsKey(taskId) || getMap(FAILED).containsKey(taskId)) {
+        throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+            "Duplicate request with the same requestid found.");
+      }
+
+      addTask(RUNNING, taskObject);
+    }
 
     // Pick the action
     SolrParams params = req.getParams();
@@ -147,6 +182,19 @@ public class CoreAdminHandler extends Re
         this.handleCustomAction(req, rsp);
       }
     }
+
+    if (taskId == null) {
+      handleRequestInternal(req, rsp, action);
+    } else {
+      ParallelCoreAdminHandlerThread parallelHandlerThread = new ParallelCoreAdminHandlerThread(req, rsp, action, taskObject);
+      if(parallelExecutor == null || parallelExecutor.isShutdown())
+        parallelExecutor = Executors.newFixedThreadPool(50,
+                  new DefaultSolrThreadFactory("parallelCoreAdminExecutor"));
+        parallelExecutor.execute(parallelHandlerThread);
+    }
+  }
+
+  protected void handleRequestInternal(SolrQueryRequest req, SolrQueryResponse rsp, CoreAdminAction action) throws Exception {
     if (action != null) {
       switch (action) {
         case CREATE: {
@@ -199,17 +247,17 @@ public class CoreAdminHandler extends Re
           this.handleWaitForStateAction(req, rsp);
           break;
         }
-        
+
         case REQUESTRECOVERY: {
           this.handleRequestRecoveryAction(req, rsp);
           break;
         }
-        
+
         case REQUESTSYNCSHARD: {
           this.handleRequestSyncAction(req, rsp);
           break;
         }
-        
+
         // todo : Can this be done by the regular RecoveryStrategy route?
         case REQUESTAPPLYUPDATES: {
           this.handleRequestApplyUpdatesAction(req, rsp);
@@ -219,6 +267,10 @@ public class CoreAdminHandler extends Re
           this.handleRequestBufferUpdatesAction(req, rsp);
           break;
         }
+        case REQUESTSTATUS: {
+          this.handleRequestActionStatus(req, rsp);
+          break;
+        }
         case OVERSEEROP:{
           ZkController zkController = coreContainer.getZkController();
           if(zkController != null){
@@ -240,7 +292,7 @@ public class CoreAdminHandler extends Re
     rsp.setHttpCaching(false);
   }
 
-  
+
   /**
    * Handle the core admin SPLIT action.
    */
@@ -255,7 +307,7 @@ public class CoreAdminHandler extends Re
       if (rangesArr.length == 0) {
         throw new SolrException(ErrorCode.BAD_REQUEST, "There must be at least one range specified to split an index");
       } else  {
-        ranges = new ArrayList<DocRouter.Range>(rangesArr.length);
+        ranges = new ArrayList<>(rangesArr.length);
         for (String r : rangesArr) {
           try {
             ranges.add(DocRouter.DEFAULT.fromString(r));
@@ -304,7 +356,7 @@ public class CoreAdminHandler extends Re
       }
 
       if (pathsArr == null) {
-        newCores = new ArrayList<SolrCore>(partitions);
+        newCores = new ArrayList<>(partitions);
         for (String newCoreName : newCoreNames) {
           SolrCore newcore = coreContainer.getCore(newCoreName);
           if (newcore != null) {
@@ -705,7 +757,7 @@ public class CoreAdminHandler extends Re
     String indexInfo = params.get(CoreAdminParams.INDEX_INFO);
     boolean isIndexInfoNeeded = Boolean.parseBoolean(null == indexInfo ? "true" : indexInfo);
     boolean doPersist = false;
-    NamedList<Object> status = new SimpleOrderedMap<Object>();
+    NamedList<Object> status = new SimpleOrderedMap<>();
     Map<String,Exception> allFailures = coreContainer.getCoreInitFailures();
     try {
       if (cname == null) {
@@ -755,6 +807,28 @@ public class CoreAdminHandler extends Re
   }
 
   /**
+   * Handle "REQUESTSTATUS" action
+   */
+  protected void handleRequestActionStatus(SolrQueryRequest req, SolrQueryResponse rsp) {
+    SolrParams params = req.getParams();
+    String requestId = params.get(CoreAdminParams.REQUESTID);
+    log.info("Checking request status for : " + requestId);
+
+    if (mapContainsTask(RUNNING, requestId)) {
+      rsp.add(RESPONSE_STATUS, RUNNING);
+    } else if(mapContainsTask(COMPLETED, requestId)) {
+      rsp.add(RESPONSE_STATUS, COMPLETED);
+      rsp.add(RESPONSE, getMap(COMPLETED).get(requestId).getRspObject());
+    } else if(mapContainsTask(FAILED, requestId)) {
+      rsp.add(RESPONSE_STATUS, FAILED);
+      rsp.add(RESPONSE, getMap(FAILED).get(requestId).getRspObject());
+    } else {
+      rsp.add(RESPONSE_STATUS, "notfound");
+      rsp.add(RESPONSE_MESSAGE, "No task found in running, completed or failed tasks");
+    }
+  }
+
+  /**
    * Handle "SWAP" action
    */
   protected void handleSwapAction(SolrQueryRequest req, SolrQueryResponse rsp) {
@@ -832,7 +906,7 @@ public class CoreAdminHandler extends Re
       if (core != null) {
         syncStrategy = new SyncStrategy(core.getCoreDescriptor().getCoreContainer());
         
-        Map<String,Object> props = new HashMap<String,Object>();
+        Map<String,Object> props = new HashMap<>();
         props.put(ZkStateReader.BASE_URL_PROP, zkController.getBaseUrl());
         props.put(ZkStateReader.CORE_NAME_PROP, cname);
         props.put(ZkStateReader.NODE_NAME_PROP, zkController.getNodeName());
@@ -1077,7 +1151,7 @@ public class CoreAdminHandler extends Re
    * @throws IOException - LukeRequestHandler can throw an I/O exception
    */
   protected NamedList<Object> getCoreStatus(CoreContainer cores, String cname, boolean isIndexInfoNeeded)  throws IOException {
-    NamedList<Object> info = new SimpleOrderedMap<Object>();
+    NamedList<Object> info = new SimpleOrderedMap<>();
 
     if (!cores.isLoaded(cname)) { // Lazily-loaded core, fill in what we can.
       // It would be a real mistake to load the cores just to get the status
@@ -1172,4 +1246,123 @@ public class CoreAdminHandler extends Re
   public String getSource() {
     return "$URL$";
   }
+
+  /**
+   * Class to implement multi-threaded CoreAdminHandler behaviour.
+   * This accepts all of the context from handleRequestBody.
+   */
+  protected class ParallelCoreAdminHandlerThread implements Runnable {
+    SolrQueryRequest req;
+    SolrQueryResponse rsp;
+    CoreAdminAction action;
+    TaskObject taskObject;
+
+    public ParallelCoreAdminHandlerThread (SolrQueryRequest req, SolrQueryResponse rsp,
+                                           CoreAdminAction action, TaskObject taskObject){
+      this.req = req;
+      this.rsp = rsp;
+      this.action = action;
+      this.taskObject = taskObject;
+    }
+
+    public void run() {
+      boolean exceptionCaught = false;
+      try {
+        handleRequestInternal(req, rsp, action);
+        taskObject.setRspObject(rsp);
+      } catch (Exception e) {
+        exceptionCaught = true;
+        taskObject.setRspObjectFromException(e);
+      } finally {
+        removeTask("running", taskObject.taskId);
+        if(exceptionCaught) {
+          addTask("failed", taskObject, true);
+        } else
+          addTask("completed", taskObject, true);
+      }
+
+    }
+
+  }
+
+  /**
+   * Helper class to manage the tasks to be tracked.
+   * This contains the taskId, request and the response (if available).
+   */
+  private class TaskObject {
+    String taskId;
+    String rspInfo;
+
+    public TaskObject(String taskId) {
+      this.taskId = taskId;
+    }
+
+    public String getRspObject() {
+      return rspInfo;
+    }
+
+    public void setRspObject(SolrQueryResponse rspObject) {
+      this.rspInfo = rspObject.getToLogAsString("TaskId: " + this.taskId + " ");
+    }
+
+    public void setRspObjectFromException(Exception e) {
+      this.rspInfo = e.getMessage();
+    }
+  }
+
+  /**
+   * Helper method to add a task to a tracking map.
+   */
+  protected void addTask(String map, TaskObject o, boolean limit) {
+    if(limit && getMap(map).size() == MAX_TRACKED_REQUESTS) {
+      String key = getMap(map).entrySet().iterator().next().getKey();
+      getMap(map).remove(key);
+    }
+    addTask(map, o);
+  }
+
+
+  protected void addTask(String map, TaskObject o) {
+    synchronized (getMap(map)) {
+      getMap(map).put(o.taskId, o);
+    }
+  }
+
+  /**
+   * Helper method to remove a task from a tracking map.
+   */
+  protected void removeTask(String map, String taskId) {
+    synchronized (getMap(map)) {
+      getMap(map).remove(taskId);
+    }
+  }
+
+  /**
+   * Helper method to check if a map contains a taskObject with the given taskId.
+   */
+  protected boolean mapContainsTask(String map, String taskId) {
+    return getMap(map).containsKey(taskId);
+  }
+
+  /**
+   * Helper method to get a TaskObject given a map and a taskId.
+   */
+  protected TaskObject getTask(String map, String taskId) {
+    return getMap(map).get(taskId);
+  }
+
+  /**
+   * Helper method to get a request status map given the name.
+   */
+  private Map<String, TaskObject> getMap(String map) {
+    return requestStatusMap.get(map);
+  }
+
+  /**
+   * Method to ensure shutting down of the ThreadPool Executor.
+   */
+  public void shutdown() {
+    if (parallelExecutor != null && !parallelExecutor.isShutdown())
+      ExecutorUtil.shutdownAndAwaitTermination(parallelExecutor);
+  }
 }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LoggingHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LoggingHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LoggingHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LoggingHandler.java Sun Mar 16 19:39:10 2014
@@ -118,7 +118,7 @@ public class LoggingHandler extends Requ
         return;
       }
       else {
-        SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
         if(time>0) {
           info.add("since", time);
           info.add("found", found);
@@ -137,10 +137,10 @@ public class LoggingHandler extends Requ
     else {
       rsp.add("levels", watcher.getAllLevels());
   
-      List<LoggerInfo> loggers = new ArrayList<LoggerInfo>(watcher.getAllLoggers());
+      List<LoggerInfo> loggers = new ArrayList<>(watcher.getAllLoggers());
       Collections.sort(loggers);
   
-      List<SimpleOrderedMap<?>> info = new ArrayList<SimpleOrderedMap<?>>();
+      List<SimpleOrderedMap<?>> info = new ArrayList<>();
       for(LoggerInfo wrap:loggers) {
         info.add(wrap.getInfo());
       }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/LukeRequestHandler.java Sun Mar 16 19:39:10 2014
@@ -147,7 +147,7 @@ public class LukeRequestHandler extends 
 
       SimpleOrderedMap<Object> info = getDocumentFieldsInfo( doc, docId, reader, schema );
 
-      SimpleOrderedMap<Object> docinfo = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> docinfo = new SimpleOrderedMap<>();
       docinfo.add( "docId", docId );
       docinfo.add( "lucene", info );
       docinfo.add( "solr", doc );
@@ -161,7 +161,7 @@ public class LukeRequestHandler extends 
     }
 
     // Add some generally helpful information
-    NamedList<Object> info = new SimpleOrderedMap<Object>();
+    NamedList<Object> info = new SimpleOrderedMap<>();
     info.add( "key", getFieldFlagsKey() );
     info.add( "NOTE", "Document Frequency (df) is not updated when a document is marked for deletion.  df values include deleted documents." );
     rsp.add( "info", info );
@@ -241,7 +241,7 @@ public class LukeRequestHandler extends 
    * @return a key to what each character means
    */
   public static SimpleOrderedMap<String> getFieldFlagsKey() {
-    SimpleOrderedMap<String> key = new SimpleOrderedMap<String>();
+    SimpleOrderedMap<String> key = new SimpleOrderedMap<>();
     for (FieldFlag f : FieldFlag.values()) {
       key.add(String.valueOf(f.getAbbreviation()), f.getDisplay() );
     }
@@ -252,10 +252,10 @@ public class LukeRequestHandler extends 
                                                                  IndexSchema schema ) throws IOException
   {
     final CharsRef spare = new CharsRef();
-    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<>();
     for( Object o : doc.getFields() ) {
       Field field = (Field)o;
-      SimpleOrderedMap<Object> f = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> f = new SimpleOrderedMap<>();
 
       SchemaField sfield = schema.getFieldOrNull( field.name() );
       FieldType ftype = (sfield==null)?null:sfield.getType();
@@ -283,7 +283,7 @@ public class LukeRequestHandler extends 
         try {
           Terms v = reader.getTermVector( docId, field.name() );
           if( v != null ) {
-            SimpleOrderedMap<Integer> tfv = new SimpleOrderedMap<Integer>();
+            SimpleOrderedMap<Integer> tfv = new SimpleOrderedMap<>();
             final TermsEnum termsEnum = v.iterator(null);
             BytesRef text;
             while((text = termsEnum.next()) != null) {
@@ -313,27 +313,27 @@ public class LukeRequestHandler extends 
     Set<String> fields = null;
     String fl = params.get(CommonParams.FL);
     if (fl != null) {
-      fields = new TreeSet<String>(Arrays.asList(fl.split( "[,\\s]+" )));
+      fields = new TreeSet<>(Arrays.asList(fl.split( "[,\\s]+" )));
     }
 
     AtomicReader reader = searcher.getAtomicReader();
     IndexSchema schema = searcher.getSchema();
 
     // Don't be tempted to put this in the loop below, the whole point here is to alphabetize the fields!
-    Set<String> fieldNames = new TreeSet<String>();
+    Set<String> fieldNames = new TreeSet<>();
     for(FieldInfo fieldInfo : reader.getFieldInfos()) {
       fieldNames.add(fieldInfo.name);
     }
 
     // Walk the term enum and keep a priority queue for each map in our set
-    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<>();
 
     for (String fieldName : fieldNames) {
       if (fields != null && ! fields.contains(fieldName) && ! fields.contains("*")) {
         continue; //we're not interested in this field Still an issue here
       }
 
-      SimpleOrderedMap<Object> fieldMap = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> fieldMap = new SimpleOrderedMap<>();
 
       SchemaField sfield = schema.getFieldOrNull( fieldName );
       FieldType ftype = (sfield==null)?null:sfield.getType();
@@ -408,21 +408,21 @@ public class LukeRequestHandler extends 
    * Return info from the index
    */
   private static SimpleOrderedMap<Object> getSchemaInfo( IndexSchema schema ) {
-    Map<String, List<String>> typeusemap = new TreeMap<String, List<String>>();
-    Map<String, Object> fields = new TreeMap<String, Object>();
+    Map<String, List<String>> typeusemap = new TreeMap<>();
+    Map<String, Object> fields = new TreeMap<>();
     SchemaField uniqueField = schema.getUniqueKeyField();
     for( SchemaField f : schema.getFields().values() ) {
       populateFieldInfo(schema, typeusemap, fields, uniqueField, f);
     }
 
-    Map<String, Object> dynamicFields = new TreeMap<String, Object>();
+    Map<String, Object> dynamicFields = new TreeMap<>();
     for (SchemaField f : schema.getDynamicFieldPrototypes()) {
       populateFieldInfo(schema, typeusemap, dynamicFields, uniqueField, f);
     }
-    SimpleOrderedMap<Object> types = new SimpleOrderedMap<Object>();
-    Map<String, FieldType> sortedTypes = new TreeMap<String, FieldType>(schema.getFieldTypes());
+    SimpleOrderedMap<Object> types = new SimpleOrderedMap<>();
+    Map<String, FieldType> sortedTypes = new TreeMap<>(schema.getFieldTypes());
     for( FieldType ft : sortedTypes.values() ) {
-      SimpleOrderedMap<Object> field = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> field = new SimpleOrderedMap<>();
       field.add("fields", typeusemap.get( ft.getTypeName() ) );
       field.add("tokenized", ft.isTokenized() );
       field.add("className", ft.getClass().getName());
@@ -433,15 +433,15 @@ public class LukeRequestHandler extends 
     }
 
     // Must go through this to maintain binary compatbility. Putting a TreeMap into a resp leads to casting errors
-    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> finfo = new SimpleOrderedMap<>();
 
-    SimpleOrderedMap<Object> fieldsSimple = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> fieldsSimple = new SimpleOrderedMap<>();
     for (Map.Entry<String, Object> ent : fields.entrySet()) {
       fieldsSimple.add(ent.getKey(), ent.getValue());
     }
     finfo.add("fields", fieldsSimple);
 
-    SimpleOrderedMap<Object> dynamicSimple = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> dynamicSimple = new SimpleOrderedMap<>();
     for (Map.Entry<String, Object> ent : dynamicFields.entrySet()) {
       dynamicSimple.add(ent.getKey(), ent.getValue());
     }
@@ -455,7 +455,7 @@ public class LukeRequestHandler extends 
   }
 
   private static SimpleOrderedMap<Object> getSimilarityInfo(Similarity similarity) {
-    SimpleOrderedMap<Object> toReturn = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> toReturn = new SimpleOrderedMap<>();
     if (similarity != null) {
       toReturn.add("className", similarity.getClass().getName());
       toReturn.add("details", similarity.toString());
@@ -464,16 +464,16 @@ public class LukeRequestHandler extends 
   }
 
   private static SimpleOrderedMap<Object> getAnalyzerInfo(Analyzer analyzer) {
-    SimpleOrderedMap<Object> aninfo = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> aninfo = new SimpleOrderedMap<>();
     aninfo.add("className", analyzer.getClass().getName());
     if (analyzer instanceof TokenizerChain) {
 
       TokenizerChain tchain = (TokenizerChain)analyzer;
 
       CharFilterFactory[] cfiltfacs = tchain.getCharFilterFactories();
-      SimpleOrderedMap<Map<String, Object>> cfilters = new SimpleOrderedMap<Map<String, Object>>();
+      SimpleOrderedMap<Map<String, Object>> cfilters = new SimpleOrderedMap<>();
       for (CharFilterFactory cfiltfac : cfiltfacs) {
-        Map<String, Object> tok = new HashMap<String, Object>();
+        Map<String, Object> tok = new HashMap<>();
         String className = cfiltfac.getClass().getName();
         tok.put("className", className);
         tok.put("args", cfiltfac.getOriginalArgs());
@@ -483,16 +483,16 @@ public class LukeRequestHandler extends 
         aninfo.add("charFilters", cfilters);
       }
 
-      SimpleOrderedMap<Object> tokenizer = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> tokenizer = new SimpleOrderedMap<>();
       TokenizerFactory tfac = tchain.getTokenizerFactory();
       tokenizer.add("className", tfac.getClass().getName());
       tokenizer.add("args", tfac.getOriginalArgs());
       aninfo.add("tokenizer", tokenizer);
 
       TokenFilterFactory[] filtfacs = tchain.getTokenFilterFactories();
-      SimpleOrderedMap<Map<String, Object>> filters = new SimpleOrderedMap<Map<String, Object>>();
+      SimpleOrderedMap<Map<String, Object>> filters = new SimpleOrderedMap<>();
       for (TokenFilterFactory filtfac : filtfacs) {
-        Map<String, Object> tok = new HashMap<String, Object>();
+        Map<String, Object> tok = new HashMap<>();
         String className = filtfac.getClass().getName();
         tok.put("className", className);
         tok.put("args", filtfac.getOriginalArgs());
@@ -509,7 +509,7 @@ public class LukeRequestHandler extends 
                                         Map<String, List<String>> typeusemap, Map<String, Object> fields,
                                         SchemaField uniqueField, SchemaField f) {
     FieldType ft = f.getType();
-    SimpleOrderedMap<Object> field = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> field = new SimpleOrderedMap<>();
     field.add( "type", ft.getTypeName() );
     field.add( "flags", getFieldFlags(f) );
     if( f.isRequired() ) {
@@ -532,7 +532,7 @@ public class LukeRequestHandler extends 
 
     List<String> v = typeusemap.get( ft.getTypeName() );
     if( v == null ) {
-      v = new ArrayList<String>();
+      v = new ArrayList<>();
     }
     v.add( f.getName() );
     typeusemap.put( ft.getTypeName(), v );
@@ -550,7 +550,7 @@ public class LukeRequestHandler extends 
 
   public static SimpleOrderedMap<Object> getIndexInfo(DirectoryReader reader) throws IOException {
     Directory dir = reader.directory();
-    SimpleOrderedMap<Object> indexInfo = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> indexInfo = new SimpleOrderedMap<>();
 
     indexInfo.add("numDocs", reader.numDocs());
     indexInfo.add("maxDoc", reader.maxDoc());
@@ -638,14 +638,14 @@ public class LukeRequestHandler extends 
   }
 
   private static List<String> toListOfStrings(SchemaField[] raw) {
-    List<String> result = new ArrayList<String>(raw.length);
+    List<String> result = new ArrayList<>(raw.length);
     for (SchemaField f : raw) {
       result.add(f.getName());
     }
     return result;
   }
   private static List<String> toListOfStringDests(List<CopyField> raw) {
-    List<String> result = new ArrayList<String>(raw.size());
+    List<String> result = new ArrayList<>(raw.size());
     for (CopyField f : raw) {
       result.add(f.getDestination().getName());
     }
@@ -689,7 +689,7 @@ public class LukeRequestHandler extends 
     // TODO? should this be a list or a map?
     public NamedList<Integer> toNamedList()
     {
-      NamedList<Integer> nl = new NamedList<Integer>();
+      NamedList<Integer> nl = new NamedList<>();
       for( int bucket = 0; bucket <= _maxBucket; bucket++ ) {
         nl.add( ""+ (1 << bucket), _buckets[bucket] );
       }
@@ -733,12 +733,12 @@ public class LukeRequestHandler extends 
     public NamedList<Integer> toNamedList( IndexSchema schema )
     {
       // reverse the list..
-      List<TermInfo> aslist = new LinkedList<TermInfo>();
+      List<TermInfo> aslist = new LinkedList<>();
       while( size() > 0 ) {
         aslist.add( 0, (TermInfo)pop() );
       }
 
-      NamedList<Integer> list = new NamedList<Integer>();
+      NamedList<Integer> list = new NamedList<>();
       for (TermInfo i : aslist) {
         String txt = i.term.text();
         SchemaField ft = schema.getFieldOrNull( i.term.field() );

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PluginInfoHandler.java Sun Mar 16 19:39:10 2014
@@ -46,10 +46,10 @@ public class PluginInfoHandler extends R
   
   private static SimpleOrderedMap<Object> getSolrInfoBeans( SolrCore core, boolean stats )
   {
-    SimpleOrderedMap<Object> list = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> list = new SimpleOrderedMap<>();
     for (SolrInfoMBean.Category cat : SolrInfoMBean.Category.values()) 
     {
-      SimpleOrderedMap<Object> category = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> category = new SimpleOrderedMap<>();
       list.add( cat.name(), category );
       Map<String, SolrInfoMBean> reg = core.getInfoRegistry();
       for (Map.Entry<String,SolrInfoMBean> entry : reg.entrySet()) {
@@ -57,7 +57,7 @@ public class PluginInfoHandler extends R
         if (m.getCategory() != cat) continue;
 
         String na = "Not Declared";
-        SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
         category.add( entry.getKey(), info );
 
         info.add( "name",        (m.getName()       !=null ? m.getName()        : na) );
@@ -67,7 +67,7 @@ public class PluginInfoHandler extends R
 
         URL[] urls = m.getDocs();
         if ((urls != null) && (urls.length > 0)) {
-          ArrayList<String> docs = new ArrayList<String>(urls.length);
+          ArrayList<String> docs = new ArrayList<>(urls.length);
           for( URL u : urls ) {
             docs.add( u.toExternalForm() );
           }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/PropertiesRequestHandler.java Sun Mar 16 19:39:10 2014
@@ -36,7 +36,7 @@ public class PropertiesRequestHandler ex
     Object props = null;
     String name = req.getParams().get( "name" );
     if( name != null ) {
-      NamedList<String> p = new SimpleOrderedMap<String>();
+      NamedList<String> p = new SimpleOrderedMap<>();
       p.add( name, System.getProperty(name) );
       props = p;
     }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ShowFileRequestHandler.java Sun Mar 16 19:39:10 2014
@@ -113,7 +113,7 @@ public class ShowFileRequestHandler exte
 
   public static Set<String> initHidden(SolrParams invariants) {
 
-    Set<String> hiddenRet = new HashSet<String>();
+    Set<String> hiddenRet = new HashSet<>();
     // Build a list of hidden files
     if (invariants != null) {
       String[] hidden = invariants.getParams(HIDDEN);
@@ -155,13 +155,13 @@ public class ShowFileRequestHandler exte
     List<String> children = zkClient.getChildren(adminFile, null, true);
     if (children.size() > 0) {
       
-      NamedList<SimpleOrderedMap<Object>> files = new SimpleOrderedMap<SimpleOrderedMap<Object>>();
+      NamedList<SimpleOrderedMap<Object>> files = new SimpleOrderedMap<>();
       for (String f : children) {
         if (isHiddenFile(req, rsp, f, false, hiddenFiles)) {
           continue;
         }
 
-        SimpleOrderedMap<Object> fileInfo = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> fileInfo = new SimpleOrderedMap<>();
         files.add(f, fileInfo);
         List<String> fchildren = zkClient.getChildren(adminFile + "/" + f, null, true);
         if (fchildren.size() > 0) {
@@ -216,7 +216,7 @@ public class ShowFileRequestHandler exte
     if( adminFile.isDirectory() ) {
       // it's really a directory, just go for it.
       int basePath = adminFile.getAbsolutePath().length() + 1;
-      NamedList<SimpleOrderedMap<Object>> files = new SimpleOrderedMap<SimpleOrderedMap<Object>>();
+      NamedList<SimpleOrderedMap<Object>> files = new SimpleOrderedMap<>();
       for( File f : adminFile.listFiles() ) {
         String path = f.getAbsolutePath().substring( basePath );
         path = path.replace( '\\', '/' ); // normalize slashes
@@ -225,7 +225,7 @@ public class ShowFileRequestHandler exte
           continue;
         }
 
-        SimpleOrderedMap<Object> fileInfo = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> fileInfo = new SimpleOrderedMap<>();
         files.add( path, fileInfo );
         if( f.isDirectory() ) {
           fileInfo.add( "directory", true ); 

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SolrInfoMBeanHandler.java Sun Mar 16 19:39:10 2014
@@ -52,7 +52,7 @@ public class SolrInfoMBeanHandler extend
    * Set is guarantee to never be null (but may be empty)
    */
   private Set<String> arrayToSet(Object[] arr) {
-    HashSet<String> r = new HashSet<String>();
+    HashSet<String> r = new HashSet<>();
     if (null == arr) return r;
     for (Object o : arr) {
       if (null != o) r.add(o.toString());
@@ -114,7 +114,7 @@ public class SolrInfoMBeanHandler extend
   
   protected NamedList<NamedList<NamedList<Object>>> getMBeanInfo(SolrQueryRequest req) {
 
-    NamedList<NamedList<NamedList<Object>>> cats = new NamedList<NamedList<NamedList<Object>>>();
+    NamedList<NamedList<NamedList<Object>>> cats = new NamedList<>();
     
     String[] requestedCats = req.getParams().getParams("cat");
     if (null == requestedCats || 0 == requestedCats.length) {
@@ -139,7 +139,7 @@ public class SolrInfoMBeanHandler extend
       NamedList<NamedList<Object>> catInfo = cats.get(m.getCategory().name());
       if ( null == catInfo ) continue;
 
-      NamedList<Object> mBeanInfo = new SimpleOrderedMap<Object>();
+      NamedList<Object> mBeanInfo = new SimpleOrderedMap<>();
       mBeanInfo.add("class", m.getName());
       mBeanInfo.add("version", m.getVersion());
       mBeanInfo.add("description", m.getDescription());
@@ -148,7 +148,7 @@ public class SolrInfoMBeanHandler extend
       // Use an external form
       URL[] urls = m.getDocs();
       if(urls!=null) {
-        List<String> docs = new ArrayList<String>(urls.length);
+        List<String> docs = new ArrayList<>(urls.length);
         for(URL url : urls) {
           docs.add(url.toExternalForm());
         }
@@ -168,7 +168,7 @@ public class SolrInfoMBeanHandler extend
       NamedList<NamedList<NamedList<Object>>> now,
       boolean includeAll ) {
     
-    NamedList<NamedList<NamedList<Object>>> changed = new NamedList<NamedList<NamedList<Object>>>();
+    NamedList<NamedList<NamedList<Object>>> changed = new NamedList<>();
     
     // Cycle through each category
     for(int i=0;i<ref.size();i++) {
@@ -182,7 +182,7 @@ public class SolrInfoMBeanHandler extend
           // Something in the category changed
           // Now iterate the real beans
           
-          NamedList<NamedList<Object>> cat = new SimpleOrderedMap<NamedList<Object>>();
+          NamedList<NamedList<Object>> cat = new SimpleOrderedMap<>();
           for(int j=0;j<ref_cat.size();j++) {
             String name = ref_cat.getName(j);
             NamedList<Object> ref_bean = ref_cat.get(name);

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/SystemInfoHandler.java Sun Mar 16 19:39:10 2014
@@ -112,7 +112,7 @@ public class SystemInfoHandler extends R
    * Get system info
    */
   private SimpleOrderedMap<Object> getCoreInfo( SolrCore core, IndexSchema schema ) {
-    SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
     
     info.add( "schema", schema != null ? schema.getSchemaName():"no schema!" );
     
@@ -126,7 +126,7 @@ public class SystemInfoHandler extends R
     info.add( "start", new Date(core.getStartTime()) );
 
     // Solr Home
-    SimpleOrderedMap<Object> dirs = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> dirs = new SimpleOrderedMap<>();
     dirs.add( "cwd" , new File( System.getProperty("user.dir")).getAbsolutePath() );
     dirs.add( "instance", new File( core.getResourceLoader().getInstanceDir() ).getAbsolutePath() );
     try {
@@ -150,7 +150,7 @@ public class SystemInfoHandler extends R
    * Get system info
    */
   public static SimpleOrderedMap<Object> getSystemInfo() {
-    SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
     
     OperatingSystemMXBean os = ManagementFactory.getOperatingSystemMXBean();
     info.add( "name", os.getName() );
@@ -240,7 +240,7 @@ public class SystemInfoHandler extends R
    */
   public static SimpleOrderedMap<Object> getJvmInfo()
   {
-    SimpleOrderedMap<Object> jvm = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> jvm = new SimpleOrderedMap<>();
 
     final String javaVersion = System.getProperty("java.specification.version", "unknown"); 
     final String javaVendor = System.getProperty("java.specification.vendor", "unknown"); 
@@ -256,16 +256,16 @@ public class SystemInfoHandler extends R
     jvm.add( "name", jreVendor + " " + vmName );
     
     // details
-    SimpleOrderedMap<Object> java = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> java = new SimpleOrderedMap<>();
     java.add( "vendor", javaVendor );
     java.add( "name", javaName );
     java.add( "version", javaVersion );
     jvm.add( "spec", java );
-    SimpleOrderedMap<Object> jre = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> jre = new SimpleOrderedMap<>();
     jre.add( "vendor", jreVendor );
     jre.add( "version", jreVersion );
     jvm.add( "jre", jre );
-    SimpleOrderedMap<Object> vm = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> vm = new SimpleOrderedMap<>();
     vm.add( "vendor", vmVendor );
     vm.add( "name", vmName );
     vm.add( "version", vmVersion );
@@ -278,8 +278,8 @@ public class SystemInfoHandler extends R
     // not thread safe, but could be thread local
     DecimalFormat df = new DecimalFormat("#.#", DecimalFormatSymbols.getInstance(Locale.ROOT));
 
-    SimpleOrderedMap<Object> mem = new SimpleOrderedMap<Object>();
-    SimpleOrderedMap<Object> raw = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> mem = new SimpleOrderedMap<>();
+    SimpleOrderedMap<Object> raw = new SimpleOrderedMap<>();
     long free = runtime.freeMemory();
     long max = runtime.maxMemory();
     long total = runtime.totalMemory();
@@ -300,7 +300,7 @@ public class SystemInfoHandler extends R
     jvm.add("memory", mem);
 
     // JMX properties -- probably should be moved to a different handler
-    SimpleOrderedMap<Object> jmx = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> jmx = new SimpleOrderedMap<>();
     try{
       RuntimeMXBean mx = ManagementFactory.getRuntimeMXBean();
       jmx.add( "bootclasspath", mx.getBootClassPath());
@@ -322,7 +322,7 @@ public class SystemInfoHandler extends R
   }
   
   private static SimpleOrderedMap<Object> getLuceneInfo() {
-    SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
 
     Package p = SolrCore.class.getPackage();
 

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/admin/ThreadDumpHandler.java Sun Mar 16 19:39:10 2014
@@ -38,13 +38,13 @@ public class ThreadDumpHandler extends R
   @Override
   public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws IOException 
   {    
-    SimpleOrderedMap<Object> system = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> system = new SimpleOrderedMap<>();
     rsp.add( "system", system );
 
     ThreadMXBean tmbean = ManagementFactory.getThreadMXBean();
     
     // Thread Count
-    SimpleOrderedMap<Object> nl = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> nl = new SimpleOrderedMap<>();
     nl.add( "current",tmbean.getThreadCount() );
     nl.add( "peak", tmbean.getPeakThreadCount() );
     nl.add( "daemon", tmbean.getDaemonThreadCount() );
@@ -55,7 +55,7 @@ public class ThreadDumpHandler extends R
     long[] tids = tmbean.findMonitorDeadlockedThreads();
     if (tids != null) {
       tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
-      NamedList<SimpleOrderedMap<Object>> lst = new NamedList<SimpleOrderedMap<Object>>();
+      NamedList<SimpleOrderedMap<Object>> lst = new NamedList<>();
       for (ThreadInfo ti : tinfos) {
         if (ti != null) {
           lst.add( "thread", getThreadInfo( ti, tmbean ) );
@@ -67,7 +67,7 @@ public class ThreadDumpHandler extends R
     // Now show all the threads....
     tids = tmbean.getAllThreadIds();
     tinfos = tmbean.getThreadInfo(tids, Integer.MAX_VALUE);
-    NamedList<SimpleOrderedMap<Object>> lst = new NamedList<SimpleOrderedMap<Object>>();
+    NamedList<SimpleOrderedMap<Object>> lst = new NamedList<>();
     for (ThreadInfo ti : tinfos) {
       if (ti != null) {
         lst.add( "thread", getThreadInfo( ti, tmbean ) );
@@ -81,7 +81,7 @@ public class ThreadDumpHandler extends R
   //--------------------------------------------------------------------------------
   
   private static SimpleOrderedMap<Object> getThreadInfo( ThreadInfo ti, ThreadMXBean tmbean ) {
-    SimpleOrderedMap<Object> info = new SimpleOrderedMap<Object>();
+    SimpleOrderedMap<Object> info = new SimpleOrderedMap<>();
     long tid = ti.getThreadId();
 
     info.add( "id", tid );
@@ -104,7 +104,7 @@ public class ThreadDumpHandler extends R
     }
 
     if (ti.getLockOwnerName() != null) {
-      SimpleOrderedMap<Object> owner = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> owner = new SimpleOrderedMap<>();
       owner.add( "name", ti.getLockOwnerName() );
       owner.add( "id", ti.getLockOwnerId() );
     }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java Sun Mar 16 19:39:10 2014
@@ -106,7 +106,7 @@ public class DebugComponent extends Sear
       if (null != rb.getDebugInfo() ) {
         if (rb.isDebugQuery() && null != rb.getFilters() ) {
           info.add("filter_queries",rb.req.getParams().getParams(FQ));
-          List<String> fqs = new ArrayList<String>(rb.getFilters().size());
+          List<String> fqs = new ArrayList<>(rb.getFilters().size());
           for (Query fq : rb.getFilters()) {
             fqs.add(QueryParsing.toString(fq, rb.req.getSchema()));
           }
@@ -175,7 +175,7 @@ public class DebugComponent extends Sear
       @SuppressWarnings("unchecked")
       NamedList<Object> stageList = (NamedList<Object>) ((NamedList<Object>)rb.getDebugInfo().get("track")).get(stages.get(rb.stage));
       if(stageList == null) {
-        stageList = new NamedList<Object>();
+        stageList = new NamedList<>();
         rb.addDebug(stageList, "track", stages.get(rb.stage));
       }
       for(ShardResponse response: sreq.responses) {
@@ -184,7 +184,7 @@ public class DebugComponent extends Sear
     }
   }
 
-  private Set<String> excludeSet = new HashSet<String>(Arrays.asList("explain"));
+  private Set<String> excludeSet = new HashSet<>(Arrays.asList("explain"));
 
   @Override
   public void finishStage(ResponseBuilder rb) {
@@ -207,19 +207,19 @@ public class DebugComponent extends Sear
               // TODO: lookup won't work for non-string ids... String vs Float
               ShardDoc sdoc = rb.resultIds.get(id);
               int idx = sdoc.positionInResponse;
-              arr[idx] = new NamedList.NamedListEntry<Object>(id, sexplain.getVal(i));
+              arr[idx] = new NamedList.NamedListEntry<>(id, sexplain.getVal(i));
             }
           }
         }
       }
 
       if (rb.isDebugResults()) {
-        explain = SolrPluginUtils.removeNulls(new SimpleOrderedMap<Object>(arr));
+        explain = SolrPluginUtils.removeNulls(new SimpleOrderedMap<>(arr));
       }
 
       if (info == null) {
         // No responses were received from shards. Show local query info.
-        info = new SimpleOrderedMap<Object>();
+        info = new SimpleOrderedMap<>();
         SolrPluginUtils.doStandardQueryDebug(
                 rb.req, rb.getQueryString(),  rb.getQuery(), rb.isDebugQuery(), info);
         if (rb.isDebugQuery() && rb.getQparser() != null) {
@@ -243,7 +243,7 @@ public class DebugComponent extends Sear
 
 
   private NamedList<String> getTrackResponse(ShardResponse shardResponse) {
-    NamedList<String> namedList = new NamedList<String>();
+    NamedList<String> namedList = new NamedList<>();
     NamedList<Object> responseNL = shardResponse.getSolrResponse().getResponse();
     @SuppressWarnings("unchecked")
     NamedList<Object> responseHeader = (NamedList<Object>)responseNL.get("responseHeader");
@@ -295,7 +295,7 @@ public class DebugComponent extends Sear
 
 
     if (source instanceof NamedList && dest instanceof NamedList) {
-      NamedList<Object> tmp = new NamedList<Object>();
+      NamedList<Object> tmp = new NamedList<>();
       @SuppressWarnings("unchecked")
       NamedList<Object> sl = (NamedList<Object>)source;
       @SuppressWarnings("unchecked")
@@ -329,7 +329,7 @@ public class DebugComponent extends Sear
     }
 
     // merge unlike elements in a list
-    List<Object> t = new ArrayList<Object>();
+    List<Object> t = new ArrayList<>();
     t.add(dest);
     t.add(source);
     return t;

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java Sun Mar 16 19:39:10 2014
@@ -141,7 +141,7 @@ public class FacetComponent extends Sear
           }
 
           if (refinements == null) {
-            refinements = new ArrayList<String>();
+            refinements = new ArrayList<>();
           }
 
           refinements.add(facetCommand);
@@ -470,7 +470,7 @@ public class FacetComponent extends Sear
               dff.needRefinements = true;
               List<String> lst = dff._toRefine[shardNum];
               if (lst == null) {
-                lst = dff._toRefine[shardNum] = new ArrayList<String>();
+                lst = dff._toRefine[shardNum] = new ArrayList<>();
               }
               lst.add(sfc.name);
             }
@@ -526,19 +526,19 @@ public class FacetComponent extends Sear
 
     FacetInfo fi = rb._facetInfo;
 
-    NamedList<Object> facet_counts = new SimpleOrderedMap<Object>();
+    NamedList<Object> facet_counts = new SimpleOrderedMap<>();
 
-    NamedList<Number> facet_queries = new SimpleOrderedMap<Number>();
+    NamedList<Number> facet_queries = new SimpleOrderedMap<>();
     facet_counts.add("facet_queries",facet_queries);
     for (QueryFacet qf : fi.queryFacets.values()) {
       facet_queries.add(qf.getKey(), num(qf.count));
     }
 
-    NamedList<Object> facet_fields = new SimpleOrderedMap<Object>();
+    NamedList<Object> facet_fields = new SimpleOrderedMap<>();
     facet_counts.add("facet_fields", facet_fields);
 
     for (DistribFieldFacet dff : fi.facets.values()) {
-      NamedList<Object> fieldCounts = new NamedList<Object>(); // order is more important for facets
+      NamedList<Object> fieldCounts = new NamedList<>(); // order is more important for facets
       facet_fields.add(dff.getKey(), fieldCounts);
 
       ShardFacetCount[] counts;
@@ -634,13 +634,13 @@ public class FacetComponent extends Sear
     public LinkedHashMap<String,QueryFacet> queryFacets;
     public LinkedHashMap<String,DistribFieldFacet> facets;
     public SimpleOrderedMap<SimpleOrderedMap<Object>> dateFacets
-      = new SimpleOrderedMap<SimpleOrderedMap<Object>>();
+      = new SimpleOrderedMap<>();
     public SimpleOrderedMap<SimpleOrderedMap<Object>> rangeFacets
-      = new SimpleOrderedMap<SimpleOrderedMap<Object>>();
+      = new SimpleOrderedMap<>();
 
     void parse(SolrParams params, ResponseBuilder rb) {
-      queryFacets = new LinkedHashMap<String,QueryFacet>();
-      facets = new LinkedHashMap<String,DistribFieldFacet>();
+      queryFacets = new LinkedHashMap<>();
+      facets = new LinkedHashMap<>();
 
       String[] facetQs = params.getParams(FacetParams.FACET_QUERY);
       if (facetQs != null) {
@@ -766,7 +766,7 @@ public class FacetComponent extends Sear
     // the max possible count for a missing term for each shard (indexed by shardNum)
     public long[] missingMax;
     public FixedBitSet[] counted; // a bitset for each shard, keeping track of which terms seen
-    public HashMap<String,ShardFacetCount> counts = new HashMap<String,ShardFacetCount>(128);
+    public HashMap<String,ShardFacetCount> counts = new HashMap<>(128);
     public int termNum;
 
     public int initialLimit;     // how many terms requested in first phase

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/FieldFacetStats.java Sun Mar 16 19:39:10 2014
@@ -73,8 +73,8 @@ public class FieldFacetStats {
     topLevelReader = searcher.getAtomicReader();
     valueSource = facet_sf.getType().getValueSource(facet_sf, null);
 
-    facetStatsValues = new HashMap<String, StatsValues>();
-    facetStatsTerms = new ArrayList<HashMap<String, Integer>>();
+    facetStatsValues = new HashMap<>();
+    facetStatsTerms = new ArrayList<>();
   }
 
   private StatsValues getStatsValues(String key) throws IOException {

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HighlightComponent.java Sun Mar 16 19:39:10 2014
@@ -182,7 +182,7 @@ public class HighlightComponent extends 
             String id = hl.getName(i);
             ShardDoc sdoc = rb.resultIds.get(id);
             int idx = sdoc.positionInResponse;
-            arr[idx] = new NamedList.NamedListEntry<Object>(id, hl.getVal(i));
+            arr[idx] = new NamedList.NamedListEntry<>(id, hl.getVal(i));
           }
         }
       }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java Sun Mar 16 19:39:10 2014
@@ -53,6 +53,7 @@ import java.util.concurrent.Callable;
 import java.util.concurrent.CompletionService;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 public class HttpShardHandler extends ShardHandler {
 
@@ -67,12 +68,12 @@ public class HttpShardHandler extends Sh
     this.httpClient = httpClient;
     this.httpShardHandlerFactory = httpShardHandlerFactory;
     completionService = httpShardHandlerFactory.newCompletionService();
-    pending = new HashSet<Future<ShardResponse>>();
+    pending = new HashSet<>();
 
     // maps "localhost:8983|localhost:7574" to a shuffled List("http://localhost:8983","http://localhost:7574")
     // This is primarily to keep track of what order we should use to query the replicas of a shard
     // so that we use the same replica for all phases of a distributed request.
-    shardToURLs = new HashMap<String,List<String>>();
+    shardToURLs = new HashMap<>();
 
   }
 
@@ -127,7 +128,7 @@ public class HttpShardHandler extends Sh
         srsp.setShard(shard);
         SimpleSolrResponse ssr = new SimpleSolrResponse();
         srsp.setSolrResponse(ssr);
-        long startTime = System.currentTimeMillis();
+        long startTime = System.nanoTime();
 
         try {
           params.remove(CommonParams.WT); // use default (currently javabin)
@@ -174,7 +175,7 @@ public class HttpShardHandler extends Sh
           }
         }
 
-        ssr.elapsedTime = System.currentTimeMillis() - startTime;
+        ssr.elapsedTime = TimeUnit.MILLISECONDS.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
 
         return srsp;
       }
@@ -284,7 +285,7 @@ public class HttpShardHandler extends Sh
         if(shardKeys == null) shardKeys = params.get(ShardParams.SHARD_KEYS);//eprecated
 
         // This will be the complete list of slices we need to query for this request.
-        slices = new HashMap<String,Slice>();
+        slices = new HashMap<>();
 
         // we need to find out what collections this request is for.
 
@@ -339,6 +340,7 @@ public class HttpShardHandler extends Sh
 
           if (shortCircuit) {
             rb.isDistrib = false;
+            rb.shortCircuitedURL = ZkCoreNodeProps.getCoreUrl(zkController.getBaseUrl(), coreDescriptor.getName());
             return;
           }
           // We shouldn't need to do anything to handle "shard.rows" since it was previously meant to be an optimization?

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/MoreLikeThisComponent.java Sun Mar 16 19:39:10 2014
@@ -100,7 +100,7 @@ public class MoreLikeThisComponent exten
           NamedList<BooleanQuery> bQuery = mlt.getMoreLikeTheseQuery(rb
               .getResults().docList);
           
-          NamedList<String> temp = new NamedList<String>();
+          NamedList<String> temp = new NamedList<>();
           Iterator<Entry<String,BooleanQuery>> idToQueryIt = bQuery.iterator();
 
           
@@ -164,7 +164,7 @@ public class MoreLikeThisComponent exten
     // segment ahead of result/response.
     if (rb.stage == ResponseBuilder.STAGE_GET_FIELDS
         && rb.req.getParams().getBool(COMPONENT_NAME, false)) {
-      Map<Object,SolrDocumentList> tempResults = new LinkedHashMap<Object,SolrDocumentList>();
+      Map<Object,SolrDocumentList> tempResults = new LinkedHashMap<>();
       
       int mltcount = rb.req.getParams().getInt(MoreLikeThisParams.DOC_COUNT, 5);
       String keyName = rb.req.getSchema().getUniqueKeyField().getName();
@@ -221,8 +221,8 @@ public class MoreLikeThisComponent exten
    */
   NamedList<SolrDocumentList> buildMoreLikeThisNamed(
       Map<Object,SolrDocumentList> allMlt, Map<Object,ShardDoc> resultIds) {
-    NamedList<SolrDocumentList> result = new NamedList<SolrDocumentList>();
-    TreeMap<Integer,Object> sortingMap = new TreeMap<Integer,Object>();
+    NamedList<SolrDocumentList> result = new NamedList<>();
+    TreeMap<Integer,Object> sortingMap = new TreeMap<>();
     for (Entry<Object,ShardDoc> next : resultIds.entrySet()) {
       sortingMap.put(next.getValue().positionInResponse, next.getKey());
     }
@@ -241,10 +241,10 @@ public class MoreLikeThisComponent exten
   public SolrDocumentList mergeSolrDocumentList(SolrDocumentList one,
       SolrDocumentList two, int maxSize, String idField) {
 
-    List<SolrDocument> l = new ArrayList<SolrDocument>();
+    List<SolrDocument> l = new ArrayList<>();
     
     // De-dup records sets. Shouldn't happen if indexed correctly.
-    Map<String,SolrDocument> map = new HashMap<String,SolrDocument>();
+    Map<String,SolrDocument> map = new HashMap<>();
     for (SolrDocument doc : one) {
       Object id = doc.getFieldValue(idField);
       assert id != null : doc.toString();
@@ -254,7 +254,7 @@ public class MoreLikeThisComponent exten
       map.put(doc.getFieldValue(idField).toString(), doc);
     }
     
-    l = new ArrayList<SolrDocument>(map.values());
+    l = new ArrayList<>(map.values());
     
     // Comparator to sort docs based on score. null scores/docs are set to 0.
     
@@ -352,12 +352,12 @@ public class MoreLikeThisComponent exten
     IndexSchema schema = searcher.getSchema();
     MoreLikeThisHandler.MoreLikeThisHelper mltHelper = new MoreLikeThisHandler.MoreLikeThisHelper(
         p, searcher);
-    NamedList<DocList> mlt = new SimpleOrderedMap<DocList>();
+    NamedList<DocList> mlt = new SimpleOrderedMap<>();
     DocIterator iterator = docs.iterator();
     
     SimpleOrderedMap<Object> dbg = null;
     if (rb.isDebug()) {
-      dbg = new SimpleOrderedMap<Object>();
+      dbg = new SimpleOrderedMap<>();
     }
     
     while (iterator.hasNext()) {
@@ -369,12 +369,12 @@ public class MoreLikeThisComponent exten
       mlt.add(name, sim.docList);
       
       if (dbg != null) {
-        SimpleOrderedMap<Object> docDbg = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> docDbg = new SimpleOrderedMap<>();
         docDbg.add("rawMLTQuery", mltHelper.getRawMLTQuery().toString());
         docDbg
             .add("boostedMLTQuery", mltHelper.getBoostedMLTQuery().toString());
         docDbg.add("realMLTQuery", mltHelper.getRealMLTQuery().toString());
-        SimpleOrderedMap<Object> explains = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> explains = new SimpleOrderedMap<>();
         DocIterator mltIte = sim.docList.iterator();
         while (mltIte.hasNext()) {
           int mltid = mltIte.nextDoc();

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/PivotFacetHelper.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/PivotFacetHelper.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/PivotFacetHelper.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/PivotFacetHelper.java Sun Mar 16 19:39:10 2014
@@ -60,7 +60,7 @@ public class PivotFacetHelper extends Si
     if (!rb.doFacets || pivots == null) 
       return null;
 
-    SimpleOrderedMap<List<NamedList<Object>>> pivotResponse = new SimpleOrderedMap<List<NamedList<Object>>>();
+    SimpleOrderedMap<List<NamedList<Object>>> pivotResponse = new SimpleOrderedMap<>();
     for (String pivot : pivots) {
       //ex: pivot == "features,cat" or even "{!ex=mytag}features,cat"
       try {
@@ -79,7 +79,7 @@ public class PivotFacetHelper extends Si
 
       String field = fields[0];
       String subField = fields[1];
-      Deque<String> fnames = new LinkedList<String>();
+      Deque<String> fnames = new LinkedList<>();
       for( int i=fields.length-1; i>1; i-- ) {
         fnames.push( fields[i] );
       }
@@ -106,7 +106,7 @@ public class PivotFacetHelper extends Si
 
     String nextField = fnames.poll();
 
-    List<NamedList<Object>> values = new ArrayList<NamedList<Object>>( superFacets.size() );
+    List<NamedList<Object>> values = new ArrayList<>( superFacets.size() );
     for (Map.Entry<String, Integer> kv : superFacets) {
       // Only sub-facet if parent facet has positive count - still may not be any values for the sub-field though
       if (kv.getValue() >= minMatch) {
@@ -118,7 +118,7 @@ public class PivotFacetHelper extends Si
         // constructing Term objects used in TermQueries that may be cached.
         BytesRef termval = null;
 
-        SimpleOrderedMap<Object> pivot = new SimpleOrderedMap<Object>();
+        SimpleOrderedMap<Object> pivot = new SimpleOrderedMap<>();
         pivot.add( "field", field );
         if (null == fieldValue) {
           pivot.add( "value", null );

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Sun Mar 16 19:39:10 2014
@@ -17,6 +17,21 @@
 
 package org.apache.solr.handler.component;
 
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
+import org.apache.commons.lang.StringUtils;
 import org.apache.lucene.index.AtomicReaderContext;
 import org.apache.lucene.index.IndexReaderContext;
 import org.apache.lucene.index.ReaderUtil;
@@ -25,12 +40,15 @@ import org.apache.lucene.search.BooleanQ
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.Scorer;
 import org.apache.lucene.search.Sort;
 import org.apache.lucene.search.SortField;
+import org.apache.lucene.search.Weight;
 import org.apache.lucene.search.grouping.GroupDocs;
 import org.apache.lucene.search.grouping.SearchGroup;
 import org.apache.lucene.search.grouping.TopGroups;
 import org.apache.lucene.util.BytesRef;
+import org.apache.lucene.util.InPlaceMergeSorter;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
@@ -81,22 +99,6 @@ import org.apache.solr.search.grouping.e
 import org.apache.solr.search.grouping.endresulttransformer.SimpleEndResultTransformer;
 import org.apache.solr.util.SolrPluginUtils;
 
-import org.apache.commons.lang.StringUtils;
-
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-
 /**
  * TODO!
  * 
@@ -161,7 +163,7 @@ public class QueryComponent extends Sear
       if (fqs!=null && fqs.length!=0) {
         List<Query> filters = rb.getFilters();
         // if filters already exists, make a copy instead of modifying the original
-        filters = filters == null ? new ArrayList<Query>(fqs.length) : new ArrayList<Query>(filters);
+        filters = filters == null ? new ArrayList<Query>(fqs.length) : new ArrayList<>(filters);
         for (String fq : fqs) {
           if (fq != null && fq.trim().length()!=0) {
             QParser fqp = QParser.getParser(fq, null, req);
@@ -289,7 +291,7 @@ public class QueryComponent extends Sear
       res.docList = new DocSlice(0, docs, luceneIds, null, docs, 0);
       if (rb.isNeedDocSet()) {
         // TODO: create a cache for this!
-        List<Query> queries = new ArrayList<Query>();
+        List<Query> queries = new ArrayList<>();
         queries.add(rb.getQuery());
         List<Query> filters = rb.getFilters();
         if (filters != null) queries.addAll(filters);
@@ -351,9 +353,9 @@ public class QueryComponent extends Sear
               topGroupsParam = new String[0];
             }
 
-            List<SearchGroup<BytesRef>> topGroups = new ArrayList<SearchGroup<BytesRef>>(topGroupsParam.length);
+            List<SearchGroup<BytesRef>> topGroups = new ArrayList<>(topGroupsParam.length);
             for (String topGroup : topGroupsParam) {
-              SearchGroup<BytesRef> searchGroup = new SearchGroup<BytesRef>();
+              SearchGroup<BytesRef> searchGroup = new SearchGroup<>();
               if (!topGroup.equals(TopGroupsShardRequestFactory.GROUP_NULL_VALUE)) {
                 searchGroup.groupValue = new BytesRef(searcher.getSchema().getField(field).getType().readableToIndexed(topGroup));
               }
@@ -486,7 +488,7 @@ public class QueryComponent extends Sear
     // TODO: See SOLR-5595
     boolean fsv = req.getParams().getBool(ResponseBuilder.FIELD_SORT_VALUES,false);
     if(fsv){
-      NamedList<Object[]> sortVals = new NamedList<Object[]>(); // order is important for the sort fields
+      NamedList<Object[]> sortVals = new NamedList<>(); // order is important for the sort fields
       IndexReaderContext topReaderContext = searcher.getTopReaderContext();
       List<AtomicReaderContext> leaves = topReaderContext.leaves();
       AtomicReaderContext currentLeaf = null;
@@ -500,12 +502,32 @@ public class QueryComponent extends Sear
 
       // sort ids from lowest to highest so we can access them in order
       int nDocs = docList.size();
-      long[] sortedIds = new long[nDocs];
-      DocIterator it = rb.getResults().docList.iterator();
+      final long[] sortedIds = new long[nDocs];
+      final float[] scores = new float[nDocs]; // doc scores, parallel to sortedIds
+      DocList docs = rb.getResults().docList;
+      DocIterator it = docs.iterator();
       for (int i=0; i<nDocs; i++) {
         sortedIds[i] = (((long)it.nextDoc()) << 32) | i;
+        scores[i] = docs.hasScores() ? it.score() : Float.NaN;
       }
-      Arrays.sort(sortedIds);
+
+      // sort ids and scores together
+      new InPlaceMergeSorter() {
+        @Override
+        protected void swap(int i, int j) {
+          long tmpId = sortedIds[i];
+          float tmpScore = scores[i];
+          sortedIds[i] = sortedIds[j];
+          scores[i] = scores[j];
+          sortedIds[j] = tmpId;
+          scores[j] = tmpScore;
+        }
+
+        @Override
+        protected int compare(int i, int j) {
+          return Long.compare(sortedIds[i], sortedIds[j]);
+        }
+      }.sort(0, sortedIds.length);
 
       SortSpec sortSpec = rb.getSortSpec();
       Sort sort = searcher.weightSort(sortSpec.getSort());
@@ -527,7 +549,9 @@ public class QueryComponent extends Sear
         int lastIdx = -1;
         int idx = 0;
 
-        for (long idAndPos : sortedIds) {
+        for (int i = 0; i < sortedIds.length; ++i) {
+          long idAndPos = sortedIds[i];
+          float score = scores[i];
           int doc = (int)(idAndPos >>> 32);
           int position = (int)idAndPos;
 
@@ -546,6 +570,7 @@ public class QueryComponent extends Sear
           }
 
           doc -= currentLeaf.docBase;  // adjust for what segment this is in
+          comparator.setScorer(new FakeScorer(doc, score));
           comparator.copy(0, doc);
           Object val = comparator.value(0);
           if (null != ft) val = ft.marshalSortValue(val); 
@@ -689,7 +714,7 @@ public class QueryComponent extends Sear
       for (String field : groupSpec.getFields()) {
         rb.mergedTopGroups.put(field, new TopGroups(null, null, 0, 0, new GroupDocs[]{}, Float.NaN));
       }
-      rb.resultIds = new HashMap<Object, ShardDoc>();
+      rb.resultIds = new HashMap<>();
     }
 
     EndResultTransformer.SolrDocumentSource solrDocumentSource = new EndResultTransformer.SolrDocumentSource() {
@@ -711,7 +736,7 @@ public class QueryComponent extends Sear
     } else {
       return;
     }
-    Map<String, Object> combinedMap = new LinkedHashMap<String, Object>();
+    Map<String, Object> combinedMap = new LinkedHashMap<>();
     combinedMap.putAll(rb.mergedTopGroups);
     combinedMap.putAll(rb.mergedQueryCommandResults);
     endResultTransformer.transform(combinedMap, rb, solrDocumentSource);
@@ -810,7 +835,7 @@ public class QueryComponent extends Sear
 
 
       // id to shard mapping, to eliminate any accidental dups
-      HashMap<Object,String> uniqueDoc = new HashMap<Object,String>();    
+      HashMap<Object,String> uniqueDoc = new HashMap<>();
 
       // Merge the docs via a priority queue so we don't have to sort *all* of the
       // documents... we only need to order the top (rows+start)
@@ -819,7 +844,7 @@ public class QueryComponent extends Sear
 
       NamedList<Object> shardInfo = null;
       if(rb.req.getParams().getBool(ShardParams.SHARDS_INFO, false)) {
-        shardInfo = new SimpleOrderedMap<Object>();
+        shardInfo = new SimpleOrderedMap<>();
         rb.rsp.getValues().add(ShardParams.SHARDS_INFO,shardInfo);
       }
       
@@ -830,7 +855,7 @@ public class QueryComponent extends Sear
         SolrDocumentList docs = null;
 
         if(shardInfo!=null) {
-          SimpleOrderedMap<Object> nl = new SimpleOrderedMap<Object>();
+          SimpleOrderedMap<Object> nl = new SimpleOrderedMap<>();
           
           if (srsp.getException() != null) {
             Throwable t = srsp.getException();
@@ -927,7 +952,7 @@ public class QueryComponent extends Sear
       int resultSize = queue.size() - ss.getOffset();
       resultSize = Math.max(0, resultSize);  // there may not be any docs in range
 
-      Map<Object,ShardDoc> resultIds = new HashMap<Object,ShardDoc>();
+      Map<Object,ShardDoc> resultIds = new HashMap<>();
       for (int i=resultSize-1; i>=0; i--) {
         ShardDoc shardDoc = queue.pop();
         shardDoc.positionInResponse = i;
@@ -996,7 +1021,7 @@ public class QueryComponent extends Sear
       }
     }
     SortField[] sortFields = lastCursorMark.getSortSpec().getSort().getSort();
-    List<Object> nextCursorMarkValues = new ArrayList<Object>(sortFields.length);
+    List<Object> nextCursorMarkValues = new ArrayList<>(sortFields.length);
     for (SortField sf : sortFields) {
       if (sf.getType().equals(SortField.Type.SCORE)) {
         assert null != lastDoc.score : "lastDoc has null score";
@@ -1059,11 +1084,11 @@ public class QueryComponent extends Sear
     // unless those requests always go to the final destination shard
 
     // for each shard, collect the documents for that shard.
-    HashMap<String, Collection<ShardDoc>> shardMap = new HashMap<String,Collection<ShardDoc>>();
+    HashMap<String, Collection<ShardDoc>> shardMap = new HashMap<>();
     for (ShardDoc sdoc : rb.resultIds.values()) {
       Collection<ShardDoc> shardDocs = shardMap.get(sdoc.shard);
       if (shardDocs == null) {
-        shardDocs = new ArrayList<ShardDoc>();
+        shardDocs = new ArrayList<>();
         shardMap.put(sdoc.shard, shardDocs);
       }
       shardDocs.add(sdoc);
@@ -1094,7 +1119,7 @@ public class QueryComponent extends Sear
         sreq.params.add(CommonParams.FL, uniqueField.getName());
       }
     
-      ArrayList<String> ids = new ArrayList<String>(shardDocs.size());
+      ArrayList<String> ids = new ArrayList<>(shardDocs.size());
       for (ShardDoc shardDoc : shardDocs) {
         // TODO: depending on the type, we may need more tha a simple toString()?
         ids.add(shardDoc.id.toString());
@@ -1157,4 +1182,60 @@ public class QueryComponent extends Sear
   public URL[] getDocs() {
     return null;
   }
+
+  /**
+   * Fake scorer for a single document
+   *
+   * TODO: when SOLR-5595 is fixed, this wont be needed, as we dont need to recompute sort values here from the comparator
+   */
+  private static class FakeScorer extends Scorer {
+    final int docid;
+    final float score;
+
+    FakeScorer(int docid, float score) {
+      super(null);
+      this.docid = docid;
+      this.score = score;
+    }
+
+    @Override
+    public int docID() {
+      return docid;
+    }
+
+    @Override
+    public float score() throws IOException {
+      return score;
+    }
+
+    @Override
+    public int freq() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int nextDoc() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int advance(int target) throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public long cost() {
+      return 1;
+    }
+
+    @Override
+    public Weight getWeight() {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public Collection<ChildScorer> getChildren() {
+      throw new UnsupportedOperationException();
+    }
+  }
 }

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Sun Mar 16 19:39:10 2014
@@ -113,7 +113,7 @@ public class QueryElevationComponent ext
   // The key is null if loaded from the config directory, and
   // is never re-loaded.
   final Map<IndexReader, Map<String, ElevationObj>> elevationCache =
-      new WeakHashMap<IndexReader, Map<String, ElevationObj>>();
+      new WeakHashMap<>();
 
   class ElevationObj {
     final String text;
@@ -127,12 +127,12 @@ public class QueryElevationComponent ext
     ElevationObj(String qstr, List<String> elevate, List<String> exclude) throws IOException {
       this.text = qstr;
       this.analyzed = getAnalyzedQuery(this.text);
-      this.ids = new HashSet<String>();
-      this.excludeIds = new HashSet<String>();
+      this.ids = new HashSet<>();
+      this.excludeIds = new HashSet<>();
 
       this.include = new BooleanQuery();
       this.include.setBoost(0);
-      this.priority = new HashMap<BytesRef, Integer>();
+      this.priority = new HashMap<>();
       int max = elevate.size() + 5;
       for (String id : elevate) {
         id = idSchemaFT.readableToIndexed(id);
@@ -279,7 +279,7 @@ public class QueryElevationComponent ext
   //load up the elevation map
   private Map<String, ElevationObj> loadElevationMap(Config cfg) throws IOException {
     XPath xpath = XPathFactory.newInstance().newXPath();
-    Map<String, ElevationObj> map = new HashMap<String, ElevationObj>();
+    Map<String, ElevationObj> map = new HashMap<>();
     NodeList nodes = (NodeList) cfg.evaluate("elevate/query", XPathConstants.NODESET);
     for (int i = 0; i < nodes.getLength(); i++) {
       Node node = nodes.item(i);
@@ -293,8 +293,8 @@ public class QueryElevationComponent ext
             "query requires '<doc .../>' child");
       }
 
-      ArrayList<String> include = new ArrayList<String>();
-      ArrayList<String> exclude = new ArrayList<String>();
+      ArrayList<String> include = new ArrayList<>();
+      ArrayList<String> exclude = new ArrayList<>();
       for (int j = 0; j < children.getLength(); j++) {
         Node child = children.item(j);
         String id = DOMUtil.getAttr(child, "id", "missing 'id'");
@@ -333,7 +333,7 @@ public class QueryElevationComponent ext
 
     Map<String, ElevationObj> elev = elevationCache.get(reader);
     if (elev == null) {
-      elev = new HashMap<String, ElevationObj>();
+      elev = new HashMap<>();
       elevationCache.put(reader, elev);
     }
     ElevationObj obj = new ElevationObj(query, Arrays.asList(ids), Arrays.asList(ex));
@@ -463,14 +463,14 @@ public class QueryElevationComponent ext
       List<String> match = null;
       if (booster != null) {
         // Extract the elevated terms into a list
-        match = new ArrayList<String>(booster.priority.size());
+        match = new ArrayList<>(booster.priority.size());
         for (Object o : booster.include.clauses()) {
           TermQuery tq = (TermQuery) ((BooleanClause) o).getQuery();
           match.add(tq.getTerm().text());
         }
       }
 
-      SimpleOrderedMap<Object> dbg = new SimpleOrderedMap<Object>();
+      SimpleOrderedMap<Object> dbg = new SimpleOrderedMap<>();
       dbg.add("q", qstr);
       dbg.add("match", match);
       if (rb.isDebugQuery()) {
@@ -490,8 +490,8 @@ public class QueryElevationComponent ext
     SortField[] currentSorts = current.getSort().getSort();
     List<SchemaField> currentFields = current.getSchemaFields();
 
-    ArrayList<SortField> sorts = new ArrayList<SortField>(currentSorts.length + 1);
-    List<SchemaField> fields = new ArrayList<SchemaField>(currentFields.size() + 1);
+    ArrayList<SortField> sorts = new ArrayList<>(currentSorts.length + 1);
+    List<SchemaField> fields = new ArrayList<>(currentFields.size() + 1);
 
     // Perhaps force it to always sort by score
     if (force && currentSorts[0].getType() != SortField.Type.SCORE) {
@@ -568,7 +568,7 @@ public class QueryElevationComponent ext
       private int topVal;
       private TermsEnum termsEnum;
       private DocsEnum docsEnum;
-      Set<String> seen = new HashSet<String>(elevations.ids.size());
+      Set<String> seen = new HashSet<>(elevations.ids.size());
 
       @Override
       public int compare(int slot1, int slot2) {

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java Sun Mar 16 19:39:10 2014
@@ -111,7 +111,7 @@ public class RealTimeGetComponent extend
     String[] allIds = id==null ? new String[0] : id;
 
     if (ids != null) {
-      List<String> lst = new ArrayList<String>();
+      List<String> lst = new ArrayList<>();
       for (String s : allIds) {
         lst.add(s);
       }
@@ -305,7 +305,7 @@ public class RealTimeGetComponent extend
         if (sf != null && schema.isCopyFieldTarget(sf)) continue;
 
         if (sf != null && sf.multiValued()) {
-          List<Object> vals = new ArrayList<Object>();
+          List<Object> vals = new ArrayList<>();
           vals.add( f );
           out.setField( f.name(), vals );
         }
@@ -354,7 +354,7 @@ public class RealTimeGetComponent extend
       return ResponseBuilder.STAGE_DONE;
     }
 
-    List<String> allIds = new ArrayList<String>();
+    List<String> allIds = new ArrayList<>();
     if (id1 != null) {
       for (String s : id1) {
         allIds.add(s);
@@ -379,13 +379,13 @@ public class RealTimeGetComponent extend
       DocCollection coll = clusterState.getCollection(collection);
 
 
-      Map<String, List<String>> sliceToId = new HashMap<String, List<String>>();
+      Map<String, List<String>> sliceToId = new HashMap<>();
       for (String id : allIds) {
         Slice slice = coll.getRouter().getTargetSlice(id, null, params, coll);
 
         List<String> idsForShard = sliceToId.get(slice.getName());
         if (idsForShard == null) {
-          idsForShard = new ArrayList<String>(2);
+          idsForShard = new ArrayList<>(2);
           sliceToId.put(slice.getName(), idsForShard);
         }
         idsForShard.add(id);
@@ -582,7 +582,7 @@ public class RealTimeGetComponent extend
     List<String> versions = StrUtils.splitSmart(versionsStr, ",", true);
 
 
-    List<Object> updates = new ArrayList<Object>(versions.size());
+    List<Object> updates = new ArrayList<>(versions.size());
 
     long minVersion = Long.MAX_VALUE;
 

Modified: lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java?rev=1578144&r1=1578143&r2=1578144&view=diff
==============================================================================
--- lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java (original)
+++ lucene/dev/branches/lucene5376_2/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java Sun Mar 16 19:39:10 2014
@@ -55,6 +55,7 @@ public class ResponseBuilder
   public SolrQueryResponse rsp;
   public boolean doHighlights;
   public boolean doFacets;
+  public boolean doExpand;
   public boolean doStats;
   public boolean doTerms;
 
@@ -128,7 +129,7 @@ public class ResponseBuilder
   public int shards_start = -1;
   public List<ShardRequest> outgoing;  // requests to be sent
   public List<ShardRequest> finished;  // requests that have received responses from all shards
-
+  public String shortCircuitedURL;
 
   public int getShardNum(String shard) {
     for (int i = 0; i < shards.length; i++) {
@@ -167,12 +168,12 @@ public class ResponseBuilder
   SimpleOrderedMap<List<NamedList<Object>>> _pivots;
 
   // Context fields for grouping
-  public final Map<String, Collection<SearchGroup<BytesRef>>> mergedSearchGroups = new HashMap<String, Collection<SearchGroup<BytesRef>>>();
-  public final Map<String, Integer> mergedGroupCounts = new HashMap<String, Integer>();
-  public final Map<String, Map<SearchGroup<BytesRef>, Set<String>>> searchGroupToShards = new HashMap<String, Map<SearchGroup<BytesRef>, Set<String>>>();
-  public final Map<String, TopGroups<BytesRef>> mergedTopGroups = new HashMap<String, TopGroups<BytesRef>>();
-  public final Map<String, QueryCommandResult> mergedQueryCommandResults = new HashMap<String, QueryCommandResult>();
-  public final Map<Object, SolrDocument> retrievedDocuments = new HashMap<Object, SolrDocument>();
+  public final Map<String, Collection<SearchGroup<BytesRef>>> mergedSearchGroups = new HashMap<>();
+  public final Map<String, Integer> mergedGroupCounts = new HashMap<>();
+  public final Map<String, Map<SearchGroup<BytesRef>, Set<String>>> searchGroupToShards = new HashMap<>();
+  public final Map<String, TopGroups<BytesRef>> mergedTopGroups = new HashMap<>();
+  public final Map<String, QueryCommandResult> mergedQueryCommandResults = new HashMap<>();
+  public final Map<Object, SolrDocument> retrievedDocuments = new HashMap<>();
   public int totalHitCount; // Hit count used when distributed grouping is performed.
   // Used for timeAllowed parameter. First phase elapsed time is subtracted from the time allowed for the second phase.
   public int firstPhaseElapsedTime;
@@ -184,14 +185,14 @@ public class ResponseBuilder
   public void addDebugInfo( String name, Object val )
   {
     if( debugInfo == null ) {
-      debugInfo = new SimpleOrderedMap<Object>();
+      debugInfo = new SimpleOrderedMap<>();
     }
     debugInfo.add( name, val );
   }
 
   public void addDebug(Object val, String... path) {
     if( debugInfo == null ) {
-      debugInfo = new SimpleOrderedMap<Object>();
+      debugInfo = new SimpleOrderedMap<>();
     }
 
     NamedList<Object> target = debugInfo;
@@ -199,7 +200,7 @@ public class ResponseBuilder
       String elem = path[i];
       NamedList<Object> newTarget = (NamedList<Object>)debugInfo.get(elem);
       if (newTarget == null) {
-        newTarget = new SimpleOrderedMap<Object>();
+        newTarget = new SimpleOrderedMap<>();
         target.add(elem, newTarget);
       }
       target = newTarget;