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 2021/02/10 01:43:52 UTC

[lucene-solr] 08/09: @1335 More cleanup and correctness.

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 4eb5eefd5b1f9a80973670df2c0610950d96d602
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Sat Feb 6 10:31:10 2021 -0600

    @1335 More cleanup and correctness.
    
    # Conflicts:
    #	solr/bin/solr
---
 solr/bin/solr                                      | 46 +++++++++++-----------
 .../java/org/apache/solr/cloud/ZkController.java   |  2 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |  2 +-
 .../solr/handler/component/SearchHandlerTest.java  |  2 +-
 .../solr/client/solrj/impl/Http2SolrClient.java    |  7 ++++
 .../org/apache/solr/common/cloud/SolrZkClient.java |  2 +-
 .../apache/solr/common/cloud/ZkCmdExecutor.java    | 18 +++------
 .../apache/solr/common/cloud/ZkStateReader.java    | 29 +++-----------
 versions.lock                                      | 11 +++---
 9 files changed, 52 insertions(+), 67 deletions(-)

diff --git a/solr/bin/solr b/solr/bin/solr
index af1ef4b..a3d2452 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -824,7 +824,7 @@ function run_package() {
     fi
   fi
 
-  run_tool package -solrUrl "$runningSolrUrl" $@
+  run_tool package -solrUrl "$runningSolrUrl" "$@"
   #exit $?
 }
 
@@ -924,7 +924,7 @@ fi
 
 # assert tool
 if [ "$SCRIPT_CMD" == "assert" ]; then
-  run_tool assert $*
+  run_tool assert "$*"
   exit $?
 fi
 
@@ -1417,12 +1417,12 @@ fi
 
 
 if [[ "$SCRIPT_CMD" == "export" ]]; then
-  run_tool export $@
+  run_tool export "$@"
   exit $?
 fi
 
 if [[ "$SCRIPT_CMD" == "package" ]]; then
-  run_package $@
+  run_package "$@"
   exit $?
 fi
 
@@ -1562,7 +1562,7 @@ if [[ "$SCRIPT_CMD" == "auth" ]]; then
         fi
       done
   fi
-  run_tool auth ${AUTH_PARAMS[@]} -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$AUTH_PORT/solr" -authConfDir "$SOLR_HOME" $VERBOSE
+  run_tool auth "${AUTH_PARAMS[@]}" -solrUrl "$SOLR_URL_SCHEME://$SOLR_TOOL_HOST:$AUTH_PORT/solr" -authConfDir "$SOLR_HOME" $VERBOSE
   exit $?
 fi
 
@@ -1626,7 +1626,7 @@ fi
 FG="false"
 FORCE=false
 noprompt=false
-SOLR_OPTS=($SOLR_OPTS)
+SOLR_OPTS=("$SOLR_OPTS")
 PASS_TO_RUN_EXAMPLE=
 
 if [ $# -gt 0 ]; then
@@ -1899,7 +1899,7 @@ fi
 
 LOG4J_CONFIG=()
 if [ -n "$LOG4J_PROPS" ]; then
-  LOG4J_CONFIG+=("-Dlog4j.configurationFile=$LOG4J_PROPS")
+  LOG4J_CONFIG+=("-Dlog4j.configurationFile=$LOG4J_PROPS" '-Dlog4j2.is.webapp' '-Dlog4j2.garbagefreeThreadContextMap=true' '-Dlog4j2.enableDirectEncoders=true' '-Dlog4j2.enable.threadlocals=true')
 fi
 
 if [ "$SCRIPT_CMD" == "stop" ]; then
@@ -1941,7 +1941,7 @@ if [ -z ${GC_LOG_OPTS+x} ]; then
     GC_LOG_OPTS=('-Dno_gc_logging')
   fi
 else
-  GC_LOG_OPTS=($GC_LOG_OPTS)
+  GC_LOG_OPTS=("${GC_LOG_OPTS[@]}")
 fi
 
 # if verbose gc logging enabled, setup the location of the log file and rotation
@@ -2145,17 +2145,17 @@ function start_solr() {
     echo -e "    SOLR_HOST       = $SOLR_HOST"
     echo -e "    SOLR_PORT       = $SOLR_PORT"
     echo -e "    STOP_PORT       = $STOP_PORT"
-    echo -e "    JAVA_MEM_OPTS   = ${JAVA_MEM_OPTS[@]}"
-    echo -e "    GC_TUNE         = ${GC_TUNE[@]}"
-    echo -e "    GC_LOG_OPTS     = ${GC_LOG_OPTS[@]}"
+    echo -e "    JAVA_MEM_OPTS   = " "${JAVA_MEM_OPTS[@]}"
+    echo -e "    GC_TUNE         = " "${GC_TUNE[@]}"
+    echo -e "    GC_LOG_OPTS     = " "${GC_LOG_OPTS[@]}"
     echo -e "    SOLR_TIMEZONE   = $SOLR_TIMEZONE"
 
     if [ "$SOLR_MODE" == "solrcloud" ]; then
-      echo -e "    CLOUD_MODE_OPTS = ${CLOUD_MODE_OPTS[@]}"
+      echo -e "    CLOUD_MODE_OPTS = " "${CLOUD_MODE_OPTS[@]}"
     fi
 
     if [ "$SOLR_OPTS" != "" ]; then
-      echo -e "    SOLR_OPTS       = ${SOLR_OPTS[@]}"
+      echo -e "    SOLR_OPTS       = " "${SOLR_OPTS[@]}"
     fi
 
     if [ "$SOLR_ADDL_ARGS" != "" ]; then
@@ -2164,7 +2164,7 @@ function start_solr() {
 
     if [ "$ENABLE_REMOTE_JMX_OPTS" == "true" ]; then
       echo -e "    RMI_PORT        = $RMI_PORT"
-      echo -e "    REMOTE_JMX_OPTS = ${REMOTE_JMX_OPTS[@]}"
+      echo -e "    REMOTE_JMX_OPTS = " "${REMOTE_JMX_OPTS[@]}"
     fi
 
     if [ "$SOLR_LOG_LEVEL" != "" ]; then
@@ -2178,7 +2178,7 @@ function start_solr() {
   fi
 
   # need to launch solr from the server dir
-  cd "$SOLR_SERVER_DIR"
+  cd "$SOLR_SERVER_DIR" || exit 1
 
   if [ ! -e "$SOLR_SERVER_DIR/start.jar" ]; then
     echo -e "\nERROR: start.jar file not found in $SOLR_SERVER_DIR!\nPlease check your -d parameter to set the correct Solr server directory.\n"
@@ -2186,7 +2186,7 @@ function start_solr() {
   fi
 
   SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE[@]}" "${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
-    "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" $SOLR_LOG_LEVEL_OPT -Dsolr.log.dir="$SOLR_LOGS_DIR" \
+    "${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}" "$SOLR_LOG_LEVEL_OPT" "-Dsolr.log.dir=$SOLR_LOGS_DIR" \
     "-Djetty.port=$SOLR_PORT" "-DSTOP.PORT=$stop_port" "-DSTOP.KEY=$STOP_KEY" \
     # '-OmitStackTraceInFastThrow' ensures stack traces in errors,
     # users who don't care about useful error msgs can override in SOLR_OPTS with +OmitStackTraceInFastThrow
@@ -2214,16 +2214,16 @@ function start_solr() {
   fi
 
   if [ "$run_in_foreground" == "true" ]; then
-    exec "$JAVA" -Djetty.state=${SOLR_PID_DIR}/jetty.state -Dsolr.log.muteconsole "${SOLR_START_OPTS[@]}" $SOLR_ADDL_ARGS  -Dlog4j2.is.webapp=false -Dlog4j2.garbagefreeThreadContextMap=true \
-       -Dlog4j2.enableDirectEncoders=true -Dlog4j2.enable.threadlocals=true -XX:-UseBiasedLocking -jar start.jar "${SOLR_JETTY_CONFIG[@]}" $SOLR_JETTY_ADDL_CONFIG
+    exec "$JAVA" -Djetty.state=${SOLR_PID_DIR}/jetty.state -Dsolr.log.muteconsole "${SOLR_START_OPTS[@]}" "${SOLR_ADDL_ARGS}"  -Dlog4j2.is.webapp=false -Dlog4j2.garbagefreeThreadContextMap=true \
+       -Dlog4j2.enableDirectEncoders=true -Dlog4j2.enable.threadlocals=true -XX:-UseBiasedLocking -jar start.jar "${SOLR_JETTY_CONFIG[@]}" "${SOLR_JETTY_ADDL_CONFIG}"
   else
     # run Solr in the background
     export JAVA=$JAVA
-    export JETTY_HOME="$SOLR_SERVER_DIR"
-    export JETTY_PID="$SOLR_PID_DIR/solr-$SOLR_PORT.pid"
-    export JETTY_ARGS="${SOLR_JETTY_CONFIG[@]} $SOLR_JETTY_ADDL_CONFIG"
-    export JAVA_OPTIONS="${SOLR_START_OPTS[@]} $SOLR_ADDL_ARGS -XX:-UseBiasedLocking -Dsolr.log.muteconsole"
-    export JETTY_STATE="${SOLR_PID_DIR}/jetty.state"
+    export JETTY_HOME="${SOLR_SERVER_DIR}"
+    export JETTY_PID="${SOLR_PID_DIR}/solr-$SOLR_PORT.pid"
+    export JETTY_ARGS[@]=("${SOLR_JETTY_CONFIG[@]}" "${SOLR_JETTY_ADDL_CONFIG[@]}")
+    export JAVA_OPTIONS[@]=("${SOLR_START_OPTS[@]}" "${SOLR_ADDL_ARGS[@]}" '-XX:-UseBiasedLocking' '-Dsolr.log.muteconsole')
+    export JETTY_STATE[@]=("${SOLR_PID_DIR}/jetty.state")
     bash $SOLR_SERVER_DIR/../bin/jetty.sh start
   fi
 
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 6e3b649..7e73fe6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -1243,11 +1243,11 @@ public class ZkController implements Closeable, Runnable {
   }
 
   public void removeEphemeralLiveNode() throws KeeperException {
+    log.info("Removing our ephemeral live node");
     String nodeName = getNodeName();
     String nodePath = ZkStateReader.LIVE_NODES_ZKNODE + "/" + nodeName;
     try {
       zkClient.delete(nodePath, -1);
-      zkClient.setData(ZkStateReader.LIVE_NODES_ZKNODE, (byte[]) null, true);
     } catch (NoNodeException e) {
       // okay
     } catch (Exception e) {
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index 91fcbe6..a8e2325 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -1852,7 +1852,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
         return;
       }
 
-      log.info("{} CLOSING SolrCore {} {}", logid, this, new RuntimeException().getStackTrace()[0]);
+      log.info("CLOSING SolrCore {}", logid);
       assert ObjectReleaseTracker.release(this);
       this.closing = true;
 
diff --git a/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java b/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
index b88be80..6825b8e 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/SearchHandlerTest.java
@@ -262,7 +262,7 @@ public class SearchHandlerTest extends SolrTestCaseJ4
       } catch (Exception e) {
         assertTrue("Unrecognized exception message: " + e, 
             e.getMessage().contains("no servers hosting shard:") 
-                || e.getMessage().contains("SolrZkClient is not currently connected,,"));
+                || e.getMessage().contains("SolrZkClient is not currently connected state=CLOSED") || e.getMessage().contains("No live SolrServers available to handle this request"));
       }
     }
     finally {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index 7875cfa..21d91fe 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -1032,6 +1032,13 @@ public class Http2SolrClient extends SolrClient {
     }
   }
 
+  private static class ContentStreamPredicate implements Predicate<ContentStream> {
+    @Override
+    public boolean test(ContentStream cs) {
+      return cs.getName() == null;
+    }
+  }
+
   public class AsyncTracker {
 
     private final Semaphore available;
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
index e94bcae..1f5a190 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/SolrZkClient.java
@@ -1081,7 +1081,7 @@ public class SolrZkClient implements Closeable {
   }
 
   public boolean isClosed() {
-    return isClosed || (higherLevelIsClosed != null && higherLevelIsClosed.isClosed());
+    return isClosed;
   }
 
   public SolrZooKeeper getSolrZooKeeper() {
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
index b2fd548..03b200c 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkCmdExecutor.java
@@ -50,15 +50,6 @@ public class ZkCmdExecutor {
     this.isClosed = isClosed;
     this.solrZkClient = solrZkClient;
   }
-  
-  public long getRetryDelay() {
-    return retryDelay;
-  }
-  
-  public void setRetryDelay(long retryDelay) {
-    this.retryDelay = retryDelay;
-  }
-  
 
   /**
    * Perform the given operation, retrying if the connection fails
@@ -66,8 +57,8 @@ public class ZkCmdExecutor {
   @SuppressWarnings("unchecked")
   public static <T> T retryOperation(ZkCmdExecutor zkCmdExecutor, ZkOperation operation)
       throws KeeperException, InterruptedException {
-    if (isClosed.isClosed()) {
-      throw new AlreadyClosedException(this + " SolrZkClient is already closed");
+    if (zkCmdExecutor.solrZkClient.isClosed()) {
+      throw new AlreadyClosedException("SolrZkClient is already closed");
     }
     KeeperException exception = null;
     int tryCnt = 0;
@@ -82,10 +73,13 @@ public class ZkCmdExecutor {
         if (!zkCmdExecutor.solrZkClient.getSolrZooKeeper().getState().isAlive()) {
           throw e;
         }
-        retryDelay(tryCnt);
+        zkCmdExecutor.retryDelay(tryCnt);
       }
       tryCnt++;
     }
+    if (exception == null) {
+      throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Unexpected fail, we should have tracked the exception");
+    }
     throw exception;
   }
   
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
index 45eaf98..cffd8ea 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkStateReader.java
@@ -518,7 +518,6 @@ public class ZkStateReader implements SolrCloseable, Replica.NodeNameToBaseUrl {
       // on reconnect of SolrZkClient force refresh and re-add watches.
       loadClusterProperties();
 
-      IOUtils.closeQuietly(this.liveNodesWatcher);
       this.liveNodesWatcher = new LiveNodeWatcher();
       refreshLiveNodes(this.liveNodesWatcher);
       this.collectionsChildWatcher = new CollectionsChildWatcher();
@@ -796,23 +795,14 @@ public class ZkStateReader implements SolrCloseable, Replica.NodeNameToBaseUrl {
    * Refresh live_nodes.
    */
   private void refreshLiveNodes(LiveNodeWatcher watcher) throws KeeperException, InterruptedException {
-    if (watcher != null) {
-      IOUtils.closeQuietly(watcher);
-    }
-
     SortedSet<String> oldLiveNodes;
     SortedSet<String> newLiveNodes = null;
     liveNodesLock.lock();
     try {
       try {
 
-        Stat stat = zkClient.exists(ZkStateReader.LIVE_NODES_ZKNODE, watcher, true);
-        if (stat != null && this.liveNodesVersion >= 0) {
-          if (stat.getCversion() < this.liveNodesVersion) {
-            return;
-          }
-        }
-        List<String> nodeList = zkClient.getChildren(LIVE_NODES_ZKNODE, null, stat, true);
+        Stat stat = new Stat();
+        List<String> nodeList = zkClient.getChildren(LIVE_NODES_ZKNODE, watcher, stat, true);
         this.liveNodesVersion = stat.getCversion();
         newLiveNodes = new TreeSet<>(nodeList);
       } catch (KeeperException.NoNodeException e) {
@@ -1805,18 +1795,11 @@ public class ZkStateReader implements SolrCloseable, Replica.NodeNameToBaseUrl {
       if (node != null) {
         MDCLoggingContext.setNode(node);
       }
-      if (event.getType() == EventType.NodeDataChanged) {
-        if (log.isDebugEnabled()) {
-          log.debug("A live node change: [{}], has occurred - updating... (previous live nodes size: [{}])", event, liveNodes.size());
-        }
-        refreshAndWatch();
-      } else {
-        try {
-          zkClient.exists(ZkStateReader.LIVE_NODES_ZKNODE, this, true);
-        } catch (Exception e) {
-          log.error("A ZK error has occurred", e);
-        }
+
+      if (log.isDebugEnabled()) {
+        log.debug("A live node change: [{}], has occurred - updating... (previous live nodes size: [{}])", event, liveNodes.size());
       }
+      refreshAndWatch();
     }
 
     public void refreshAndWatch() {
diff --git a/versions.lock b/versions.lock
index 14f419c..e82ccdf 100644
--- a/versions.lock
+++ b/versions.lock
@@ -10,7 +10,7 @@ com.fasterxml:aalto-xml:1.2.2 (1 constraints: 0705f835)
 com.fasterxml.jackson:jackson-bom:2.12.1 (4 constraints: ab4f8fc9)
 com.fasterxml.jackson.core:jackson-annotations:2.12.1 (3 constraints: ea2bcfa6)
 com.fasterxml.jackson.core:jackson-core:2.12.1 (4 constraints: 1c44f1e9)
-com.fasterxml.jackson.core:jackson-databind:2.12.1 (5 constraints: 7d41418f)
+com.fasterxml.jackson.core:jackson-databind:2.12.1 (6 constraints: 6b52facb)
 com.fasterxml.jackson.dataformat:jackson-dataformat-smile:2.12.1 (2 constraints: ed132382)
 com.fasterxml.staxmate:staxmate:2.4.0 (1 constraints: 08050136)
 com.fasterxml.woodstox:woodstox-core:6.2.3 (1 constraints: 0d051236)
@@ -39,6 +39,7 @@ com.rometools:rome-utils:1.12.2 (1 constraints: 3805313b)
 com.sun.mail:gimap:1.5.1 (1 constraints: 09050036)
 com.sun.mail:javax.mail:1.5.1 (2 constraints: 830d2844)
 com.tdunning:t-digest:3.1 (1 constraints: a804212c)
+com.vlkan.log4j2:log4j2-logstash-layout:1.0.5 (1 constraints: 0805f535)
 commons-cli:commons-cli:1.4 (1 constraints: a9041e2c)
 commons-codec:commons-codec:1.13 (2 constraints: ca14ab87)
 commons-collections:commons-collections:3.2.2 (1 constraints: 09050236)
@@ -92,7 +93,7 @@ org.apache.commons:commons-compress:1.19 (1 constraints: df04fa30)
 org.apache.commons:commons-configuration2:2.1.1 (1 constraints: 0605f935)
 org.apache.commons:commons-csv:1.7 (1 constraints: ac04212c)
 org.apache.commons:commons-exec:1.3 (1 constraints: a8041d2c)
-org.apache.commons:commons-lang3:3.9 (7 constraints: 36678708)
+org.apache.commons:commons-lang3:3.11 (8 constraints: 1677b2c7)
 org.apache.commons:commons-math3:3.6.1 (1 constraints: 0c050d36)
 org.apache.commons:commons-text:1.6 (1 constraints: ab04202c)
 org.apache.curator:curator-client:2.13.0 (1 constraints: 3805383b)
@@ -198,8 +199,8 @@ org.ow2.asm:asm-analysis:9.0 (1 constraints: e409dda5)
 org.ow2.asm:asm-commons:9.0 (2 constraints: ed13644e)
 org.ow2.asm:asm-tree:9.0 (2 constraints: 2f144e8c)
 org.rrd4j:rrd4j:3.5 (1 constraints: ac04252c)
-org.slf4j:jcl-over-slf4j:1.7.24 (1 constraints: 4105483b)
-org.slf4j:slf4j-api:1.7.24 (18 constraints: d3f6bfd0)
+org.slf4j:jcl-over-slf4j:1.7.24 (1 constraints: 4005473b)
+org.slf4j:slf4j-api:1.7.24 (18 constraints: 64f415d2)
 org.tallison:jmatio:1.5 (1 constraints: aa041f2c)
 org.tukaani:xz:1.8 (1 constraints: ad04222c)
 org.xerial.snappy:snappy-java:1.1.8.1 (1 constraints: 6b05a040)
@@ -258,7 +259,7 @@ org.locationtech.jts:jts-core:1.15.0 (1 constraints: 3905383b)
 org.mockito:mockito-core:2.23.4 (1 constraints: 3d05403b)
 org.objenesis:objenesis:2.6 (2 constraints: 5f0ffb79)
 org.opentest4j:opentest4j:1.1.1 (1 constraints: ca1044c1)
-org.slf4j:slf4j-simple:1.7.24 (1 constraints: 4105483b)
+org.slf4j:slf4j-simple:1.7.24 (1 constraints: 4005473b)
 org.xmlunit:xmlunit-core:2.7.0 (3 constraints: 602a5f6c)
 org.xmlunit:xmlunit-legacy:2.7.0 (1 constraints: b70f8d8d)
 org.xmlunit:xmlunit-placeholders:2.7.0 (1 constraints: b70f8d8d)