From 49c6a4a0bfd323888b76edf28f1b816c9cde946f Mon Sep 17 00:00:00 2001
From: Timothy Potter <thelabdude@apache.org>
Date: Fri, 5 Sep 2014 16:30:23 +0000
Subject: [PATCH] SOLR-6447: bin/solr should pass -DnumShards=1 for
 bootstrapping collection1 when starting in cloud mode

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1622733 13f79535-47bb-0310-9956-ffa450edef68
---
 solr/CHANGES.txt  |  3 +++
 solr/bin/solr     | 67 +++++++++++++++++++++++++++++------------------
 solr/bin/solr.cmd |  2 +-
 3 files changed, 45 insertions(+), 27 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index e5534b4d47e..c76c70a39b0 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -173,6 +173,9 @@ Bug Fixes
 * SOLR-5814: CoreContainer reports incorrect & missleading path for solrconfig.xml 
   when there are loading problems (Pradeep via hossman)
 
+* SOLR-6447: bin/solr script needs to pass -DnumShards=1 for boostrapping collection1
+  when starting Solr in cloud mode. (Timothy Potter)
+
 Other Changes
 ---------------------
 
diff --git a/solr/bin/solr b/solr/bin/solr
index 939a2bb2713..a700a329e46 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -47,6 +47,8 @@
 SOLR_SCRIPT="$0"
 verbose=false
 THIS_OS=`uname -s`
+hasLsof=$(which lsof)
+
 # for now, we don't support running this script from cygwin due to problems
 # like not having lsof, ps waux, curl, and awkward directory handling
 if [ "${THIS_OS:0:6}" == "CYGWIN" ]; then
@@ -251,7 +253,8 @@ function stop_solr() {
   if [ "$SOLR_PID" != "" ]; then
     echo -e "Sending stop command to Jetty stop port $STOP_PORT ... waiting 5 seconds to allow process $SOLR_PID to stop gracefully."
     $JAVA -jar $DIR/start.jar STOP.PORT=$STOP_PORT STOP.KEY=$STOP_KEY --stop || true
-    sleep 5
+    (sleep 5) &
+    spinner $!
   else
     echo -e "No Solr nodes found to stop."
     exit 0
@@ -543,13 +546,19 @@ if [ "$EXAMPLE" != "" ]; then
                   fi
                                   
                   # check to see if something is already bound to that port
-                  PORT_IN_USE=`lsof -i:$CLOUD_PORT | grep $CLOUD_PORT`
-                  if [ "$PORT_IN_USE" != "" ]; then
-                    read -e -p "Oops! Looks like port $CLOUD_PORT is already being used by another process. Please choose a different port. " USER_INPUT
+                  if [ "$hasLsof" != "" ]; then
+                    PORT_IN_USE=`lsof -i:$CLOUD_PORT | grep $CLOUD_PORT`
+                    if [ "$PORT_IN_USE" != "" ]; then
+                      read -e -p "Oops! Looks like port $CLOUD_PORT is already being used by another process. Please choose a different port. " USER_INPUT
+                    else
+                      CLOUD_PORTS[$s]=$CLOUD_PORT
+                      echo $CLOUD_PORT
+                      break;
+                    fi
                   else
                     CLOUD_PORTS[$s]=$CLOUD_PORT
                     echo $CLOUD_PORT
-                    break;                                      
+                    break;
                   fi
                 done
               done
@@ -683,7 +692,7 @@ if [ "$SOLR_MODE" == "solrcloud" ]; then
     
     # and if collection1 needs to be bootstrapped
     if [ -e "$SOLR_HOME/collection1/core.properties" ]; then
-      CLOUD_MODE_OPTS="$CLOUD_MODE_OPTS -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf"
+      CLOUD_MODE_OPTS="$CLOUD_MODE_OPTS -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1"
     fi
   fi
     
@@ -774,28 +783,34 @@ $SOLR_HOST_ARG -Djetty.port=$SOLR_PORT \
     nohup $JAVA $SOLR_START_OPTS $SOLR_ADDL_ARGS -XX:OnOutOfMemoryError="$SOLR_TIP/bin/oom_solr.sh $SOLR_PORT" -jar start.jar 1>$SOLR_TIP/bin/solr-$SOLR_PORT-console.log 2>&1 &
   
     # no lsof on cygwin though
-    echo -n "Waiting to see Solr listening on port $SOLR_PORT"
-    # Launch in a subshell to show the spinner
-    (loops=0
-    while true
-    do
-      running=`lsof -i:$SOLR_PORT | grep $SOLR_PORT`
-      if [ "$running" == "" ]; then
-        if [ $loops -lt 6 ]; then
-          sleep 5
-          loops=$[$loops+1]      
+    if [ "$hasLsof" != "" ]; then
+      echo -n "Waiting to see Solr listening on port $SOLR_PORT"
+      # Launch in a subshell to show the spinner
+      (loops=0
+      while true
+      do
+        running=`lsof -i:$SOLR_PORT | grep $SOLR_PORT`
+        if [ "$running" == "" ]; then
+          if [ $loops -lt 6 ]; then
+            sleep 5
+            loops=$[$loops+1]
+          else
+            echo -e "Still not seeing Solr listening on $SOLR_PORT after 30 seconds!"
+            tail -30 $SOLR_TIP/node1/logs/solr.log
+            exit;
+          fi
         else
-          echo -e "Still not seeing Solr listening on $SOLR_PORT after 30 seconds!"
-          tail -30 $SOLR_TIP/node1/logs/solr.log
+          SOLR_PID=`ps waux | grep start.jar | grep $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r`
+          echo -e "\nStarted Solr server on port $SOLR_PORT (pid=$SOLR_PID). Happy searching!\n"
           exit;
-        fi    
-      else
-        SOLR_PID=`ps waux | grep start.jar | grep $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r`
-        echo -e "\nStarted Solr server on port $SOLR_PORT (pid=$SOLR_PID). Happy searching!\n"
-        exit;
-      fi
-    done) &
-    spinner $!
+        fi
+      done) &
+      spinner $!
+    else
+      SOLR_PID=`ps waux | grep start.jar | grep $SOLR_PORT | grep -v grep | awk '{print $2}' | sort -r`
+      echo -e "\nStarted Solr server on port $SOLR_PORT (pid=$SOLR_PID). Happy searching!\n"
+      exit;
+    fi
   fi
 }
 
diff --git a/solr/bin/solr.cmd b/solr/bin/solr.cmd
index 0a9902b4a60..b64d0ed537e 100644
--- a/solr/bin/solr.cmd
+++ b/solr/bin/solr.cmd
@@ -403,7 +403,7 @@ IF "%SOLR_MODE%"=="solrcloud" (
   ) ELSE (
     IF "%verbose%"=="1" echo Configuring SolrCloud to launch an embedded ZooKeeper using -DzkRun
     set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -DzkRun"
-    IF EXIST "%SOLR_HOME%\collection1\core.properties" set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf"
+    IF EXIST "%SOLR_HOME%\collection1\core.properties" set "CLOUD_MODE_OPTS=!CLOUD_MODE_OPTS! -Dbootstrap_confdir=./solr/collection1/conf -Dcollection.configName=myconf -DnumShards=1"
   )  
 ) ELSE (
   set CLOUD_MODE_OPTS=