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/02 15:06:22 UTC

svn commit: r1700800 [11/24] - in /lucene/dev/branches/lucene6699: ./ dev-tools/ dev-tools/eclipse/ dev-tools/idea/.idea/ dev-tools/scripts/ lucene/ lucene/analysis/ lucene/analysis/common/ lucene/analysis/common/src/java/org/apache/lucene/analysis/ar/...

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/NodeConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/NodeConfig.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/NodeConfig.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/NodeConfig.java Wed Sep  2 13:06:13 2015
@@ -44,6 +44,8 @@ public class NodeConfig {
 
   private final String infoHandlerClass;
 
+  private final String configSetsHandlerClass;
+
   private final LogWatcherConfig logWatcherConfig;
 
   private final CloudConfig cloudConfig;
@@ -58,7 +60,8 @@ public class NodeConfig {
 
   private NodeConfig(String nodeName, String coreRootDirectory, String configSetBaseDirectory, String sharedLibDirectory,
                      PluginInfo shardHandlerFactoryConfig, UpdateShardHandlerConfig updateShardHandlerConfig,
-                     String coreAdminHandlerClass, String collectionsAdminHandlerClass, String infoHandlerClass,
+                     String coreAdminHandlerClass, String collectionsAdminHandlerClass,
+                     String infoHandlerClass, String configSetsHandlerClass,
                      LogWatcherConfig logWatcherConfig, CloudConfig cloudConfig, int coreLoadThreads,
                      int transientCacheSize, boolean useSchemaCache, String managementPath,
                      SolrResourceLoader loader, Properties solrProperties) {
@@ -71,6 +74,7 @@ public class NodeConfig {
     this.coreAdminHandlerClass = coreAdminHandlerClass;
     this.collectionsAdminHandlerClass = collectionsAdminHandlerClass;
     this.infoHandlerClass = infoHandlerClass;
+    this.configSetsHandlerClass = configSetsHandlerClass;
     this.logWatcherConfig = logWatcherConfig;
     this.cloudConfig = cloudConfig;
     this.coreLoadThreads = coreLoadThreads;
@@ -142,6 +146,10 @@ public class NodeConfig {
     return infoHandlerClass;
   }
 
+  public String getConfigSetsHandlerClass() {
+    return configSetsHandlerClass;
+  }
+
   public boolean hasSchemaCache() {
     return useSchemaCache;
   }
@@ -187,6 +195,7 @@ public class NodeConfig {
     private String coreAdminHandlerClass = DEFAULT_ADMINHANDLERCLASS;
     private String collectionsAdminHandlerClass = DEFAULT_COLLECTIONSHANDLERCLASS;
     private String infoHandlerClass = DEFAULT_INFOHANDLERCLASS;
+    private String configSetsHandlerClass = DEFAULT_CONFIGSETSHANDLERCLASS;
     private LogWatcherConfig logWatcherConfig = new LogWatcherConfig(true, null, null, 50);
     private CloudConfig cloudConfig;
     private int coreLoadThreads = DEFAULT_CORE_LOAD_THREADS;
@@ -205,6 +214,7 @@ public class NodeConfig {
     private static final String DEFAULT_ADMINHANDLERCLASS = "org.apache.solr.handler.admin.CoreAdminHandler";
     private static final String DEFAULT_INFOHANDLERCLASS = "org.apache.solr.handler.admin.InfoHandler";
     private static final String DEFAULT_COLLECTIONSHANDLERCLASS = "org.apache.solr.handler.admin.CollectionsHandler";
+    private static final String DEFAULT_CONFIGSETSHANDLERCLASS = "org.apache.solr.handler.admin.ConfigSetsHandler";
 
     public NodeConfigBuilder(String nodeName, SolrResourceLoader loader) {
       this.nodeName = nodeName;
@@ -252,6 +262,11 @@ public class NodeConfig {
       return this;
     }
 
+    public NodeConfigBuilder setConfigSetsHandlerClass(String configSetsHandlerClass) {
+      this.configSetsHandlerClass = configSetsHandlerClass;
+      return this;
+    }
+
     public NodeConfigBuilder setLogWatcherConfig(LogWatcherConfig logWatcherConfig) {
       this.logWatcherConfig = logWatcherConfig;
       return this;
@@ -289,7 +304,7 @@ public class NodeConfig {
 
     public NodeConfig build() {
       return new NodeConfig(nodeName, coreRootDirectory, configSetBaseDirectory, sharedLibDirectory, shardHandlerFactoryConfig,
-                            updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, infoHandlerClass,
+                            updateShardHandlerConfig, coreAdminHandlerClass, collectionsAdminHandlerClass, infoHandlerClass, configSetsHandlerClass,
                             logWatcherConfig, cloudConfig, coreLoadThreads, transientCacheSize, useSchemaCache, managementPath, loader, solrProperties);
     }
   }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/QuerySenderListener.java Wed Sep  2 13:06:13 2015
@@ -70,7 +70,7 @@ public class QuerySenderListener extends
         for (int i=0; i<values.size(); i++) {
           Object o = values.getVal(i);
           if (o instanceof ResultContext) {
-            o = ((ResultContext)o).docs;
+            o = ((ResultContext)o).getDocList();
           }
           if (o instanceof DocList) {
             DocList docs = (DocList)o;

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrConfig.java Wed Sep  2 13:06:13 2015
@@ -216,7 +216,15 @@ public class SolrConfig extends Config i
             " This config will be removed in future versions.", getNode(indexConfigPrefix + "/nrtMode", false) == null,
         true
     );
-
+    assertWarnOrFail("Solr no longer supports forceful unlocking via the 'unlockOnStartup' option.  "+
+                     "This is no longer neccessary for the default lockType except in situations where "+
+                     "it would be dangerous and should not be done.  For other lockTypes and/or "+
+                     "directoryFactory options it may also be dangerous and users must resolve "+
+                     "problematic locks manually.",
+                     null == getNode(indexConfigPrefix + "/unlockOnStartup", false),
+                     true // 'fail' in trunk
+                     );
+                     
     // Parse indexConfig section, using mainIndex as backup in case old config is used
     indexConfig = new SolrIndexConfig(this, "indexConfig", mainIndexConfig);
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrCore.java Wed Sep  2 13:06:13 2015
@@ -530,17 +530,17 @@ public final class SolrCore implements S
     initIndexReaderFactory();
 
     if (indexExists && firstTime && !reload) {
-
-      Directory dir = directoryFactory.get(indexDir, DirContext.DEFAULT,
-          getSolrConfig().indexConfig.lockType);
+      final String lockType = getSolrConfig().indexConfig.lockType;
+      Directory dir = directoryFactory.get(indexDir, DirContext.DEFAULT, lockType);
       try {
         if (IndexWriter.isLocked(dir)) {
-          log.error(logid
-              + "Solr index directory '{}' is locked.  Throwing exception.",
-              indexDir);
-          throw new LockObtainFailedException(
-              "Index locked for write for core '" + name +
-              "'. Solr now longer supports forceful unlocking via 'unlockOnStartup'. Please verify locks manually!");
+          log.error(logid + "Solr index directory '{}' is locked (lockType={}).  Throwing exception.",
+                    indexDir, lockType);
+          throw new LockObtainFailedException
+            ("Index dir '" + indexDir + "' of core '" + name + "' is already locked. " +
+             "The most likely cause is another Solr server (or another solr core in this server) " +
+             "also configured to use this directory; other possible causes may be specific to lockType: " +
+             lockType);
         }
       } finally {
         directoryFactory.release(dir);
@@ -1584,8 +1584,8 @@ public final class SolrCore implements S
 
         // SolrCore.verbose("start reopen from",previousSearcher,"writer=",writer);
 
-        RefCounted<IndexWriter> writer = getUpdateHandler().getSolrCoreState()
-            .getIndexWriter(null);
+        RefCounted<IndexWriter> writer = getSolrCoreState().getIndexWriter(null);
+
         try {
           if (writer != null) {
             // if in NRT mode, open from the writer
@@ -1639,7 +1639,7 @@ public final class SolrCore implements S
           tmp = new SolrIndexSearcher(this, newIndexDir, getLatestSchema(),
               (realtime ? "realtime":"main"), newReader, true, !realtime, true, directoryFactory);
         } else  {
-          RefCounted<IndexWriter> writer = getUpdateHandler().getSolrCoreState().getIndexWriter(this);
+          RefCounted<IndexWriter> writer = getSolrCoreState().getIndexWriter(this);
           DirectoryReader newReader = null;
           try {
             newReader = indexReaderFactory.newReader(writer.get(), this);

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/SolrXmlConfig.java Wed Sep  2 13:06:13 2015
@@ -234,6 +234,9 @@ public class SolrXmlConfig {
         case "infoHandler":
           builder.setInfoHandlerClass(value);
           break;
+        case "configSetsHandler":
+          builder.setConfigSetsHandlerClass(value);
+          break;
         case "coreRootDirectory":
           builder.setCoreRootDirectory(value);
           break;

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/ZkContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/ZkContainer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/ZkContainer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/core/ZkContainer.java Wed Sep  2 13:06:13 2015
@@ -247,7 +247,7 @@ public class ZkContainer {
           zkServer.stop();
         }
       } finally {
-        ExecutorUtil.shutdownNowAndAwaitTermination(coreZkRegister);
+        ExecutorUtil.shutdownAndAwaitTermination(coreZkRegister);
       }
     }
     

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/BlobHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/BlobHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/BlobHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/BlobHandler.java Wed Sep  2 13:06:13 2015
@@ -47,6 +47,7 @@ import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.LocalSolrQueryRequest;
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.request.SolrRequestHandler;
+import org.apache.solr.request.SolrRequestInfo;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.search.QParser;
@@ -311,9 +312,9 @@ public class BlobHandler extends Request
   // This does not work for the general case of forwarding requests.  It probably currently
   // works OK for real-time get (which is all that BlobHandler uses it for).
   private static void forward(SolrQueryRequest req, String handler ,SolrParams params, SolrQueryResponse rsp){
-    try(LocalSolrQueryRequest r = new LocalSolrQueryRequest(req.getCore(), params)) {
-      req.getCore().getRequestHandler(handler).handleRequest(r, rsp);
-    }
+    LocalSolrQueryRequest r = new LocalSolrQueryRequest(req.getCore(), params);
+    SolrRequestInfo.getRequestInfo().addCloseHook( r );  // Close as late as possible...
+    req.getCore().getRequestHandler(handler).handleRequest(r, rsp);
   }
 
 }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrLeaderStateManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrLeaderStateManager.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrLeaderStateManager.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrLeaderStateManager.java Wed Sep  2 13:06:13 2015
@@ -98,7 +98,7 @@ class CdcrLeaderStateManager extends Cdc
   private String getZnodePath() {
     String myShardId = core.getCoreDescriptor().getCloudDescriptor().getShardId();
     String myCollection = core.getCoreDescriptor().getCloudDescriptor().getCollectionName();
-    return "/collections/" + myCollection + "/leaders/" + myShardId;
+    return "/collections/" + myCollection + "/leaders/" + myShardId + "/leader";
   }
 
   void setAmILeader(boolean amILeader) {

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java Wed Sep  2 13:06:13 2015
@@ -102,6 +102,8 @@ class CdcrReplicatorScheduler {
 
   void shutdown() {
     if (isStarted) {
+      // interrupts are often dangerous in Lucene / Solr code, but the
+      // test for this will leak threads without
       replicatorsPool.shutdown();
       try {
         replicatorsPool.awaitTermination(60, TimeUnit.SECONDS);

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java Wed Sep  2 13:06:13 2015
@@ -1,5 +1,10 @@
 package org.apache.solr.handler;
 
+import java.io.IOException;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -35,11 +40,6 @@ import org.apache.solr.util.DefaultSolrT
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.TimeUnit;
-
 /**
  * <p>
  * Synchronize periodically the update log of non-leader nodes with their leaders.
@@ -101,6 +101,8 @@ class CdcrUpdateLogSynchronizer implemen
 
   void shutdown() {
     if (scheduler != null) {
+      // interrupts are often dangerous in Lucene / Solr code, but the
+      // test for this will leak threads without
       scheduler.shutdownNow();
       scheduler = null;
     }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/DumpRequestHandler.java Wed Sep  2 13:06:13 2015
@@ -46,9 +46,12 @@ public class DumpRequestHandler extends
       for (String returnParam : returnParams) {
         String[] vals = req.getParams().getParams(returnParam);
         if(vals != null){
-          for (String val : vals) {
-            params.add(returnParam,val);
+          if (vals.length == 1) {
+            params.add(returnParam, vals[0]);
+          } else {
+            params.add(returnParam, vals);
           }
+
         }
 
       }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java Wed Sep  2 13:06:13 2015
@@ -553,8 +553,7 @@ public class IndexFetcher {
       markReplicationStop();
       dirFileFetcher = null;
       localFileFetcher = null;
-      if (fsyncService != null && !fsyncService.isShutdown()) fsyncService
-          .shutdownNow();
+      if (fsyncService != null && !fsyncService.isShutdown()) fsyncService.shutdown();
       fsyncService = null;
       stop = false;
       fsyncException = null;

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/ReplicationHandler.java Wed Sep  2 13:06:13 2015
@@ -41,6 +41,7 @@ import java.util.concurrent.ExecutorServ
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.locks.ReentrantLock;
@@ -116,6 +117,8 @@ public class ReplicationHandler extends
 
   private static final Logger LOG = LoggerFactory.getLogger(ReplicationHandler.class.getName());
   SolrCore core;
+  
+  private volatile boolean closed = false;
 
   private static final class CommitVersionInfo {
     public final long version;
@@ -1214,16 +1217,11 @@ public class ReplicationHandler extends
       @Override
       public void preClose(SolrCore core) {
         try {
-          if (executorService != null) executorService.shutdown();
+          if (executorService != null) executorService.shutdown(); // we don't wait for shutdown - this can deadlock core reload
         } finally {
-          try {
             if (pollingIndexFetcher != null) {
               pollingIndexFetcher.destroy();
             }
-          } finally {
-            if (executorService != null) ExecutorUtil
-                .shutdownNowAndAwaitTermination(executorService);
-          }
         }
         if (currentIndexFetcher != null && currentIndexFetcher != pollingIndexFetcher) {
           currentIndexFetcher.destroy();
@@ -1237,9 +1235,9 @@ public class ReplicationHandler extends
     core.addCloseHook(new CloseHook() {
       @Override
       public void preClose(SolrCore core) {
-        ExecutorUtil.shutdownNowAndAwaitTermination(restoreExecutor);
+        ExecutorUtil.shutdownAndAwaitTermination(restoreExecutor);
         if (restoreFuture != null) {
-          restoreFuture.cancel(true);
+          restoreFuture.cancel(false);
         }
       }
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SchemaHandler.java Wed Sep  2 13:06:13 2015
@@ -41,11 +41,10 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static org.apache.solr.common.params.CommonParams.JSON;
+import static org.apache.solr.core.ConfigSetProperties.IMMUTABLE_CONFIGSET_ARG;
 
 public class SchemaHandler extends RequestHandlerBase {
   private static final Logger log = LoggerFactory.getLogger(SchemaHandler.class);
-
-  public static final String IMMUTABLE_CONFIGSET_ARG = "immutable";
   private boolean isImmutableConfigSet = false;
 
   @Override

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java Wed Sep  2 13:06:13 2015
@@ -82,6 +82,7 @@ import static org.apache.solr.common.par
 import static org.apache.solr.common.util.StrUtils.formatString;
 import static org.apache.solr.core.ConfigOverlay.NOT_EDITABLE;
 import static org.apache.solr.core.ConfigOverlay.ZNODEVER;
+import static org.apache.solr.core.ConfigSetProperties.IMMUTABLE_CONFIGSET_ARG;
 import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_CLASS;
 import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME;
 import static org.apache.solr.core.SolrConfig.PluginOpts.REQUIRE_NAME_IN_OVERLAY;
@@ -91,7 +92,6 @@ public class SolrConfigHandler extends R
   public static final Logger log = LoggerFactory.getLogger(SolrConfigHandler.class);
   public static final String CONFIGSET_EDITING_DISABLED_ARG = "disable.configEdit";
   public static final boolean configEditing_disabled = Boolean.getBoolean(CONFIGSET_EDITING_DISABLED_ARG);
-  public static final String IMMUTABLE_CONFIGSET_ARG = "immutable";
   private static final Map<String, SolrConfig.SolrPluginInfo> namedPlugins;
   private Lock reloadLock = new ReentrantLock(true);
   private boolean isImmutableConfigSet = false;
@@ -700,7 +700,7 @@ public class SolrConfigHandler extends R
           prop, expectedVersion, concurrentTasks.size(), collection));
       Thread.currentThread().interrupt();
     } finally {
-      ExecutorUtil.shutdownNowAndAwaitTermination(parallelExecutor);
+      ExecutorUtil.shutdownAndAwaitTermination(parallelExecutor);
     }
 
     log.info("Took {}ms to set the property {} to be of version {} for collection {}",

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java Wed Sep  2 13:06:13 2015
@@ -36,8 +36,8 @@ import org.apache.solr.client.solrj.impl
 import org.apache.solr.client.solrj.request.CoreAdminRequest;
 import org.apache.solr.client.solrj.request.CoreAdminRequest.RequestSyncShard;
 import org.apache.solr.cloud.DistributedMap;
-import org.apache.solr.cloud.DistributedQueue;
-import org.apache.solr.cloud.DistributedQueue.QueueEvent;
+import org.apache.solr.cloud.OverseerTaskQueue;
+import org.apache.solr.cloud.OverseerTaskQueue.QueueEvent;
 import org.apache.solr.cloud.Overseer;
 import org.apache.solr.cloud.OverseerSolrResponse;
 import org.apache.solr.cloud.overseer.SliceMutator;
@@ -246,13 +246,13 @@ public class CollectionsHandler extends
             + event.getWatchedEvent().getType() + "]");
       } else {
         throw new SolrException(ErrorCode.SERVER_ERROR, operation
-            + " the collection unkown case");
+            + " the collection unknown case");
       }
     }
   }
 
   private boolean overseerCollectionQueueContains(String asyncId) throws KeeperException, InterruptedException {
-    DistributedQueue collectionQueue = coreContainer.getZkController().getOverseerCollectionQueue();
+    OverseerTaskQueue collectionQueue = coreContainer.getZkController().getOverseerCollectionQueue();
     return collectionQueue.containsTaskWithRequestId(ASYNC, asyncId);
   }
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Wed Sep  2 13:06:13 2015
@@ -308,7 +308,7 @@ public class CoreAdminHandler extends Re
           if (zkController != null) {
             zkController.rejoinShardLeaderElection(req.getParams());
           } else {
-            log.warn("zkController is null in CoreAdminHandler.handleRequestInternal:REJOINLEADERELCTIONS. No action taken.");
+            log.warn("zkController is null in CoreAdminHandler.handleRequestInternal:REJOINLEADERELECTION. No action taken.");
           }
           break;
         case INVOKE:
@@ -883,7 +883,7 @@ public class CoreAdminHandler extends Re
           throw new SolrException(ErrorCode.SERVER_ERROR, "Sync Failed");
         }
       } else {
-        SolrException.log(log, "Cound not find core to call sync:" + cname);
+        SolrException.log(log, "Could not find core to call sync:" + cname);
       }
     } finally {
       // no recoveryStrat close for now

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/admin/RebalanceLeaders.java Wed Sep  2 13:06:13 2015
@@ -1,5 +1,18 @@
 package org.apache.solr.handler.admin;
 
+import static org.apache.solr.cloud.Overseer.QUEUE_OPERATION;
+import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.CORE_NODE_NAME_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.ELECTION_NODE_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.LEADER_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.MAX_AT_ONCE_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.MAX_WAIT_SECONDS_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.REJOIN_AT_HEAD_PROP;
+import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
+import static org.apache.solr.common.params.CollectionParams.CollectionAction.REBALANCELEADERS;
+import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -25,7 +38,7 @@ import java.util.Map;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.solr.cloud.LeaderElector;
-import org.apache.solr.cloud.OverseerProcessor;
+import org.apache.solr.cloud.OverseerTaskProcessor;
 import org.apache.solr.cloud.overseer.SliceMutator;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
@@ -39,21 +52,12 @@ import org.apache.solr.core.CoreContaine
 import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.zookeeper.KeeperException;
-
-import static org.apache.solr.cloud.Overseer.QUEUE_OPERATION;
-import static org.apache.solr.common.cloud.ZkStateReader.COLLECTION_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.CORE_NAME_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.ELECTION_NODE_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.LEADER_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_AT_ONCE_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.MAX_WAIT_SECONDS_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.NODE_NAME_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.REJOIN_AT_HEAD_PROP;
-import static org.apache.solr.common.cloud.ZkStateReader.SHARD_ID_PROP;
-import static org.apache.solr.common.params.CollectionParams.CollectionAction.REBALANCELEADERS;
-import static org.apache.solr.common.params.CommonAdminParams.ASYNC;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 class RebalanceLeaders {
+  private static Logger log = LoggerFactory.getLogger(RebalanceLeaders.class);
+  
   final SolrQueryRequest req;
   final SolrQueryResponse rsp;
   final CollectionsHandler collectionsHandler;
@@ -72,7 +76,7 @@ class RebalanceLeaders {
     String collectionName = req.getParams().get(COLLECTION_PROP);
     if (StringUtils.isBlank(collectionName)) {
       throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
-          String.format(Locale.ROOT, "The " + COLLECTION_PROP + " is required for the REASSIGNLEADERS command."));
+          String.format(Locale.ROOT, "The " + COLLECTION_PROP + " is required for the Rebalance Leaders command."));
     }
     coreContainer.getZkController().getZkStateReader().updateClusterState();
     ClusterState clusterState = coreContainer.getZkController().getClusterState();
@@ -88,9 +92,9 @@ class RebalanceLeaders {
 
     boolean keepGoing = true;
     for (Slice slice : dc.getSlices()) {
-      insurePreferredIsLeader(results, slice, currentRequests);
+      ensurePreferredIsLeader(results, slice, currentRequests);
       if (currentRequests.size() == max) {
-        CollectionsHandler.log.info("Queued " + max + " leader reassignments, waiting for some to complete.");
+        log.info("Queued " + max + " leader reassignments, waiting for some to complete.");
         keepGoing = waitForLeaderChange(currentRequests, maxWaitSecs, false, results);
         if (keepGoing == false) {
           break; // If we've waited longer than specified, don't continue to wait!
@@ -101,15 +105,15 @@ class RebalanceLeaders {
       keepGoing = waitForLeaderChange(currentRequests, maxWaitSecs, true, results);
     }
     if (keepGoing == true) {
-      CollectionsHandler.log.info("All leader reassignments completed.");
+      log.info("All leader reassignments completed.");
     } else {
-      CollectionsHandler.log.warn("Exceeded specified timeout of ." + maxWaitSecs + "' all leaders may not have been reassigned");
+      log.warn("Exceeded specified timeout of ." + maxWaitSecs + "' all leaders may not have been reassigned");
     }
 
     rsp.getValues().addAll(results);
   }
 
-  private void insurePreferredIsLeader(NamedList<Object> results,
+  private void ensurePreferredIsLeader(NamedList<Object> results,
                                        Slice slice, Map<String, String> currentRequests) throws KeeperException, InterruptedException {
     final String inactivePreferreds = "inactivePreferreds";
     final String alreadyLeaders = "alreadyLeaders";
@@ -160,12 +164,12 @@ class RebalanceLeaders {
 
       ZkStateReader zkStateReader = coreContainer.getZkController().getZkStateReader();
 
-      List<String> electionNodes = OverseerProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
+      List<String> electionNodes = OverseerTaskProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
           ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
 
       if (electionNodes.size() < 2) { // if there's only one node in the queue, should already be leader and we shouldn't be here anyway.
-        CollectionsHandler.log.warn("Rebalancing leaders and slice " + slice.getName() + " has less than two elements in the leader " +
-            "election queue, but replica " + replica.getName() + " doesn't think it's the leader. Do nothing");
+        log.info("Rebalancing leaders and slice " + slice.getName() + " has less than two elements in the leader " +
+            "election queue, but replica " + replica.getName() + " doesn't think it's the leader.");
         return;
       }
 
@@ -193,7 +197,7 @@ class RebalanceLeaders {
       throws KeeperException, InterruptedException {
 
     ZkStateReader zkStateReader = coreContainer.getZkController().getZkStateReader();
-    List<String> electionNodes = OverseerProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
+    List<String> electionNodes = OverseerTaskProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
         ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
 
     // First, queue up the preferred leader at the head of the queue.
@@ -210,12 +214,8 @@ class RebalanceLeaders {
       return; // let's not continue if we didn't get what we expect. Possibly we're offline etc..
     }
 
-    List<String> electionNodesTmp = OverseerProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
-        ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
-
-
     // Now find other nodes that have the same sequence number as this node and re-queue them at the end of the queue.
-    electionNodes = OverseerProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
+    electionNodes = OverseerTaskProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
         ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
 
     for (String thisNode : electionNodes) {
@@ -238,7 +238,7 @@ class RebalanceLeaders {
     int oldSeq = LeaderElector.getSeq(electionNode);
     for (int idx = 0; idx < 600; ++idx) {
       ZkStateReader zkStateReader = coreContainer.getZkController().getZkStateReader();
-      List<String> electionNodes = OverseerProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
+      List<String> electionNodes = OverseerTaskProcessor.getSortedElectionNodes(zkStateReader.getZkClient(),
           ZkStateReader.getShardLeadersElectPath(collectionName, slice.getName()));
       for (String testNode : electionNodes) {
         if (LeaderElector.getNodeName(testNode).equals(nodeName) && oldSeq != LeaderElector.getSeq(testNode)) {
@@ -250,6 +250,7 @@ class RebalanceLeaders {
     }
     return -1;
   }
+  
   private void rejoinElection(String collectionName, Slice slice, String electionNode, String core,
                               boolean rejoinAtHead) throws KeeperException, InterruptedException {
     Replica replica = slice.getReplica(LeaderElector.getNodeName(electionNode));
@@ -258,7 +259,7 @@ class RebalanceLeaders {
     propMap.put(SHARD_ID_PROP, slice.getName());
     propMap.put(QUEUE_OPERATION, REBALANCELEADERS.toLower());
     propMap.put(CORE_NAME_PROP, core);
-    propMap.put(NODE_NAME_PROP, replica.getName());
+    propMap.put(CORE_NODE_NAME_PROP, replica.getName());
     propMap.put(ZkStateReader.BASE_URL_PROP, replica.getProperties().get(ZkStateReader.BASE_URL_PROP));
     propMap.put(REJOIN_AT_HEAD_PROP, Boolean.toString(rejoinAtHead)); // Get ourselves to be first in line.
     propMap.put(ELECTION_NODE_PROP, electionNode);

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ExpandComponent.java Wed Sep  2 13:06:13 2015
@@ -27,11 +27,11 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
-import com.carrotsearch.hppc.IntObjectOpenHashMap;
-import com.carrotsearch.hppc.IntOpenHashSet;
+import com.carrotsearch.hppc.IntHashSet;
+import com.carrotsearch.hppc.IntObjectHashMap;
+import com.carrotsearch.hppc.LongHashSet;
+import com.carrotsearch.hppc.LongObjectHashMap;
 import com.carrotsearch.hppc.LongObjectMap;
-import com.carrotsearch.hppc.LongObjectOpenHashMap;
-import com.carrotsearch.hppc.LongOpenHashSet;
 import com.carrotsearch.hppc.cursors.IntObjectCursor;
 import com.carrotsearch.hppc.cursors.LongCursor;
 import com.carrotsearch.hppc.cursors.LongObjectCursor;
@@ -247,9 +247,9 @@ public class ExpandComponent extends Sea
     }
 
     FixedBitSet groupBits = null;
-    LongOpenHashSet groupSet = null;
+    LongHashSet groupSet = null;
     DocList docList = rb.getResults().docList;
-    IntOpenHashSet collapsedSet = new IntOpenHashSet(docList.size() * 2);
+    IntHashSet collapsedSet = new IntHashSet(docList.size() * 2);
 
     //Gather the groups for the current page of documents
     DocIterator idit = docList.iterator();
@@ -269,7 +269,7 @@ public class ExpandComponent extends Sea
     int currentContext = 0;
     int currentDocBase = contexts.get(currentContext).docBase;
     int nextDocBase = (currentContext+1)<contexts.size() ? contexts.get(currentContext+1).docBase : Integer.MAX_VALUE;
-    IntObjectOpenHashMap<BytesRef> ordBytes = null;
+    IntObjectHashMap<BytesRef> ordBytes = null;
     if(values != null) {
       groupBits = new FixedBitSet(values.getValueCount());
       MultiDocValues.OrdinalMap ordinalMap = null;
@@ -284,7 +284,7 @@ public class ExpandComponent extends Sea
       }
       int count = 0;
 
-      ordBytes = new IntObjectOpenHashMap();
+      ordBytes = new IntObjectHashMap<>();
 
       for(int i=0; i<globalDocs.length; i++) {
         int globalDoc = globalDocs[i];
@@ -329,7 +329,7 @@ public class ExpandComponent extends Sea
         }
       }
     } else {
-      groupSet = new LongOpenHashSet((int)(docList.size()*1.25));
+      groupSet = new LongHashSet(docList.size());
       NumericDocValues collapseValues = contexts.get(currentContext).reader().getNumericDocValues(field);
       int count = 0;
       for(int i=0; i<globalDocs.length; i++) {
@@ -389,12 +389,12 @@ public class ExpandComponent extends Sea
           .build();
       searcher.search(q, collector);
     }
-    LongObjectMap groups = ((GroupCollector)groupExpandCollector).getGroups();
+    LongObjectMap<Collector> groups = ((GroupCollector) groupExpandCollector).getGroups();
     NamedList outMap = new SimpleOrderedMap();
     CharsRefBuilder charsRef = new CharsRefBuilder();
-    for (LongObjectCursor cursor : (Iterable<LongObjectCursor>) groups) {
+    for (LongObjectCursor<Collector> cursor : groups) {
       long groupValue = cursor.key;
-      TopDocsCollector topDocsCollector = (TopDocsCollector) cursor.value;
+      TopDocsCollector<?> topDocsCollector = TopDocsCollector.class.cast(cursor.value);
       TopDocs topDocs = topDocsCollector.topDocs();
       ScoreDoc[] scoreDocs = topDocs.scoreDocs;
       if (scoreDocs.length > 0) {
@@ -502,11 +502,11 @@ public class ExpandComponent extends Sea
 
     private LongObjectMap<Collector> groups;
     private FixedBitSet groupBits;
-    private IntOpenHashSet collapsedSet;
+    private IntHashSet collapsedSet;
 
-    public GroupExpandCollector(SortedDocValues docValues, FixedBitSet groupBits, IntOpenHashSet collapsedSet, int limit, Sort sort) throws IOException {
+    public GroupExpandCollector(SortedDocValues docValues, FixedBitSet groupBits, IntHashSet collapsedSet, int limit, Sort sort) throws IOException {
       int numGroups = collapsedSet.size();
-      groups = new LongObjectOpenHashMap<>(numGroups * 2);
+      groups = new LongObjectHashMap<>(numGroups);
       DocIdSetIterator iterator = new BitSetIterator(groupBits, 0); // cost is not useful here
       int group;
       while ((group = iterator.nextDoc()) != DocIdSetIterator.NO_MORE_DOCS) {
@@ -536,7 +536,7 @@ public class ExpandComponent extends Sea
         this.segmentOrdinalMap = ordinalMap.getGlobalOrds(context.ord);
       }
 
-      final LongObjectMap<LeafCollector> leafCollectors = new LongObjectOpenHashMap<>();
+      final LongObjectMap<LeafCollector> leafCollectors = new LongObjectHashMap<>();
       for (LongObjectCursor<Collector> entry : groups) {
         leafCollectors.put(entry.key, entry.value.getLeafCollector(context));
       }
@@ -578,17 +578,16 @@ public class ExpandComponent extends Sea
   private class NumericGroupExpandCollector implements Collector, GroupCollector {
     private NumericDocValues docValues;
 
-
     private String field;
-    private LongObjectOpenHashMap<Collector> groups;
+    private LongObjectHashMap<Collector> groups;
 
-    private IntOpenHashSet collapsedSet;
+    private IntHashSet collapsedSet;
     private long nullValue;
 
-    public NumericGroupExpandCollector(String field, long nullValue, LongOpenHashSet groupSet, IntOpenHashSet collapsedSet, int limit, Sort sort) throws IOException {
+    public NumericGroupExpandCollector(String field, long nullValue, LongHashSet groupSet, IntHashSet collapsedSet, int limit, Sort sort) throws IOException {
       int numGroups = collapsedSet.size();
       this.nullValue = nullValue;
-      groups = new LongObjectOpenHashMap(numGroups * 2);
+      groups = new LongObjectHashMap<>(numGroups);
       Iterator<LongCursor> iterator = groupSet.iterator();
       while (iterator.hasNext()) {
         LongCursor cursor = iterator.next();
@@ -609,7 +608,7 @@ public class ExpandComponent extends Sea
       final int docBase = context.docBase;
       this.docValues = context.reader().getNumericDocValues(this.field);
 
-      final LongObjectOpenHashMap<LeafCollector> leafCollectors = new LongObjectOpenHashMap<>();
+      final LongObjectHashMap<LeafCollector> leafCollectors = new LongObjectHashMap<>();
 
       for (LongObjectCursor<Collector> entry : groups) {
         leafCollectors.put(entry.key, entry.value.getLeafCollector(context));
@@ -627,29 +626,30 @@ public class ExpandComponent extends Sea
         @Override
         public void collect(int docId) throws IOException {
           long value = docValues.get(docId);
-          if (value != nullValue && leafCollectors.containsKey(value) && !collapsedSet.contains(docId + docBase)) {
-            LeafCollector c = leafCollectors.lget();
-            c.collect(docId);
+          final int index;
+          if (value != nullValue && 
+              (index = leafCollectors.indexOf(value)) >= 0 && 
+              !collapsedSet.contains(docId + docBase)) {
+            leafCollectors.indexGet(index).collect(docId);
           }
         }
       };
     }
 
-    public LongObjectOpenHashMap<Collector> getGroups() {
+    public LongObjectHashMap<Collector> getGroups() {
       return groups;
     }
 
   }
 
   private interface GroupCollector {
-    public LongObjectMap getGroups();
-
+    public LongObjectMap<Collector> getGroups();
   }
 
   private Query getGroupQuery(String fname,
                            FieldType ft,
                            int size,
-                           LongOpenHashSet groupSet) {
+                           LongHashSet groupSet) {
 
     BytesRef[] bytesRefs = new BytesRef[size];
     BytesRefBuilder term = new BytesRefBuilder();
@@ -676,8 +676,7 @@ public class ExpandComponent extends Sea
 
   private Query getGroupQuery(String fname,
                               int size,
-                              IntObjectOpenHashMap<BytesRef> ordBytes) throws Exception {
-
+                              IntObjectHashMap<BytesRef> ordBytes) throws Exception {
     BytesRef[] bytesRefs = new BytesRef[size];
     int index = -1;
     Iterator<IntObjectCursor<BytesRef>>it = ordBytes.iterator();
@@ -728,7 +727,7 @@ public class ExpandComponent extends Sea
 
     public FieldInfos getFieldInfos() {
       Iterator<FieldInfo> it = in.getFieldInfos().iterator();
-      List<FieldInfo> newInfos = new ArrayList();
+      List<FieldInfo> newInfos = new ArrayList<>();
       while(it.hasNext()) {
         FieldInfo fieldInfo = it.next();
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandler.java Wed Sep  2 13:06:13 2015
@@ -317,9 +317,7 @@ public class HttpShardHandler extends Sh
   @Override
   public void cancelAll() {
     for (Future<ShardResponse> future : pending) {
-      // TODO: any issues with interrupting?  shouldn't be if
-      // there are finally blocks to release connections.
-      future.cancel(true);
+      future.cancel(false);
     }
   }
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/HttpShardHandlerFactory.java Wed Sep  2 13:06:13 2015
@@ -219,7 +219,7 @@ public class HttpShardHandlerFactory ext
   @Override
   public void close() {
     try {
-      ExecutorUtil.shutdownNowAndAwaitTermination(commExecutor);
+      ExecutorUtil.shutdownAndAwaitTermination(commExecutor);
     } finally {
       try {
         if (defaultClient != null) {

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Wed Sep  2 13:06:13 2015
@@ -36,7 +36,6 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.ReaderUtil;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BooleanQuery;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.LeafFieldComparator;
 import org.apache.lucene.search.MatchNoDocsQuery;
@@ -66,6 +65,7 @@ import org.apache.solr.common.util.Named
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.BasicResultContext;
 import org.apache.solr.response.ResultContext;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.schema.FieldType;
@@ -348,9 +348,7 @@ public class QueryComponent extends Sear
       }
       rb.setResults(res);
 
-      ResultContext ctx = new ResultContext();
-      ctx.docs = rb.getResults().docList;
-      ctx.query = null; // anything?
+      ResultContext ctx = new BasicResultContext(rb);
       rsp.add("response", ctx);
       return;
     }
@@ -503,9 +501,7 @@ public class QueryComponent extends Sear
         rb.setResult(result);
 
         if (grouping.mainResult != null) {
-          ResultContext ctx = new ResultContext();
-          ctx.docs = grouping.mainResult;
-          ctx.query = null; // TODO? add the query?
+          ResultContext ctx = new BasicResultContext(rb, grouping.mainResult);
           rsp.add("response", ctx);
           rsp.getToLog().add("hits", grouping.mainResult.matches());
         } else if (!grouping.getCommands().isEmpty()) { // Can never be empty since grouping.execute() checks for this.
@@ -522,9 +518,7 @@ public class QueryComponent extends Sear
     searcher.search(result, cmd);
     rb.setResult(result);
 
-    ResultContext ctx = new ResultContext();
-    ctx.docs = rb.getResults().docList;
-    ctx.query = rb.getQuery();
+    ResultContext ctx = new BasicResultContext(rb);
     rsp.add("response", ctx);
     rsp.getToLog().add("hits", rb.getResults().docList.matches());
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java Wed Sep  2 13:06:13 2015
@@ -17,8 +17,6 @@
 
 package org.apache.solr.handler.component;
 
-import com.carrotsearch.hppc.IntIntOpenHashMap;
-
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
@@ -73,6 +71,8 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
+import com.carrotsearch.hppc.IntIntHashMap;
+
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
@@ -536,16 +536,16 @@ public class QueryElevationComponent ext
   }
 
 
-  public static IntIntOpenHashMap getBoostDocs(SolrIndexSearcher indexSearcher, Map<BytesRef, Integer>boosted, Map context) throws IOException {
+  public static IntIntHashMap getBoostDocs(SolrIndexSearcher indexSearcher, Map<BytesRef, Integer>boosted, Map context) throws IOException {
 
-    IntIntOpenHashMap boostDocs = null;
+    IntIntHashMap boostDocs = null;
 
     if(boosted != null) {
 
       //First see if it's already in the request context. Could have been put there
       //by another caller.
       if(context != null) {
-        boostDocs = (IntIntOpenHashMap)context.get(BOOSTED_DOCIDS);
+        boostDocs = (IntIntHashMap) context.get(BOOSTED_DOCIDS);
       }
 
       if(boostDocs != null) {
@@ -555,13 +555,13 @@ public class QueryElevationComponent ext
 
       SchemaField idField = indexSearcher.getSchema().getUniqueKeyField();
       String fieldName = idField.getName();
-      HashSet<BytesRef> localBoosts = new HashSet(boosted.size()*2);
+      HashSet<BytesRef> localBoosts = new HashSet<>(boosted.size()*2);
       Iterator<BytesRef> boostedIt = boosted.keySet().iterator();
       while(boostedIt.hasNext()) {
         localBoosts.add(boostedIt.next());
       }
 
-      boostDocs = new IntIntOpenHashMap(boosted.size()*2);
+      boostDocs = new IntIntHashMap(boosted.size());
 
       List<LeafReaderContext>leaves = indexSearcher.getTopReaderContext().leaves();
       PostingsEnum postingsEnum = null;

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java Wed Sep  2 13:06:13 2015
@@ -50,9 +50,10 @@ import org.apache.solr.common.util.Named
 import org.apache.solr.common.util.StrUtils;
 import org.apache.solr.core.SolrCore;
 import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.BasicResultContext;
+import org.apache.solr.response.ResultContext;
 import org.apache.solr.response.SolrQueryResponse;
 import org.apache.solr.response.transform.DocTransformer;
-import org.apache.solr.response.transform.TransformContext;
 import org.apache.solr.schema.FieldType;
 import org.apache.solr.schema.IndexSchema;
 import org.apache.solr.schema.SchemaField;
@@ -153,8 +154,7 @@ public class RealTimeGetComponent extend
 
     DocTransformer transformer = rsp.getReturnFields().getTransformer();
     if (transformer != null) {
-      TransformContext context = new TransformContext();
-      context.req = req;
+      ResultContext context = new BasicResultContext(null, rsp.getReturnFields(), null, null, req);
       transformer.setContext(context);
     }
    try {
@@ -174,7 +174,7 @@ public class RealTimeGetComponent extend
              case UpdateLog.ADD:
                SolrDocument doc = toSolrDoc((SolrInputDocument)entry.get(entry.size()-1), core.getLatestSchema());
                if(transformer!=null) {
-                 transformer.transform(doc, -1); // unknown docID
+                 transformer.transform(doc, -1, 0); // unknown docID
                }
               docList.add(doc);
               break;
@@ -200,7 +200,7 @@ public class RealTimeGetComponent extend
        StoredDocument luceneDocument = searcher.doc(docid, rsp.getReturnFields().getLuceneFieldNames());
        SolrDocument doc = toSolrDoc(luceneDocument,  core.getLatestSchema());
        if( transformer != null ) {
-         transformer.transform(doc, docid);
+         transformer.transform(doc, docid, 0);
        }
        docList.add(doc);
      }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ResponseLogComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ResponseLogComponent.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ResponseLogComponent.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/ResponseLogComponent.java Wed Sep  2 13:06:13 2015
@@ -71,11 +71,12 @@ public class ResponseLogComponent extend
     if (schema.getUniqueKeyField() == null) return;
 
     ResultContext rc = (ResultContext) rb.rsp.getValues().get("response");
-    
-    if (rc.docs.hasScores()) {
-      processScores(rb, rc.docs, schema, searcher);
+
+    DocList docs = rc.getDocList();
+    if (docs.hasScores()) {
+      processScores(rb, docs, schema, searcher);
     } else {
-      processIds(rb, rc.docs, schema, searcher);
+      processIds(rb, docs, schema, searcher);
     }
   }
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java Wed Sep  2 13:06:13 2015
@@ -20,6 +20,7 @@ package org.apache.solr.handler.componen
 import java.io.IOException;
 import java.util.*;
 import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
 
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.queries.function.FunctionValues;
@@ -823,7 +824,6 @@ class StringStatsValues extends Abstract
 
   @Override
   public long hash(String v) {
-    // NOTE: renamed hashUnencodedChars starting with guava 15
     return hasher.hashString(v).asLong();
   }
   

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/parser/QueryParser.jj
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/parser/QueryParser.jj?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/parser/QueryParser.jj (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/parser/QueryParser.jj Wed Sep  2 13:06:13 2015
@@ -1,4 +1,4 @@
-/**
+/*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
  * this work for additional information regarding copyright ownership.

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/request/SolrQueryRequest.java Wed Sep  2 13:06:13 2015
@@ -33,7 +33,7 @@ import java.util.Map;
  * 
  *
  */
-public interface SolrQueryRequest {
+public interface SolrQueryRequest extends AutoCloseable {
 
   /** returns the current request parameters */
   public SolrParams getParams();

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/BinaryResponseWriter.java Wed Sep  2 13:06:13 2015
@@ -23,11 +23,10 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Writer;
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.List;
 
 import org.apache.lucene.index.StorableField;
-import org.apache.lucene.index.StoredDocument;
-import org.apache.lucene.index.IndexableField;
 import org.apache.solr.client.solrj.impl.BinaryResponseParser;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.params.CommonParams;
@@ -39,7 +38,6 @@ import org.apache.solr.schema.SchemaFiel
 import org.apache.solr.search.DocList;
 import org.apache.solr.search.ReturnFields;
 import org.apache.solr.search.SolrIndexSearcher;
-import org.apache.solr.search.SolrReturnFields;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -73,7 +71,7 @@ public class BinaryResponseWriter implem
   public static class Resolver implements JavaBinCodec.ObjectResolver , JavaBinCodec.WritableDocFields {
     protected final SolrQueryRequest solrQueryRequest;
     protected IndexSchema schema;
-    protected SolrIndexSearcher searcher;
+    protected SolrIndexSearcher searcher; // TODO - this is never set?  always null?
     protected final ReturnFields returnFields;
 
     public Resolver(SolrQueryRequest req, ReturnFields returnFields) {
@@ -88,8 +86,7 @@ public class BinaryResponseWriter implem
         return null; // null means we completely handled it
       }
       if (o instanceof DocList) {
-        ResultContext ctx = new ResultContext();
-        ctx.docs = (DocList) o;
+        ResultContext ctx = new BasicResultContext((DocList)o, returnFields, null, null, solrQueryRequest);
         writeResults(ctx, codec);
         return null; // null means we completely handled it
       }
@@ -118,8 +115,8 @@ public class BinaryResponseWriter implem
     }
 
     protected void writeResultsBody( ResultContext res, JavaBinCodec codec ) throws IOException {
-      codec.writeTag(JavaBinCodec.ARR, res.docs.size());
-      DocsStreamer docStreamer = new DocsStreamer(res.docs,res.query, solrQueryRequest, returnFields);
+      codec.writeTag(JavaBinCodec.ARR, res.getDocList().size());
+      Iterator<SolrDocument> docStreamer = res.getProcessedDocuments();
       while (docStreamer.hasNext()) {
         SolrDocument doc = docStreamer.next();
         codec.writeSolrDocument(doc);
@@ -128,14 +125,13 @@ public class BinaryResponseWriter implem
 
     public void writeResults(ResultContext ctx, JavaBinCodec codec) throws IOException {
       codec.writeTag(JavaBinCodec.SOLRDOCLST);
-      boolean wantsScores = returnFields.wantsScore() && ctx.docs.hasScores();
       List l = new ArrayList(3);
-      l.add((long) ctx.docs.matches());
-      l.add((long) ctx.docs.offset());
+      l.add((long) ctx.getDocList().matches());
+      l.add((long) ctx.getDocList().offset());
       
       Float maxScore = null;
-      if (wantsScores) {
-        maxScore = ctx.docs.maxScore();
+      if (ctx.wantsScores()) {
+        maxScore = ctx.getDocList().maxScore();
       }
       l.add(maxScore);
       codec.writeArray(l);

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/CSVResponseWriter.java Wed Sep  2 13:06:13 2015
@@ -340,13 +340,13 @@ class CSVWriter extends TextResponseWrit
       printer.println();
     }
 
-    if (responseObj instanceof ResultContext ) {
-      writeDocuments(null, (ResultContext)responseObj, returnFields );
+    if (responseObj instanceof ResultContext) {
+      writeDocuments(null, (ResultContext)responseObj );
     }
     else if (responseObj instanceof DocList) {
-      ResultContext ctx = new ResultContext();
-      ctx.docs =  (DocList)responseObj;
-      writeDocuments(null, ctx, returnFields );
+
+      ResultContext ctx = new BasicResultContext((DocList)responseObj, returnFields, null, null, req);
+      writeDocuments(null, ctx );
     } else if (responseObj instanceof SolrDocumentList) {
       writeSolrDocumentList(null, (SolrDocumentList)responseObj, returnFields );
     }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/DocsStreamer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/DocsStreamer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/DocsStreamer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/DocsStreamer.java Wed Sep  2 13:06:13 2015
@@ -24,17 +24,12 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
-import org.apache.lucene.document.Document;
-import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.StorableField;
 import org.apache.lucene.index.StoredDocument;
-import org.apache.lucene.search.Query;
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrException;
-import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.response.transform.DocTransformer;
-import org.apache.solr.response.transform.TransformContext;
 import org.apache.solr.schema.BinaryField;
 import org.apache.solr.schema.BoolField;
 import org.apache.solr.schema.FieldType;
@@ -50,8 +45,6 @@ import org.apache.solr.schema.TrieIntFie
 import org.apache.solr.schema.TrieLongField;
 import org.apache.solr.search.DocIterator;
 import org.apache.solr.search.DocList;
-import org.apache.solr.search.ReturnFields;
-import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.search.SolrReturnFields;
 
 /**
@@ -59,38 +52,28 @@ import org.apache.solr.search.SolrReturn
  */
 public class DocsStreamer implements Iterator<SolrDocument> {
   public static final Set<Class> KNOWN_TYPES = new HashSet<>();
+
+  private org.apache.solr.response.ResultContext rctx;
   private final DocList docs;
 
-  private SolrIndexSearcher searcher;
-  private final IndexSchema schema;
   private DocTransformer transformer;
   private DocIterator docIterator;
+
   private boolean onlyPseudoFields;
   private Set<String> fnames;
-  private TransformContext context;
   private int idx = -1;
 
-  public DocsStreamer(DocList docList, Query query, SolrQueryRequest req, ReturnFields returnFields) {
-    this.docs = docList;
-    this.schema = req.getSchema();
-    searcher = req.getSearcher();
-    transformer = returnFields.getTransformer();
-    docIterator = docList.iterator();
-    context = new TransformContext();
-    context.query = query;
-    context.wantsScores = returnFields.wantsScore() && docList.hasScores();
-    context.req = req;
-    context.searcher = searcher;
-    context.iterator = docIterator;
-    fnames = returnFields.getLuceneFieldNames();
-    onlyPseudoFields = (fnames == null && !returnFields.wantsAllFields() && !returnFields.hasPatternMatching())
+  public DocsStreamer(ResultContext rctx) {
+    this.rctx = rctx;
+    this.docs = rctx.getDocList();
+    transformer = rctx.getReturnFields().getTransformer();
+    docIterator = this.docs.iterator();
+    fnames = rctx.getReturnFields().getLuceneFieldNames();
+    onlyPseudoFields = (fnames == null && !rctx.getReturnFields().wantsAllFields() && !rctx.getReturnFields().hasPatternMatching())
         || (fnames != null && fnames.size() == 1 && SolrReturnFields.SCORE.equals(fnames.iterator().next()));
-    if (transformer != null) transformer.setContext(context);
+    if (transformer != null) transformer.setContext(rctx);
   }
 
-  public boolean hasScores() {
-    return context.wantsScores;
-  }
 
   public int currentIndex() {
     return idx;
@@ -110,16 +93,17 @@ public class DocsStreamer implements Ite
       sdoc = new SolrDocument();
     } else {
       try {
-        StoredDocument doc = searcher.doc(id, fnames);
-        sdoc = getDoc(doc, schema);
+        StoredDocument doc = rctx.getSearcher().doc(id, fnames);
+        sdoc = getDoc(doc, rctx.getSearcher().getSchema()); // make sure to use the schema from the searcher and not the request (cross-core)
       } catch (IOException e) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error reading document with docId " + id, e);
       }
     }
 
     if (transformer != null) {
+      boolean doScore = rctx.wantsScores();
       try {
-        transformer.transform(sdoc, id);
+        transformer.transform(sdoc, id, doScore ? docIterator.score() : 0);
       } catch (IOException e) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error applying transformer", e);
       }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/ResultContext.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/ResultContext.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/ResultContext.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/ResultContext.java Wed Sep  2 13:06:13 2015
@@ -17,15 +17,45 @@
 
 package org.apache.solr.response;
 
+import java.util.Iterator;
+
 import org.apache.lucene.search.Query;
+import org.apache.solr.common.SolrDocument;
+import org.apache.solr.handler.component.ResponseBuilder;
+import org.apache.solr.request.SolrQueryRequest;
 import org.apache.solr.search.DocList;
+import org.apache.solr.search.ReturnFields;
+import org.apache.solr.search.SolrIndexSearcher;
 
 /**
  * A class to hold the QueryResult and the Query
  * 
  *
  */
-public class ResultContext {
-  public Query query;
-  public DocList docs;
+public abstract class ResultContext {
+
+  public abstract DocList getDocList();
+
+  public abstract ReturnFields getReturnFields();
+
+  public abstract SolrIndexSearcher getSearcher();
+
+  public abstract Query getQuery();
+
+  // TODO: any reason to allow for retrievial of any filters as well?
+
+  /** Note: do not use the request to get the searcher!  A cross-core request may have a different
+   *  searcher (for the other core) than the original request.
+   */
+  public abstract SolrQueryRequest getRequest();
+
+  public boolean wantsScores() {
+    return getReturnFields().wantsScore() && getDocList().hasScores();
+  }
+
+  public Iterator<SolrDocument> getProcessedDocuments() {
+    return new DocsStreamer(this);
+  }
 }
+
+

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/TextResponseWriter.java Wed Sep  2 13:06:13 2015
@@ -144,12 +144,11 @@ public abstract class TextResponseWriter
       writeSolrDocument(name, (SolrDocument)val,returnFields, 0);
     } else if (val instanceof ResultContext) {
       // requires access to IndexReader
-      writeDocuments(name, (ResultContext)val, returnFields);
+      writeDocuments(name, (ResultContext)val);
     } else if (val instanceof DocList) {
       // Should not happen normally
-      ResultContext ctx = new ResultContext();
-      ctx.docs = (DocList)val;
-      writeDocuments(name, ctx, returnFields);
+      ResultContext ctx = new BasicResultContext((DocList)val, returnFields, null, null, req);
+      writeDocuments(name, ctx);
     // }
     // else if (val instanceof DocSet) {
     // how do we know what fields to read?
@@ -216,29 +215,31 @@ public abstract class TextResponseWriter
 
   public abstract void writeStartDocumentList(String name, long start, int size, long numFound, Float maxScore) throws IOException;  
 
-  public abstract void writeSolrDocument(String name, SolrDocument doc, ReturnFields returnFields, int idx) throws IOException;
+  public abstract void writeSolrDocument(String name, SolrDocument doc, ReturnFields fields, int idx) throws IOException;
   
   public abstract void writeEndDocumentList() throws IOException;
   
   // Assume each SolrDocument is already transformed
-  public final void writeSolrDocumentList(String name, SolrDocumentList docs, ReturnFields returnFields) throws IOException
+  public final void writeSolrDocumentList(String name, SolrDocumentList docs, ReturnFields fields) throws IOException
   {
     writeStartDocumentList(name, docs.getStart(), docs.size(), docs.getNumFound(), docs.getMaxScore() );
     for( int i=0; i<docs.size(); i++ ) {
-      writeSolrDocument( null, docs.get(i), returnFields, i );
+      writeSolrDocument( null, docs.get(i), fields, i );
     }
     writeEndDocumentList();
   }
 
 
-  public final void writeDocuments(String name, ResultContext res, ReturnFields fields ) throws IOException {
-    DocList ids = res.docs;
-    DocsStreamer docsStreamer = new DocsStreamer(res.docs,res.query, req, fields);
+  public final void writeDocuments(String name, ResultContext res) throws IOException {
+    DocList ids = res.getDocList();
+    Iterator<SolrDocument> docsStreamer = res.getProcessedDocuments();
     writeStartDocumentList(name, ids.offset(), ids.size(), ids.matches(),
-        docsStreamer.hasScores() ? new Float(ids.maxScore()) : null);
+        res.wantsScores() ? new Float(ids.maxScore()) : null);
 
+    int idx = 0;
     while (docsStreamer.hasNext()) {
-      writeSolrDocument(null, docsStreamer.next(), returnFields, docsStreamer.currentIndex());
+      writeSolrDocument(null, docsStreamer.next(), res.getReturnFields(), idx);
+      idx++;
     }
     writeEndDocumentList();
   }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/BaseEditorialTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/BaseEditorialTransformer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/BaseEditorialTransformer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/BaseEditorialTransformer.java Wed Sep  2 13:06:13 2015
@@ -47,7 +47,7 @@ public abstract class BaseEditorialTrans
   }
 
   @Override
-  public void transform(SolrDocument doc, int docid) {
+  public void transform(SolrDocument doc, int docid, float score) {
     //this only gets added if QueryElevationParams.MARK_EXCLUDED is true
     Set<String> ids = getIdSet();
     if (ids != null && ids.isEmpty() == false) {

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformerFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformerFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformerFactory.java Wed Sep  2 13:06:13 2015
@@ -96,7 +96,7 @@ public class ChildDocTransformerFactory
   }
 }
 
-class ChildDocTransformer extends TransformerWithContext {
+class ChildDocTransformer extends DocTransformer {
   private final String name;
   private final SchemaField idField;
   private final IndexSchema schema;
@@ -121,7 +121,7 @@ class ChildDocTransformer extends Transf
   }
 
   @Override
-  public void transform(SolrDocument doc, int docid) {
+  public void transform(SolrDocument doc, int docid, float score) {
 
     FieldType idFt = idField.getType();
     Object parentIdField = doc.getFirstValue(idField.getName());
@@ -133,12 +133,12 @@ class ChildDocTransformer extends Transf
     try {
       Query parentQuery = idFt.getFieldQuery(null, idField, parentIdExt);
       Query query = new ToChildBlockJoinQuery(parentQuery, parentsFilter);
-      DocList children = context.searcher.getDocList(query, childFilterQuery, new Sort(), 0, limit);
+      DocList children = context.getSearcher().getDocList(query, childFilterQuery, new Sort(), 0, limit);
       if(children.matches() > 0) {
         DocIterator i = children.iterator();
         while(i.hasNext()) {
           Integer childDocNum = i.next();
-          StoredDocument childDoc = context.searcher.doc(childDocNum);
+          StoredDocument childDoc = context.getSearcher().doc(childDocNum);
           SolrDocument solrChildDoc = DocsStreamer.getDoc(childDoc, schema);
 
           // TODO: future enhancement...

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocIdAugmenterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocIdAugmenterFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocIdAugmenterFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocIdAugmenterFactory.java Wed Sep  2 13:06:13 2015
@@ -48,7 +48,7 @@ class DocIdAugmenter extends DocTransfor
   }
 
   @Override
-  public void transform(SolrDocument doc, int docid) {
+  public void transform(SolrDocument doc, int docid, float score) {
     if( docid >= 0 ) {
       doc.setField( name, docid );
     }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformer.java Wed Sep  2 13:06:13 2015
@@ -18,10 +18,10 @@
 package org.apache.solr.response.transform;
 
 import java.io.IOException;
-import java.util.Set;
 
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.response.QueryResponseWriter;
+import org.apache.solr.response.ResultContext;
 import org.apache.solr.search.SolrIndexSearcher;
 
 /**
@@ -35,7 +35,7 @@ import org.apache.solr.search.SolrIndexS
  *
  */
 public abstract class DocTransformer {
-  protected  TransformContext context;
+  protected ResultContext context;
   /**
    *
    * @return The name of the transformer
@@ -44,10 +44,9 @@ public abstract class DocTransformer {
 
   /**
    * This is called before transform and sets
-   * @param context The {@link org.apache.solr.response.transform.TransformContext} stores information about the current state of things in Solr that may be
-   * useful for doing transformations.
+   * @param context The {@link ResultContext} stores information about how the documents were produced.
    */
-  public void setContext( TransformContext context ) {
+  public void setContext( ResultContext context ) {
     this.context = context;
 
   }
@@ -58,9 +57,10 @@ public abstract class DocTransformer {
    *
    * @param doc The document to alter
    * @param docid The Lucene internal doc id
+   * @param score the score for this document
    * @throws IOException If there is a low-level I/O error.
    */
-  public abstract void transform(SolrDocument doc, int docid) throws IOException;
+  public abstract void transform(SolrDocument doc, int docid, float score) throws IOException;
 
   /**
    * When a transformer needs access to fields that are not automaticaly derived from the

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformers.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformers.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/DocTransformers.java Wed Sep  2 13:06:13 2015
@@ -23,7 +23,7 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.solr.common.SolrDocument;
-import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.ResultContext;
 
 /**
  * Transform a document before it gets sent out
@@ -65,16 +65,16 @@ public class DocTransformers extends Doc
   }
 
   @Override
-  public void setContext( TransformContext context ) {
+  public void setContext( ResultContext context ) {
     for( DocTransformer a : children ) {
       a.setContext( context );
     }
   }
 
   @Override
-  public void transform(SolrDocument doc, int docid) throws IOException {
+  public void transform(SolrDocument doc, int docid, float score) throws IOException {
     for( DocTransformer a : children ) {
-      a.transform( doc, docid);
+      a.transform( doc, docid, score);
     }
   }
 }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ElevatedMarkerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ElevatedMarkerFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ElevatedMarkerFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ElevatedMarkerFactory.java Wed Sep  2 13:06:13 2015
@@ -48,7 +48,7 @@ class MarkTransformer extends BaseEditor
 
   @Override
   protected Set<String> getIdSet() {
-    return (Set<String>) context.req.getContext().get("BOOSTED");
+    return (Set<String>) context.getRequest().getContext().get("BOOSTED");
   }
 }
 

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExcludedMarkerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExcludedMarkerFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExcludedMarkerFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExcludedMarkerFactory.java Wed Sep  2 13:06:13 2015
@@ -51,7 +51,7 @@ class ExcludedTransformer extends BaseEd
 
   @Override
   protected Set<String> getIdSet() {
-    return (Set<String>)context.req.getContext().get(QueryElevationComponent.EXCLUDED);
+    return (Set<String>)context.getRequest().getContext().get(QueryElevationComponent.EXCLUDED);
   }
 
 }

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/ExplainAugmenterFactory.java Wed Sep  2 13:06:13 2015
@@ -87,7 +87,7 @@ public class ExplainAugmenterFactory ext
     }
 
     @Override
-    public void transform(SolrDocument doc, int docid) {
+    public void transform(SolrDocument doc, int docid, float score) {
       if( context != null && context.getQuery() != null ) {
         try {
           Explanation exp = context.getSearcher().explain(context.getQuery(), docid);

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RawValueTransformerFactory.java Wed Sep  2 13:06:13 2015
@@ -20,7 +20,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
 
-import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.index.StorableField;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.params.CommonParams;
@@ -108,7 +107,7 @@ public class RawValueTransformerFactory
     }
 
     @Override
-    public void transform(SolrDocument doc, int docid) {
+    public void transform(SolrDocument doc, int docid, float score) {
       Object val = doc.remove(field);
       if(val==null) {
         return;

Modified: lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RenameFieldTransformer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RenameFieldTransformer.java?rev=1700800&r1=1700799&r2=1700800&view=diff
==============================================================================
--- lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RenameFieldTransformer.java (original)
+++ lucene/dev/branches/lucene6699/solr/core/src/java/org/apache/solr/response/transform/RenameFieldTransformer.java Wed Sep  2 13:06:13 2015
@@ -17,8 +17,6 @@
 package org.apache.solr.response.transform;
 
 import org.apache.solr.common.SolrDocument;
-import org.apache.solr.common.util.NamedList;
-import org.apache.solr.request.SolrQueryRequest;
 
 /**
  * Return a field with a name that is different that what is indexed
@@ -46,7 +44,7 @@ public class RenameFieldTransformer exte
   }
 
   @Override
-  public void transform(SolrDocument doc, int docid) {
+  public void transform(SolrDocument doc, int docid, float score) {
     Object v = (copy)?doc.get(from) : doc.remove( from );
     if( v != null ) {
       doc.setField(to, v);