You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/10/01 23:46:43 UTC

[lucene-solr] 02/26: @885 Revert some jetty config, try moving graceful shutdown hook earlier.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit b651f4b2e8d449cf97ee40b1c4cd239223add33b
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Thu Oct 1 08:25:24 2020 -0500

    @885 Revert some jetty config, try moving graceful shutdown hook earlier.
---
 .../java/org/apache/solr/cloud/ZkController.java   | 14 ++++++--
 .../java/org/apache/solr/core/CoreContainer.java   |  4 +--
 .../apache/solr/servlet/SolrLifcycleListener.java  | 42 ++++++++++++++++++++++
 .../apache/solr/servlet/SolrShutdownHandler.java   |  6 ++--
 solr/server/etc/jetty-http.xml                     |  9 +++--
 solr/server/etc/jetty-https.xml                    |  9 +++--
 solr/server/etc/jetty.xml                          | 12 +++----
 solr/server/resources/log4j2.xml                   |  4 +--
 .../apache/solr/common/PerThreadExecService.java   |  2 +-
 9 files changed, 81 insertions(+), 21 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index ac0fbc2..ac0381c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -75,6 +75,7 @@ import org.apache.solr.handler.component.HttpShardHandlerFactory;
 import org.apache.solr.logging.MDCLoggingContext;
 import org.apache.solr.search.SolrIndexSearcher;
 import org.apache.solr.servlet.SolrDispatchFilter;
+import org.apache.solr.servlet.SolrLifcycleListener;
 import org.apache.solr.servlet.SolrShutdownHandler;
 import org.apache.solr.update.UpdateLog;
 import org.apache.solr.util.RTimer;
@@ -175,12 +176,17 @@ public class ZkController implements Closeable, Runnable {
   public final static String COLLECTION_PARAM_PREFIX = "collection.";
   public final static String CONFIGNAME_PROP = "configName";
   private boolean shudownCalled;
+  private volatile boolean dcCalled;
 
   @Override
   public void run() {
     disconnect();
   }
 
+  public boolean isDcCalled() {
+    return dcCalled;
+  }
+
   static class ContextKey {
 
     private String collection;
@@ -408,9 +414,9 @@ public class ZkController implements Closeable, Runnable {
 
   public void start() throws KeeperException {
 
-    boolean isRegistered = SolrShutdownHandler.isRegistered(this);
+    boolean isRegistered = SolrLifcycleListener.isRegistered(this);
     if (!isRegistered) {
-      SolrShutdownHandler.registerShutdown(this);
+      SolrLifcycleListener.registerShutdown(this);
     }
 
     String zkCredentialsProviderClass = cloudConfig.getZkCredentialsProviderClass();
@@ -622,6 +628,8 @@ public class ZkController implements Closeable, Runnable {
   }
 
   public void disconnect() {
+    log.info("disconnect");
+    this.dcCalled = true;
     try (ParWork closer = new ParWork(this, true)) {
       closer.collect( "replicateFromLeaders", replicateFromLeaders);
 
@@ -681,7 +689,7 @@ public class ZkController implements Closeable, Runnable {
       IOUtils.closeQuietly(zkClient);
     }
 
-    SolrShutdownHandler.removeShutdown(this);
+    SolrLifcycleListener.removeShutdown(this);
 
     assert ObjectReleaseTracker.release(this);
   }
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index ffe4d73..4b29f02 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -1043,7 +1043,7 @@ public class CoreContainer implements Closeable {
 
     log.info("Shutting down CoreContainer instance=" + System.identityHashCode(this));
 
-    if (isZooKeeperAware() && zkSys != null && zkSys.getZkController() != null) {
+    if (isZooKeeperAware() && zkSys != null && zkSys.getZkController() != null && !zkSys.getZkController().isDcCalled()) {
       zkSys.zkController.disconnect();
     }
 
@@ -1144,7 +1144,7 @@ public class CoreContainer implements Closeable {
 
       closer.collect(loader);
     }
-
+    log.info("CoreContainer closed");
     assert ObjectReleaseTracker.release(this);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrLifcycleListener.java b/solr/core/src/java/org/apache/solr/servlet/SolrLifcycleListener.java
new file mode 100644
index 0000000..ba7f027
--- /dev/null
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrLifcycleListener.java
@@ -0,0 +1,42 @@
+package org.apache.solr.servlet;
+
+import org.apache.solr.common.ParWork;
+import org.eclipse.jetty.util.component.AbstractLifeCycle;
+import org.eclipse.jetty.util.component.LifeCycle;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.lang.invoke.MethodHandles;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public class SolrLifcycleListener extends AbstractLifeCycle.AbstractLifeCycleListener {
+  private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
+
+  private final static Set<Runnable> shutdowns = new LinkedHashSet<>();
+
+
+  public synchronized static void registerShutdown(Runnable r) {
+    shutdowns.add(r);
+  }
+
+  public synchronized static void removeShutdown(Runnable r) {
+    shutdowns.remove(r);
+  }
+
+  public synchronized static boolean isRegistered(Runnable r) {
+    return shutdowns.contains(r);
+  }
+
+
+  @Override
+  public void lifeCycleStopping(LifeCycle event) {
+    log.info("Solr is stopping, call ZkController#disconnect");
+    try (ParWork work = new ParWork(this, true)) {
+      for (Runnable run : shutdowns) {
+        work.collect("shutdown", () -> run.run());
+      }
+    }
+    shutdowns.clear();
+  }
+}
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrShutdownHandler.java b/solr/core/src/java/org/apache/solr/servlet/SolrShutdownHandler.java
index f8c912b..affb04c 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrShutdownHandler.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrShutdownHandler.java
@@ -40,9 +40,9 @@ public class SolrShutdownHandler extends HandlerWrapper implements Graceful {
 
     @Override
     public Future<Void> shutdown() {
-        log.error("GRACEFUL SHUTDOWN CALLED");
-//        return new FutureCallback(true);
-        return new VoidShutdownFuture();
+        log.error("SHUTDOWN MONITOR HOOK CALLED");
+        return new FutureCallback(true);
+        //return new VoidShutdownFuture();
     }
 
     @Override
diff --git a/solr/server/etc/jetty-http.xml b/solr/server/etc/jetty-http.xml
index 7d0a233..57703e9 100644
--- a/solr/server/etc/jetty-http.xml
+++ b/solr/server/etc/jetty-http.xml
@@ -35,10 +35,10 @@
               <New class="org.eclipse.jetty.http2.server.HTTP2CServerConnectionFactory">
                 <Arg name="config"><Ref refid="httpConfig" /></Arg>
                 <Set name="maxConcurrentStreams">512</Set>
-                <Set name="inputBufferSize">16384</Set>
+                <Set name="inputBufferSize">8192</Set>
                 <Set name="rateControlFactory">
                   <New class="org.eclipse.jetty.http2.parser.WindowRateControl$Factory">
-                    <Arg type="int"><Property name="jetty.http2.rateControl.maxEventsPerSecond" default="1000000"/></Arg>
+                    <Arg type="int"><Property name="jetty.http2.rateControl.maxEventsPerSecond" default="1000"/></Arg>
                   </New>
                 </Set>
               </New>
@@ -50,6 +50,11 @@
         <Set name="idleTimeout"><Property name="solr.jetty.http.idleTimeout" default="120000"/></Set>
         <Set name="acceptorPriorityDelta"><Property name="solr.jetty.http.acceptorPriorityDelta" default="0"/></Set>
         <Set name="acceptQueueSize"><Property name="solr.jetty.http.acceptQueueSize" default="0"/></Set>
+        <Call name="addLifeCycleListener">
+          <Arg>
+            <New class="org.apache.solr.servlet.SolrLifcycleListener"/>
+          </Arg>
+        </Call>
       </New>
     </Arg>
   </Call>
diff --git a/solr/server/etc/jetty-https.xml b/solr/server/etc/jetty-https.xml
index 97998fa..393dada 100644
--- a/solr/server/etc/jetty-https.xml
+++ b/solr/server/etc/jetty-https.xml
@@ -55,10 +55,10 @@
               <New class="org.eclipse.jetty.http2.server.HTTP2ServerConnectionFactory">
                 <Arg name="config"><Ref refid="sslHttpConfig"/></Arg>
                 <Set name="maxConcurrentStreams">512</Set>
-                <Set name="inputBufferSize">16384</Set>
+                <Set name="inputBufferSize">8192</Set>
                 <Set name="rateControlFactory">
                   <New class="org.eclipse.jetty.http2.parser.WindowRateControl$Factory">
-                    <Arg type="int"><Property name="jetty.http2.rateControl.maxEventsPerSecond" default="1000000"/></Arg>
+                    <Arg type="int"><Property name="jetty.http2.rateControl.maxEventsPerSecond" default="1000"/></Arg>
                   </New>
                 </Set>
               </New>
@@ -75,6 +75,11 @@
         <Set name="idleTimeout"><Property name="solr.jetty.https.timeout" default="120000"/></Set>
         <Set name="acceptorPriorityDelta"><Property name="solr.jetty.ssl.acceptorPriorityDelta" default="0"/></Set>
         <Set name="acceptQueueSize"><Property name="solr.jetty.https.acceptQueueSize" default="0"/></Set>
+        <Call name="addLifeCycleListener">
+          <Arg>
+            <New class="org.apache.solr.servlet.SolrConnectorListener"/>
+          </Arg>
+        </Call>
       </New>
     </Arg>
   </Call>
diff --git a/solr/server/etc/jetty.xml b/solr/server/etc/jetty.xml
index a93619d..1317800 100644
--- a/solr/server/etc/jetty.xml
+++ b/solr/server/etc/jetty.xml
@@ -59,14 +59,14 @@
   <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
     <Set name="secureScheme">https</Set>
     <Set name="securePort"><Property name="solr.jetty.secure.port" default="8443" /></Set>
-    <Set name="outputBufferSize"><Property name="solr.jetty.output.buffer.size" default="65536" /></Set>
-    <Set name="outputAggregationSize"><Property name="solr.jetty.output.aggregation.size" default="16384" /></Set>
-    <Set name="requestHeaderSize"><Property name="solr.jetty.request.header.size" default="16384" /></Set>
-    <Set name="responseHeaderSize"><Property name="solr.jetty.response.header.size" default="16384" /></Set>
+    <Set name="outputBufferSize"><Property name="solr.jetty.output.buffer.size" default="32768" /></Set>
+    <Set name="outputAggregationSize"><Property name="solr.jetty.output.aggregation.size" default="8192" /></Set>
+    <Set name="requestHeaderSize"><Property name="solr.jetty.request.header.size" default="12000" /></Set>
+    <Set name="responseHeaderSize"><Property name="solr.jetty.response.header.size" default="12000" /></Set>
     <Set name="sendServerVersion"><Property name="solr.jetty.send.server.version" default="false" /></Set>
     <Set name="sendDateHeader"><Property name="solr.jetty.send.date.header" default="false" /></Set>
-    <Set name="headerCacheSize"><Property name="solr.jetty.header.cache.size" default="1024" /></Set>
-    <Set name="delayDispatchUntilContent"><Property name="solr.jetty.delayDispatchUntilContent" default="false"/></Set>
+    <Set name="headerCacheSize"><Property name="solr.jetty.header.cache.size" default="512" /></Set>
+    <Set name="delayDispatchUntilContent"><Property name="solr.jetty.delayDispatchUntilContent" default="true"/></Set>
     <!-- Uncomment to enable handling of X-Forwarded- style headers
     <Call name="addCustomizer">
       <Arg><New class="org.eclipse.jetty.server.ForwardedRequestCustomizer"/></Arg>
diff --git a/solr/server/resources/log4j2.xml b/solr/server/resources/log4j2.xml
index e91cba9..6ac550a 100644
--- a/solr/server/resources/log4j2.xml
+++ b/solr/server/resources/log4j2.xml
@@ -64,8 +64,8 @@
   <Loggers>
 
     <AsyncLogger name="org.eclipse.jetty.servlets" level="WARN"/>
-    <AsyncLogger name="org.eclipse.jetty" level="DEBUG"/>
-    <AsyncLogger name="org.eclipse.jetty.server.Server" level="DEBUG"/>
+    <AsyncLogger name="org.eclipse.jetty" level="WARN"/>
+    <AsyncLogger name="org.eclipse.jetty.server.Server" level="WARN"/>
     <AsyncLogger name="org.apache.hadoop" level="WARN"/>
     <AsyncLogger name="org.apache.solr.update.LoggingInfoStream" level="OFF"/>
     <AsyncLogger name="org.apache.zookeeper" level="WARN"/>
diff --git a/solr/solrj/src/java/org/apache/solr/common/PerThreadExecService.java b/solr/solrj/src/java/org/apache/solr/common/PerThreadExecService.java
index ef638dc..b8dc010 100644
--- a/solr/solrj/src/java/org/apache/solr/common/PerThreadExecService.java
+++ b/solr/solrj/src/java/org/apache/solr/common/PerThreadExecService.java
@@ -86,7 +86,7 @@ public class PerThreadExecService extends AbstractExecutorService {
 //    if (closeLock) {
 //      throw new IllegalCallerException();
 //    }
-    closeTracker.close();
+    assert closeTracker.close();
     assert ObjectReleaseTracker.release(this);
     this.shutdown = true;
   }