You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2014/12/05 16:24:13 UTC

svn commit: r1643326 [3/4] - in /lucene/dev/branches/lucene2878: ./ lucene/ lucene/codecs/ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/ lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/compressing/ lucene/core/src/java/org/apac...

Modified: lucene/dev/branches/lucene2878/solr/bin/solr
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/bin/solr?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/bin/solr (original)
+++ lucene/dev/branches/lucene2878/solr/bin/solr Fri Dec  5 15:24:11 2014
@@ -71,14 +71,7 @@ done
 
 SOLR_TIP=`dirname "$SOLR_SCRIPT"`/..
 SOLR_TIP=`cd "$SOLR_TIP"; pwd`
-
-# TODO: see SOLR-3619, need to support server or example
-# depending on the version of Solr
-if [ -e "$SOLR_TIP/server/start.jar" ]; then
-  DEFAULT_SERVER_DIR=$SOLR_TIP/server
-else
-  DEFAULT_SERVER_DIR=$SOLR_TIP/example
-fi
+DEFAULT_SERVER_DIR=$SOLR_TIP/server
 
 # If an include wasn't specified in the environment, then search for one...
 if [ "x$SOLR_INCLUDE" == "x" ]; then
@@ -150,6 +143,9 @@ function print_usage() {
     echo "  -h <host>     Specify the hostname for this Solr instance"
     echo ""
     echo "  -p <port>     Specify the port to start the Solr HTTP listener on; default is 8983"
+    echo "                  The specified port (SOLR_PORT) will also be used to determine the stop port"
+    echo "                  STOP_PORT=(\$SOLR_PORT-1000) and JMX RMI listen port RMI_PORT=(1\$SOLR_PORT). "
+    echo "                  For instance, if you set -p 8985, then the STOP_PORT=7985 and RMI_PORT=18985"
     echo ""
     echo "  -d <dir>      Specify the Solr server directory; defaults to server"
     echo ""
@@ -173,9 +169,9 @@ function print_usage() {
     echo "      schemaless:    Schema-less example"
     echo ""
     echo "  -a            Additional parameters to pass to the JVM when starting Solr, such as to setup"
-    echo "                Java debug options. For example, to enable a Java debugger to attach to the Solr JVM"
-    echo "                you could pass: -a \"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18983\""
-    echo "                In most cases, you should wrap the additional parameters in double quotes."
+    echo "                  Java debug options. For example, to enable a Java debugger to attach to the Solr JVM"
+    echo "                  you could pass: -a \"-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=18983\""
+    echo "                  In most cases, you should wrap the additional parameters in double quotes."
     echo ""
     echo "  -noprompt     Don't prompt for input; accept all defaults when running examples that accept user input"
     echo ""
@@ -187,13 +183,11 @@ function print_usage() {
     echo ""
     echo "  -k <key>      Stop key; default is solrrocks"
     echo ""
-    echo "  -p <port>     Specify the port the Solr HTTP listener is bound to; default is 8983"
+    echo "  -p <port>     Specify the port the Solr HTTP listener is bound to"
     echo ""
     echo "  -all          Find and stop all running Solr servers on this host"
     echo ""
-    echo "  -V            Verbose messages from this script"
-    echo ""
-    echo "NOTE: If port is not specified, then all running Solr servers are stopped."
+    echo "  NOTE: To see if any Solr servers are running, do: solr -i"
     echo ""
   elif [ "$CMD" == "healthcheck" ]; then
     echo ""
@@ -309,7 +303,7 @@ function get_info() {
         port=`jetty_port "$ID"`
         if [ "$port" != "" ]; then
           echo ""
-          echo "Found Solr process $ID running on port $port"
+          echo "Solr process $ID running on port $port"
           run_tool status -solr http://localhost:$port/solr
           echo ""
        fi
@@ -324,7 +318,7 @@ function get_info() {
           port=`jetty_port "$ID"`
           if [ "$port" != "" ]; then
             echo ""
-            echo "Found Solr process $ID running on port $port"
+            echo "Solr process $ID running on port $port"
             run_tool status -solr http://localhost:$port/solr
             echo ""
           fi
@@ -487,7 +481,7 @@ if [[ "$SCRIPT_CMD" == "create_core" ||
               CREATE_CONFIGSET="$2"
               shift 2
           ;;
-          -shards)
+          -s|-shards)
               if [[ "$2" == "" || "${2:0:1}" == "-" ]]; then
                 print_usage "$SCRIPT_CMD" "Shard count is required when using the $1 option!"
                 exit 1
@@ -495,7 +489,7 @@ if [[ "$SCRIPT_CMD" == "create_core" ||
               CREATE_NUM_SHARDS="$2"
               shift 2
           ;;
-          -replicationFactor)
+          -rf|-replicationFactor)
               if [[ "$2" == "" || "${2:0:1}" == "-" ]]; then
                 print_usage "$SCRIPT_CMD" "Replication factor is required when using the $1 option!"
                 exit 1
@@ -592,12 +586,18 @@ if [ $# -gt 0 ]; then
               exit 1
             fi
 
-            # see if the arg value is relative to the tip vs full path
-            if [[ $2 != /* ]] && [[ -d "$SOLR_TIP/$2" ]]; then
-              SOLR_SERVER_DIR="$SOLR_TIP/$2"
+            if [[ "$2" == "." || "$2" == "./" || "$2" == ".." || "$2" == "../" ]]; then
+              SOLR_SERVER_DIR=`pwd`/$2
             else
-              SOLR_SERVER_DIR="$2"
+              # see if the arg value is relative to the tip vs full path
+              if [[ $2 != /* ]] && [[ -d "$SOLR_TIP/$2" ]]; then
+                SOLR_SERVER_DIR="$SOLR_TIP/$2"
+              else
+                SOLR_SERVER_DIR="$2"
+              fi
             fi
+            # resolve it to an absolute path
+            SOLR_SERVER_DIR=`cd "$SOLR_SERVER_DIR"; pwd`
             shift 2
         ;;
         -s|-solr.home)
@@ -810,7 +810,7 @@ if [ "$EXAMPLE" != "" ]; then
             shift
         ;;
         techproducts)
-            SOLR_HOME="$SOLR_TIP/server/solr"
+            SOLR_HOME="$SOLR_SERVER_DIR/solr"
             EXAMPLE_CONFIGSET=sample_techproducts_configs
             shift
         ;;
@@ -819,7 +819,7 @@ if [ "$EXAMPLE" != "" ]; then
             shift
         ;;
         schemaless)
-            SOLR_HOME="$SOLR_TIP/server/solr"
+            SOLR_HOME="$SOLR_SERVER_DIR/solr"
             EXAMPLE_CONFIGSET=data_driven_schema_configs
             shift
         ;;
@@ -830,6 +830,11 @@ if [ "$EXAMPLE" != "" ]; then
     esac
 fi
 
+if [[ "$FG" == "true" && "$EXAMPLE" != "" ]]; then
+  FG="false"
+  echo -e "\nWARNING: Foreground mode (-f) not supported when running examples.\n"
+fi
+
 if [ "$STOP_KEY" == "" ]; then
   STOP_KEY="solrrocks"
 fi
@@ -876,9 +881,8 @@ if [[ "$SCRIPT_CMD" == "start" ]]; then
   fi
 
   if [ "$SOLR_PID" != "" ]; then
-    echo -e "\nSolr already running on port $SOLR_PORT (pid: $SOLR_PID)!"
-    echo -e "Please use the 'restart' command if you want to restart this node.\n"
-    exit
+    echo -e "\nPort $SOLR_PORT is already being used by another process (pid: $SOLR_PID)\n"
+    exit 1
   fi
 else
   # either stop or restart
@@ -891,7 +895,10 @@ else
   if [ "$SOLR_PID" != "" ]; then
     stop_solr "$SOLR_SERVER_DIR" "$SOLR_PORT" "$STOP_KEY" "$SOLR_PID"
   else
-    echo -e "No process found for Solr node running on port $SOLR_PORT"
+    if [ "$SCRIPT_CMD" == "stop" ]; then
+      echo -e "No process found for Solr node running on port $SOLR_PORT"
+      exit 1
+    fi
   fi
 fi
 
@@ -964,12 +971,17 @@ fi
 
 # These are useful for attaching remove profilers like VisualVM/JConsole
 if [ "$ENABLE_REMOTE_JMX_OPTS" == "true" ]; then
+
+  if [ "$RMI_PORT" == "" ]; then
+    RMI_PORT=1$SOLR_PORT
+  fi
+
   REMOTE_JMX_OPTS="-Dcom.sun.management.jmxremote \
 -Dcom.sun.management.jmxremote.local.only=false \
 -Dcom.sun.management.jmxremote.ssl=false \
 -Dcom.sun.management.jmxremote.authenticate=false \
--Dcom.sun.management.jmxremote.port=10${SOLR_PORT: -2} \
--Dcom.sun.management.jmxremote.rmi.port=10${SOLR_PORT: -2}"
+-Dcom.sun.management.jmxremote.port=$RMI_PORT \
+-Dcom.sun.management.jmxremote.rmi.port=$RMI_PORT"
 
   # if the host is set, then set that as the rmi server hostname
   if [ "$SOLR_HOST" != "" ]; then
@@ -1013,24 +1025,34 @@ function launch_solr() {
 
   if $verbose ; then
     echo -e "\nStarting Solr using the following settings:"
+    echo -e "    JAVA            = $JAVA"
     echo -e "    SOLR_SERVER_DIR = $SOLR_SERVER_DIR"
     echo -e "    SOLR_HOME       = $SOLR_HOME"
-    echo -e "    JAVA            = $JAVA"
     echo -e "    SOLR_HOST       = $SOLR_HOST"
     echo -e "    SOLR_PORT       = $SOLR_PORT"
+    echo -e "    STOP_PORT       = $STOP_PORT"
+    echo -e "    SOLR_JAVA_MEM   = $SOLR_JAVA_MEM"
     echo -e "    GC_TUNE         = $GC_TUNE"
     echo -e "    GC_LOG_OPTS     = $GC_LOG_OPTS"
-    echo -e "    SOLR_JAVA_MEM   = $SOLR_JAVA_MEM"
-    echo -e "    REMOTE_JMX_OPTS = $REMOTE_JMX_OPTS"
-    echo -e "    CLOUD_MODE_OPTS = $CLOUD_MODE_OPTS"
     echo -e "    SOLR_TIMEZONE   = $SOLR_TIMEZONE"
-    
+
+    if [ "$SOLR_MODE" == "solrcloud" ]; then
+      echo -e "    CLOUD_MODE_OPTS = $CLOUD_MODE_OPTS"
+    fi
+
     if [ "$SOLR_OPTS" != "" ]; then
       echo -e "    SOLR_OPTS        = $SOLR_OPTS"
     fi
+
     if [ "$SOLR_ADDL_ARGS" != "" ]; then
       echo -e "    SOLR_ADDL_ARGS   = $SOLR_ADDL_ARGS"
     fi
+
+    if [ "$ENABLE_REMOTE_JMX_OPTS" == "true" ]; then
+      echo -e "    RMI_PORT        = $RMI_PORT"
+      echo -e "    REMOTE_JMX_OPTS = $REMOTE_JMX_OPTS"
+    fi
+    echo -e "\n"
   fi
     
   # need to launch solr from the server dir

Modified: lucene/dev/branches/lucene2878/solr/bin/solr.cmd
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/bin/solr.cmd?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/bin/solr.cmd (original)
+++ lucene/dev/branches/lucene2878/solr/bin/solr.cmd Fri Dec  5 15:24:11 2014
@@ -38,6 +38,15 @@ IF EXIST "%SOLR_INCLUDE%" CALL "%SOLR_IN
 
 REM Verify Java is available
 IF DEFINED SOLR_JAVA_HOME set "JAVA_HOME=%SOLR_JAVA_HOME%"
+REM Try to detect JAVA_HOME from the registry
+IF NOT DEFINED JAVA_HOME (
+  FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set CurVer=%%B
+  FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\!CurVer!" /v JavaHome') DO (
+    set JAVA_HOME=%%B
+    @echo Detected JAVA_HOME=%%B
+  )
+)
+
 IF NOT DEFINED JAVA_HOME goto need_java_home
 set JAVA_HOME=%JAVA_HOME:"=%
 "%JAVA_HOME%"\bin\java -version:1.8 -version > nul 2>&1
@@ -172,8 +181,6 @@ goto done
 @echo.
 @echo  -all        Find and stop all running Solr servers on this host
 @echo.
-@echo  -V          Verbose messages from this script
-@echo.
 goto done
 
 :healthcheck_usage
@@ -505,7 +512,7 @@ IF "%STOP_KEY%"=="" set STOP_KEY=solrroc
 IF "%SCRIPT_CMD%"=="stop" (
   IF "%SOLR_PORT%"=="" (
     IF "%STOP_ALL%"=="1" (
-      for /f "usebackq" %%i in (`dir /b %SOLR_TIP\bin% ^| findstr /i "^solr-.*\.port$"`) do (
+      for /f "usebackq" %%i in (`dir /b %SOLR_TIP%\bin ^| findstr /i "^solr-.*\.port$"`) do (
         set SOME_SOLR_PORT=
         For /F "Delims=" %%J In (%SOLR_TIP%\bin\%%i) do set SOME_SOLR_PORT=%%~J
         if NOT "!SOME_SOLR_PORT!"=="" (
@@ -587,12 +594,13 @@ IF "%SOLR_MODE%"=="solrcloud" (
 
 REM These are useful for attaching remove profilers like VisualVM/JConsole
 IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
+  IF "!RMI_PORT!"=="" set RMI_PORT=1%SOLR_PORT%
   set REMOTE_JMX_OPTS=-Dcom.sun.management.jmxremote ^
 -Dcom.sun.management.jmxremote.local.only=false ^
 -Dcom.sun.management.jmxremote.ssl=false ^
 -Dcom.sun.management.jmxremote.authenticate=false ^
--Dcom.sun.management.jmxremote.port=10%SOLR_PORT:~-2,2% ^
--Dcom.sun.management.jmxremote.rmi.port=10%SOLR_PORT:~-2,2%
+-Dcom.sun.management.jmxremote.port=!RMI_PORT! ^
+-Dcom.sun.management.jmxremote.rmi.port=!RMI_PORT!
 
 IF NOT "%SOLR_HOST%"=="" set REMOTE_JMX_OPTS=%REMOTE_JMX_OPTS% -Djava.rmi.server.hostname=%SOLR_HOST%
 ) ELSE (
@@ -636,18 +644,28 @@ IF "%verbose%"=="1" (
     @echo     SOLR_HOME       = %SOLR_HOME%
     @echo     SOLR_HOST       = %SOLR_HOST%
     @echo     SOLR_PORT       = %SOLR_PORT%
+    @echo     STOP_PORT       = %STOP_PORT%
+    @echo     SOLR_JAVA_MEM   = %SOLR_JAVA_MEM%
     @echo     GC_TUNE         = !GC_TUNE!
     @echo     GC_LOG_OPTS     = %GC_LOG_OPTS%
-    @echo     SOLR_JAVA_MEM   = %SOLR_JAVA_MEM%
-    @echo     REMOTE_JMX_OPTS = %REMOTE_JMX_OPTS%
-    @echo     CLOUD_MODE_OPTS = %CLOUD_MODE_OPTS%
     @echo     SOLR_TIMEZONE   = %SOLR_TIMEZONE%
+
+    IF "%SOLR_MODE%"=="solrcloud" (
+      @echo     CLOUD_MODE_OPTS = %CLOUD_MODE_OPTS%
+    )
+
     IF NOT "%SOLR_OPTS%"=="" (
       @echo     SOLR_OPTS       = %SOLR_OPTS%
     )
+
     IF NOT "%SOLR_ADDL_ARGS%"=="" (
       @echo     SOLR_ADDL_ARGS  = %SOLR_ADDL_ARGS%
     )
+
+    IF "%ENABLE_REMOTE_JMX_OPTS%"=="true" (
+        @echo     RMI_PORT        = !RMI_PORT!
+        @echo     REMOTE_JMX_OPTS = %REMOTE_JMX_OPTS%
+    )
 )
 
 set START_OPTS=-Duser.timezone=%SOLR_TIMEZONE% -Djava.net.preferIPv4Stack=true
@@ -887,7 +905,7 @@ goto done
 :get_info
 REM Find all Java processes, correlate with those listening on a port
 REM and then try to contact via that port using the status tool
-for /f "usebackq" %%i in (`dir /b %SOLR_TIP\bin% ^| findstr /i "^solr-.*\.port$"`) do (
+for /f "usebackq" %%i in (`dir /b %SOLR_TIP%\bin ^| findstr /i "^solr-.*\.port$"`) do (
   set SOME_SOLR_PORT=
   For /F "Delims=" %%J In (%SOLR_TIP%\bin\%%i) do set SOME_SOLR_PORT=%%~J
   if NOT "!SOME_SOLR_PORT!"=="" (
@@ -994,7 +1012,7 @@ IF "!CREATE_REPFACT!"=="" set CREATE_REP
 
 REM Find a port that Solr is running on
 if "!CREATE_PORT!"=="" (
-  for /f "usebackq" %%i in (`dir /b %SOLR_TIP\bin% ^| findstr /i "^solr-.*\.port$"`) do (
+  for /f "usebackq" %%i in (`dir /b %SOLR_TIP%\bin ^| findstr /i "^solr-.*\.port$"`) do (
     set SOME_SOLR_PORT=
     For /F "Delims=" %%J In (%SOLR_TIP%\bin\%%i) do set SOME_SOLR_PORT=%%~J
     if NOT "!SOME_SOLR_PORT!"=="" (

Modified: lucene/dev/branches/lucene2878/solr/bin/solr.in.cmd
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/bin/solr.in.cmd?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/bin/solr.in.cmd (original)
+++ lucene/dev/branches/lucene2878/solr/bin/solr.in.cmd Fri Dec  5 15:24:11 2014
@@ -63,6 +63,9 @@ REM JMX savvy tools like VisualVM remote
 REM (recommended in production environments)
 set ENABLE_REMOTE_JMX_OPTS=true
 
+REM The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
+REM set RMI_PORT=18983
+
 REM Anything you add to the SOLR_OPTS variable will be included in the java
 REM start command line as-is, in ADDITION to other options. If you specify the
 REM -a option on start script, those options will be appended as well. Examples:

Modified: lucene/dev/branches/lucene2878/solr/bin/solr.in.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/bin/solr.in.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/bin/solr.in.sh (original)
+++ lucene/dev/branches/lucene2878/solr/bin/solr.in.sh Fri Dec  5 15:24:11 2014
@@ -61,6 +61,9 @@ GC_TUNE="-XX:NewRatio=3 \
 # (recommended in production environments)
 ENABLE_REMOTE_JMX_OPTS="true"
 
+# The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here
+# RMI_PORT=18983
+
 # Anything you add to the SOLR_OPTS variable will be included in the java
 # start command line as-is, in ADDITION to other options. If you specify the
 # -a option on start script, those options will be appended as well. Examples:

Modified: lucene/dev/branches/lucene2878/solr/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/build.xml?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/build.xml (original)
+++ lucene/dev/branches/lucene2878/solr/build.xml Fri Dec  5 15:24:11 2014
@@ -40,9 +40,7 @@
   <!-- ========================================================================= -->
  
   <target name="example" description="Creates a runnable example configuration."
-          depends="dist-contrib,dist-war">
-    <copy file="${dist}/${fullnamever}.war"
-          tofile="${server.dir}/webapps/${ant.project.name}.war"/>
+          depends="dist-contrib,build-war">
     <jar destfile="${example}/exampledocs/post.jar"
          basedir="${dest}/solr-core/classes/java"
          includes="org/apache/solr/util/SimplePostTool*.class">
@@ -333,7 +331,7 @@
   
   <target name="dist"
           description="Creates the Solr distribution files."
-          depends="dist-solrj, dist-core, dist-test-framework, dist-contrib, dist-war" />
+          depends="dist-solrj, dist-core, dist-test-framework, dist-contrib, build-war" />
  
   <target name="dist-test-framework" depends="init-dist"
           description="Creates the Solr test-framework JAR.">
@@ -347,7 +345,7 @@
     <contrib-crawl target="dist" failonerror="true" />
   </target>
   
-  <target name="dist-war"
+  <target name="build-war"
           description="Creates the Solr WAR Distribution file.">
     <ant dir="webapp" target="dist" inheritall="false">
       <propertyset refid="uptodate.and.compiled.properties"/>

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/clean.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/clean.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/clean.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/clean.sh Fri Dec  5 15:24:11 2014
@@ -13,8 +13,8 @@ cd ..
 
 for (( i=1; i <= $numServers; i++ ))
 do
-  rm -r -f example$i
+  rm -r -f server$i
 done
 
-rm -r -f examplezk
-rm -r -f example-lastlogs
\ No newline at end of file
+rm -r -f serverzk
+rm -r -f server-lastlogs
\ No newline at end of file

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/cli-test-solrcloud-start.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/cli-test-solrcloud-start.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/cli-test-solrcloud-start.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/cli-test-solrcloud-start.sh Fri Dec  5 15:24:11 2014
@@ -1,51 +1,53 @@
 #!/usr/bin/env bash
 
+# TODO: !OUT OF DATE!
+
 cd ..
 
-rm -r -f example2
-rm -r -f example3
-rm -r -f example4
-rm -r -f example5
-rm -r -f example6
+rm -r -f server2
+rm -r -f server3
+rm -r -f server4
+rm -r -f server5
+rm -r -f server6
 
 rm -r -f dist
 rm -r -f build
-rm -r -f example/solr/zoo_data
-rm -r -f example/solr/data
-rm -f example/example.log
+rm -r -f server/solr/zoo_data
+rm -r -f server/solr/data
+rm -f server/server.log
 
 ant example dist
 
-cp -r -f example example2
-cp -r -f example example3
-cp -r -f example example4
-cp -r -f example example5
-cp -r -f example example6
+cp -r -f server server2
+cp -r -f server server3
+cp -r -f server server4
+cp -r -f server server5
+cp -r -f server server6
 
 # first try uploading a conf dir
-java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:9983 -confdir example/solr/collection1/conf -confname conf1 -solrhome example/solr -runzk 8983
+java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:9983 -confdir server/solr/collection1/conf -confname conf1 -solrhome server/solr -runzk 8983
 
 # upload a second conf set so we avoid single conf auto linking
-java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:9983 -confdir example/solr/collection1/conf -confname conf2 -solrhome example/solr -runzk 8983
+java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd upconfig -zkhost 127.0.0.1:9983 -confdir server/solr/collection1/conf -confname conf2 -solrhome server/solr -runzk 8983
 
 # now try linking a collection to a conf set
-java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -zkhost 127.0.0.1:9983 -collection collection1 -confname conf1 -solrhome example/solr -runzk 8983
+java -classpath lib/*:dist/*:build/lucene-libs/* org.apache.solr.cloud.ZkCLI -cmd linkconfig -zkhost 127.0.0.1:9983 -collection collection1 -confname conf1 -solrhome server/solr -runzk 8983
 
 
-cd example
-java -DzkRun -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -jar start.jar 1>example.log 2>&1 &
+cd server
+java -DzkRun -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -jar start.jar 1>server.log 2>&1 &
 
-cd ../example2
-java -Djetty.port=7574 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6574 -DSTOP.KEY=key -jar start.jar 1>example2.log 2>&1 &
+cd ../server2
+java -Djetty.port=7574 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6574 -DSTOP.KEY=key -jar start.jar 1>server2.log 2>&1 &
 
-cd ../example3
-java -Djetty.port=7575 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6575 -DSTOP.KEY=key -jar start.jar 1>example3.log 2>&1 &
+cd ../server3
+java -Djetty.port=7575 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6575 -DSTOP.KEY=key -jar start.jar 1>server3.log 2>&1 &
 
-cd ../example4
-java -Djetty.port=7576 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6576 -DSTOP.KEY=key -jar start.jar 1>example4.log 2>&1 &
+cd ../server4
+java -Djetty.port=7576 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6576 -DSTOP.KEY=key -jar start.jar 1>server4.log 2>&1 &
 
-cd ../example5
-java -Djetty.port=7577 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6577 -DSTOP.KEY=key -jar start.jar 1>example5.log 2>&1 &
+cd ../server5
+java -Djetty.port=7577 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6577 -DSTOP.KEY=key -jar start.jar 1>server5.log 2>&1 &
 
-cd ../example6
-java -Djetty.port=7578 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6578 -DSTOP.KEY=key -jar start.jar 1>example6.log 2>&1 &
+cd ../server6
+java -Djetty.port=7578 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6578 -DSTOP.KEY=key -jar start.jar 1>server6.log 2>&1 &

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/functions.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/functions.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/functions.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/functions.sh Fri Dec  5 15:24:11 2014
@@ -9,8 +9,8 @@ rebuild() {
 	cd ..
 	rm -r -f dist
 	rm -r -f build
-	rm -r -f example/solr/zoo_data
-	rm -f example/example.log
+	rm -r -f server/solr/zoo_data
+	rm -f server/server.log
 	ant example dist
 }
 
@@ -22,8 +22,8 @@ setports() {
 reinstall() {
 	echo "Reinstalling instance $1"
 	cd ..
-	rm -rf  example$1
-	cp -r -f example example$1
+	rm -rf  server$1
+	cp -r -f server server$1
 }
 
 start() {
@@ -33,14 +33,14 @@ start() {
 	echo "Starting instance $1"
 
 	setports $1
-	cd ../example$1
-	java $JAVA_OPTS -Djetty.port=$PORT $OPT -DSTOP.PORT=$STOP_PORT -DSTOP.KEY=key -jar start.jar 1>example$1.log 2>&1 &
+	cd ../server$1
+	java $JAVA_OPTS -Djetty.port=$PORT $OPT -DSTOP.PORT=$STOP_PORT -DSTOP.KEY=key -jar start.jar 1>server$1.log 2>&1 &
 }
 
 stop() {
 	echo "Stopping instance $1"
 	setports $1
-	cd ../example$1
+	cd ../server$1
 	java -DSTOP.PORT=$STOP_PORT -DSTOP.KEY=key -jar start.jar --stop
 }
 
@@ -61,13 +61,13 @@ status() {
 }
 
 cleanlogs() {
-    cd ../example$1
-	mv example$1.log example$1.oldlog
+    cd ../server$1
+	mv server$1.log server$1.oldlog
 }
 
 taillogs() {
-	cd ../example$1
-	tail -f example$1.log
+	cd ../server$1
+	tail -f server$1.log
 }
 
 createshard() {

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-extzk-start.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-extzk-start.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-extzk-start.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-extzk-start.sh Fri Dec  5 15:24:11 2014
@@ -1,45 +1,47 @@
 #!/bin/bash
 
+# TODO: !OUT OF DATE!
+
 zkaddress = localhost:2181/solr
 
 cd ..
 
-rm -r -f example2
-rm -r -f example3
-rm -r -f example4
-rm -r -f example5
-rm -r -f example6
+rm -r -f server2
+rm -r -f server3
+rm -r -f server4
+rm -r -f server5
+rm -r -f server6
 
 rm -r -f dist
 rm -r -f build
-rm -r -f example/solr/zoo_data
-rm -r -f example/solr/collection1/data
-rm -f example/example.log
+rm -r -f server/solr/zoo_data
+rm -r -f server/solr/collection1/data
+rm -f server/server.log
 
 ant example dist
 
-cp -r -f example example2
-cp -r -f example example3
-cp -r -f example example4
-cp -r -f example example5
-cp -r -f example example6
+cp -r -f server server2
+cp -r -f server server3
+cp -r -f server server4
+cp -r -f server server5
+cp -r -f server server6
 
-java -classpath "example/solr-webapp/webapp/WEB-INF/lib/*:example/lib/ext/" org.apache.solr.cloud.ZkController "$zkaddress" 8983 example/solr/conf conf1
+java -classpath "server/solr-webapp/webapp/WEB-INF/lib/*:server/lib/ext/" org.apache.solr.cloud.ZkController "$zkaddress" 8983 server/solr/conf conf1
 
-cd example
-java -DzkHost="$zkaddress" -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -jar start.jar 1>example.log 2>&1 &
+cd server
+java -DzkHost="$zkaddress" -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -jar start.jar 1>server.log 2>&1 &
 
-cd ../example2
-java -Djetty.port=7574 -DzkHost="$zkaddress" -DSTOP.PORT=6574 -DSTOP.KEY=key -jar start.jar 1>example2.log 2>&1 &
+cd ../server2
+java -Djetty.port=7574 -DzkHost="$zkaddress" -DSTOP.PORT=6574 -DSTOP.KEY=key -jar start.jar 1>server2.log 2>&1 &
 
-cd ../example3
-java -Djetty.port=7575 -DzkHost="$zkaddress" -DSTOP.PORT=6575 -DSTOP.KEY=key -jar start.jar 1>example3.log 2>&1 &
+cd ../server3
+java -Djetty.port=7575 -DzkHost="$zkaddress" -DSTOP.PORT=6575 -DSTOP.KEY=key -jar start.jar 1>server3.log 2>&1 &
 
-cd ../example4
-java -Djetty.port=7576 -DzkHost="$zkaddress" -DSTOP.PORT=6576 -DSTOP.KEY=key -jar start.jar 1>example4.log 2>&1 &
+cd ../server4
+java -Djetty.port=7576 -DzkHost="$zkaddress" -DSTOP.PORT=6576 -DSTOP.KEY=key -jar start.jar 1>server4.log 2>&1 &
 
-cd ../example5
-java -Djetty.port=7577 -DzkHost="$zkaddress" -DSTOP.PORT=6577 -DSTOP.KEY=key -jar start.jar 1>example5.log 2>&1 &
+cd ../server5
+java -Djetty.port=7577 -DzkHost="$zkaddress" -DSTOP.PORT=6577 -DSTOP.KEY=key -jar start.jar 1>server5.log 2>&1 &
 
-cd ../example6
-java -Djetty.port=7578 -DzkHost="$zkaddress" -DSTOP.PORT=6578 -DSTOP.KEY=key -jar start.jar 1>example6.log 2>&1 &
+cd ../server6
+java -Djetty.port=7578 -DzkHost="$zkaddress" -DSTOP.PORT=6578 -DSTOP.KEY=key -jar start.jar 1>server6.log 2>&1 &

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-multi-start.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-multi-start.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-multi-start.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-multi-start.sh Fri Dec  5 15:24:11 2014
@@ -1,45 +1,47 @@
 #!/bin/bash
 
+# TODO: !OUT OF DATE!
+
 # starts up the multicore example
 
 cd ..
 
-rm -r -f example2
-rm -r -f example3
-rm -r -f example4
-rm -r -f example5
-rm -r -f example6
+rm -r -f server2
+rm -r -f server3
+rm -r -f server4
+rm -r -f server5
+rm -r -f server6
 
 rm -r -f dist
 rm -r -f build
-rm -r -f example/solr/zoo_data
-rm -r -f example/solr/collection1/data
-rm -f example/example.log
+rm -r -f server/solr/zoo_data
+rm -r -f server/solr/collection1/data
+rm -f server/server.log
 
 ant example dist
 
-cp -r -f example example2
-cp -r -f example example3
-cp -r -f example example4
-cp -r -f example example5
-cp -r -f example example6
+cp -r -f server server2
+cp -r -f server server3
+cp -r -f server server4
+cp -r -f server server5
+cp -r -f server server6
 
-java -classpath "example/solr-webapp/webapp/WEB-INF/lib/*:example/lib/ext/" org.apache.solr.cloud.ZkCLI -cmd upconf -zkhost 127.0.0.1:9983 -solrhome example/multicore -runzk 8983
+java -classpath "server/solr-webapp/webapp/WEB-INF/lib/*:server/lib/ext/" org.apache.solr.cloud.ZkCLI -cmd upconf -zkhost 127.0.0.1:9983 -solrhome example/multicore -runzk 8983
 
-cd example
-java -DzkRun -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example.log 2>&1 &
+cd server
+java -DzkRun -DnumShards=2 -DSTOP.PORT=7983 -DSTOP.KEY=key -Dsolr.solr.home=../example/multicore -jar start.jar 1>server.log 2>&1 &
 
-cd ../example2
-java -Djetty.port=7574 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6574 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example2.log 2>&1 &
+cd ../server2
+java -Djetty.port=7574 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6574 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>server2.log 2>&1 &
 
-cd ../example3
-java -Djetty.port=7575 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6575 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example3.log 2>&1 &
+cd ../server3
+java -Djetty.port=7575 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6575 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>server3.log 2>&1 &
 
-cd ../example4
-java -Djetty.port=7576 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6576 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example4.log 2>&1 &
+cd ../server4
+java -Djetty.port=7576 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6576 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>server4.log 2>&1 &
 
-cd ../example5
-java -Djetty.port=7577 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6577 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example5.log 2>&1 &
+cd ../server5
+java -Djetty.port=7577 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6577 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>server5.log 2>&1 &
 
-cd ../example6
-java -Djetty.port=7578 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6578 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>example6.log 2>&1 &
+cd ../server6
+java -Djetty.port=7578 -DzkHost=localhost:9983 -DnumShards=2 -DSTOP.PORT=6578 -DSTOP.KEY=key -Dsolr.solr.home=multicore -jar start.jar 1>server6.log 2>&1 &

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start-existing.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start-existing.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start-existing.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start-existing.sh Fri Dec  5 15:24:11 2014
@@ -17,20 +17,20 @@ die () {
 
 cd ..
 
-cd examplezk
+cd serverzk
 stopPort=1313
 jettyPort=8900
-exec -a jettyzk java -Xmx512m $JAVA_OPTS -Djetty.port=$jettyPort -DhostPort=$jettyPort -DzkRun -DzkHost=localhost:9900/$ZK_CHROOT -DzkRunOnly=true -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>examplezk.log 2>&1 &
-# TODO: we could also remove the default core
+exec -a jettyzk java -Xmx512m $JAVA_OPTS -Djetty.port=$jettyPort -DhostPort=$jettyPort -DzkRun -DzkHost=localhost:9900/$ZK_CHROOT -DzkRunOnly=true -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>serverzk.log 2>&1 &
+
 cd ..
 
-cd example
+cd server
 
 for (( i=1; i <= $numServers; i++ ))
 do
-  echo "starting example$i"
-  cd ../example$i
+  echo "starting server$i"
+  cd ../server$i
   stopPort=`expr $baseStopPort + $i`
   jettyPort=`expr $baseJettyPort + $i`
-  exec -a jetty java -Xmx1g $JAVA_OPTS -Djetty.port=$jettyPort -DzkHost=localhost:9900/$ZK_CHROOT -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>example$i.log 2>&1 &
+  exec -a jetty java -Xmx1g $JAVA_OPTS -Djetty.port=$jettyPort -DzkHost=localhost:9900/$ZK_CHROOT -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>server$i.log 2>&1 &
 done

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/solrcloud-start.sh Fri Dec  5 15:24:11 2014
@@ -25,52 +25,48 @@ cd ..
 
 for (( i=1; i <= $numServers; i++ ))
 do
- rm -r -f example$i
+ echo "try to remove existing directory: server$i"
+ rm -r -f server$i
 done
 
 
 rm -r -f dist
 rm -r -f build
-rm -r -f example/solr/zoo_data
-rm -r -f example/solr/collection1/data
-rm -f example/example.log
+rm -r -f server/solr/zoo_data
+rm -f server/server.log
 
 ant -f ../build.xml clean
 ant example dist
 
-rm -r example/solr-webapp/*
-unzip example/webapps/solr.war -d example/solr-webapp/webapp
+rm -r server/solr-webapp/*
+unzip server/webapps/solr.war -d server/solr-webapp/webapp
 
 for (( i=1; i <= $numServers; i++ ))
 do
- echo "create example$i"
- cp -r -f example example$i
+ echo "create server$i"
+ cp -r -f server server$i
 done
   
-
-rm -r -f examplezk
-cp -r -f example examplezk
-cp core/src/test-files/solr/solr-no-core.xml examplezk/solr/solr.xml
-rm -r -f examplezk/solr/collection1/core.properties
-cd examplezk
+rm -r -f serverzk
+cp -r -f server serverzk
+cp core/src/test-files/solr/solr-no-core.xml serverzk/solr/solr.xml
+rm -r -f serverzk/solr/collection1/core.properties
+cd serverzk
 stopPort=1313
 jettyPort=8900
-exec -a jettyzk java -Xmx512m $JAVA_OPTS -Djetty.port=$jettyPort -DhostPort=$jettyPort -DzkRun=localhost:9900/solr -DzkHost=$zkAddress -DzkRunOnly=true -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>examplezk.log 2>&1 &
+exec -a jettyzk java -Xmx512m $JAVA_OPTS -Djetty.port=$jettyPort -DhostPort=$jettyPort -DzkRun=localhost:9900/solr -DzkHost=$zkAddress -DzkRunOnly=true -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>serverzk.log 2>&1 &
 cd ..
 
 # upload config files
-java -classpath "example1/solr-webapp/webapp/WEB-INF/lib/*:example/lib/ext/*" $JAVA_OPTS org.apache.solr.cloud.ZkCLI -cmd bootstrap -zkhost $zkAddress -solrhome example1/solr
+java -classpath "server/solr-webapp/webapp/WEB-INF/lib/*:server/lib/ext/*" $JAVA_OPTS org.apache.solr.cloud.ZkCLI -zkhost $zkAddress -cmd upconfig --confdir server/solr/configsets/basic_configs --confname basic_configs
   
-cd example
+cd server
 
 for (( i=1; i <= $numServers; i++ ))
 do
-  echo "starting example$i"
-  cd ../example$i
+  echo "starting server$i"
+  cd ../server$i
   stopPort=`expr $baseStopPort + $i`
   jettyPort=`expr $baseJettyPort + $i`
-  exec -a jetty java -Xmx1g $JAVA_OPTS -DnumShards=$numShards -Djetty.port=$jettyPort -DzkHost=$zkAddress -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>example$i.log 2>&1 &
+  exec -a jetty java -Xmx1g $JAVA_OPTS -DnumShards=$numShards -Djetty.port=$jettyPort -DzkHost=$zkAddress -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar 1>server$i.log 2>&1 &
 done
-
-
-

Modified: lucene/dev/branches/lucene2878/solr/cloud-dev/stop.sh
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/cloud-dev/stop.sh?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/cloud-dev/stop.sh (original)
+++ lucene/dev/branches/lucene2878/solr/cloud-dev/stop.sh Fri Dec  5 15:24:11 2014
@@ -11,22 +11,22 @@ die () {
 
 [ "$#" -eq 1 ] || die "1 argument required, $# provided, usage: stop.sh {numServers}"
 
-cd ../example
+cd ../server
 
 for (( i=1; i <= $numServers; i++ ))
 do
   stopPort=`expr $baseStopPort + $i`
-  echo "stopping example$i, stop port is $stopPort"
-  cd ../example$i
+  echo "stopping server$i, stop port is $stopPort"
+  cd ../server$i
   java -DSTOP.PORT=$stopPort -DSTOP.KEY=key -jar start.jar --stop
 done
 
 
-mkdir ../example-lastlogs
+mkdir ../server-lastlogs
 
 for (( i=1; i <= $numServers; i++ ))
 do
-   cd ../example$i
+   cd ../server$i
 
   jettyPort=`expr $baseJettyPort + $i`
   echo "Make sure jetty stops and wait for it: $jettyPort"
@@ -41,8 +41,8 @@ do
   fi
   
   # save the last shutdown logs
-  echo "copy example$i.log to lastlogs"
-  cp -r -f example$i.log ../example-lastlogs/example-last$i.log
+  echo "copy server$i.log to lastlogs"
+  cp -r -f server$i.log ../server-lastlogs/server-last$i.log
 done
 
 # stop zk runner

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler-extras/src/java/org/apache/solr/handler/dataimport/TikaEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler-extras/src/java/org/apache/solr/handler/dataimport/TikaEntityProcessor.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler-extras/src/java/org/apache/solr/handler/dataimport/TikaEntityProcessor.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler-extras/src/java/org/apache/solr/handler/dataimport/TikaEntityProcessor.java Fri Dec  5 15:24:11 2014
@@ -69,6 +69,7 @@ public class TikaEntityProcessor extends
 
   @Override
   protected void firstInit(Context context) {
+    super.firstInit(context);
     try {
       String tikaConfigFile = context.getResolvedEntityAttribute("tikaConfig");
       if (tikaConfigFile == null) {

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHCacheSupport.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHCacheSupport.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHCacheSupport.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/DIHCacheSupport.java Fri Dec  5 15:24:11 2014
@@ -44,28 +44,11 @@ public class DIHCacheSupport {
   public DIHCacheSupport(Context context, String cacheImplName) {
     this.cacheImplName = cacheImplName;
     
-    String where = context.getEntityAttribute("where");
-    String cacheKey = context.getEntityAttribute(DIHCacheSupport.CACHE_PRIMARY_KEY);
-    String lookupKey = context.getEntityAttribute(DIHCacheSupport.CACHE_FOREIGN_KEY);
-    if (cacheKey != null && lookupKey == null) {
-      throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
-          "'cacheKey' is specified for the entity "
-              + context.getEntityAttribute("name")
-              + " but 'cacheLookup' is missing");
-      
-    }
-    if (where == null && cacheKey == null) {
-      cacheDoKeyLookup = false;
-    } else {
-      if (where != null) {
-        String[] splits = where.split("=");
-        cacheKey = splits[0];
-        cacheForeignKey = splits[1].trim();
-      } else {
-        cacheForeignKey = lookupKey;
-      }
-      cacheDoKeyLookup = true;
-    }
+    Relation r = new Relation(context);
+    cacheDoKeyLookup = r.doKeyLookup;
+    String cacheKey = r.primaryKey;
+    cacheForeignKey = r.foreignKey;
+    
     context.setSessionAttribute(DIHCacheSupport.CACHE_PRIMARY_KEY, cacheKey,
         Context.SCOPE_ENTITY);
     context.setSessionAttribute(DIHCacheSupport.CACHE_FOREIGN_KEY, cacheForeignKey,
@@ -76,6 +59,48 @@ public class DIHCacheSupport {
         Context.SCOPE_ENTITY);
   }
   
+  static class Relation{
+    protected final boolean doKeyLookup;
+    protected final String foreignKey;
+    protected final String primaryKey;
+    
+    public Relation(Context context) {
+      String where = context.getEntityAttribute("where");
+      String cacheKey = context.getEntityAttribute(DIHCacheSupport.CACHE_PRIMARY_KEY);
+      String lookupKey = context.getEntityAttribute(DIHCacheSupport.CACHE_FOREIGN_KEY);
+      if (cacheKey != null && lookupKey == null) {
+        throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
+            "'cacheKey' is specified for the entity "
+                + context.getEntityAttribute("name")
+                + " but 'cacheLookup' is missing");
+        
+      }
+      if (where == null && cacheKey == null) {
+        doKeyLookup = false;
+        primaryKey = null;
+        foreignKey = null;
+      } else {
+        if (where != null) {
+          String[] splits = where.split("=");
+          primaryKey = splits[0];
+          foreignKey = splits[1].trim();
+        } else {
+          primaryKey = cacheKey;
+          foreignKey = lookupKey;
+        }
+        doKeyLookup = true;
+      }
+    }
+
+    @Override
+    public String toString() {
+      return "Relation "
+          + primaryKey + "="+foreignKey  ;
+    }
+    
+    
+  }
+  
   private DIHCache instantiateCache(Context context) {
     DIHCache cache = null;
     try {

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/java/org/apache/solr/handler/dataimport/EntityProcessorBase.java Fri Dec  5 15:24:11 2014
@@ -48,6 +48,8 @@ public class EntityProcessorBase extends
   protected String onError = ABORT;  
   
   protected DIHCacheSupport cacheSupport = null;
+  
+  protected Zipper zipper;
 
 
   @Override
@@ -56,19 +58,30 @@ public class EntityProcessorBase extends
     if (isFirstInit) {
       firstInit(context);
     }
-    if(cacheSupport!=null) {
-      cacheSupport.initNewParent(context);
-    }   
-    
+    if(zipper!=null){
+      zipper.onNewParent(context);
+    }else{
+      if(cacheSupport!=null) {
+        cacheSupport.initNewParent(context);
+      }   
+    }
   }
 
-  /**first time init call. do one-time operations here
+  /**
+   * first time init call. do one-time operations here
+   * it's necessary to call it from the overridden method,
+   * otherwise it throws NPE on accessing zipper from nextRow()
    */
   protected void firstInit(Context context) {
     entityName = context.getEntityAttribute("name");
     String s = context.getEntityAttribute(ON_ERROR);
     if (s != null) onError = s;
-    initCache(context);
+    
+    zipper = Zipper.createOrNull(context);
+    
+    if(zipper==null){
+      initCache(context);
+    }
     isFirstInit = false;
   }
 
@@ -109,25 +122,29 @@ public class EntityProcessorBase extends
   }
   
   protected Map<String, Object> getNext() {
-    if(cacheSupport==null) {
-      try {
-        if (rowIterator == null)
+    if(zipper!=null){
+      return zipper.supplyNextChild(rowIterator);
+    }else{
+      if(cacheSupport==null) {
+        try {
+          if (rowIterator == null)
+            return null;
+          if (rowIterator.hasNext())
+            return rowIterator.next();
+          query = null;
+          rowIterator = null;
+          return null;
+        } catch (Exception e) {
+          SolrException.log(log, "getNext() failed for query '" + query + "'", e);
+          query = null;
+          rowIterator = null;
+          wrapAndThrow(DataImportHandlerException.WARN, e);
           return null;
-        if (rowIterator.hasNext())
-          return rowIterator.next();
-        query = null;
-        rowIterator = null;
-        return null;
-      } catch (Exception e) {
-        SolrException.log(log, "getNext() failed for query '" + query + "'", e);
-        query = null;
-        rowIterator = null;
-        wrapAndThrow(DataImportHandlerException.WARN, e);
-        return null;
-      }
-    } else  {
-      return cacheSupport.getCacheData(context, query, rowIterator);
-    }      
+        }
+      } else  {
+        return cacheSupport.getCacheData(context, query, rowIterator);
+      }  
+    }
   }
 
 

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractSqlEntityProcessorTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractSqlEntityProcessorTestCase.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractSqlEntityProcessorTestCase.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/AbstractSqlEntityProcessorTestCase.java Fri Dec  5 15:24:11 2014
@@ -45,8 +45,15 @@ public abstract class AbstractSqlEntityP
   protected boolean useSimpleCaches;
   protected boolean countryEntity;
   protected boolean countryCached;
+  protected boolean countryZipper;
   protected boolean sportsEntity;
   protected boolean sportsCached;
+  protected boolean sportsZipper;
+  
+  protected boolean wrongPeopleOrder ;
+  protected boolean wrongSportsOrder ;
+  protected boolean wrongCountryOrder;
+    
   protected String rootTransformerName;
   protected boolean countryTransformer;
   protected boolean sportsTransformer;    
@@ -65,8 +72,15 @@ public abstract class AbstractSqlEntityP
     useSimpleCaches = false;
     countryEntity = false;
     countryCached = false;
+    countryZipper = false;
     sportsEntity = false;
     sportsCached = false;
+    sportsZipper = false;
+    
+    wrongPeopleOrder = false;
+    wrongSportsOrder = false;
+    wrongCountryOrder= false;
+    
     rootTransformerName = null;
     countryTransformer = false;
     sportsTransformer = false;
@@ -177,9 +191,14 @@ public abstract class AbstractSqlEntityP
     } else {
       countryEntity = true;
       sportsEntity = true;
-      if (numChildren == 1) {
-        countryEntity = random().nextBoolean();
-        sportsEntity = !countryEntity;
+      if(countryZipper||sportsZipper){// zipper tests fully cover nums of children
+        countryEntity = countryZipper;
+        sportsEntity = sportsZipper;
+      }else{// apply default randomization on cached cases
+        if (numChildren == 1) {
+          countryEntity = random().nextBoolean();
+          sportsEntity = !countryEntity;
+        }
       }
       if (countryEntity) {
         countryTransformer = random().nextBoolean();
@@ -212,19 +231,30 @@ public abstract class AbstractSqlEntityP
               + (totalPeople()) + "']");
     }
     if (countryEntity) {
-      if (personNameExists("Jayden")) {
-        String nrName = countryNameByCode("NP");
-        if (nrName != null && nrName.length() > 0) {
-          assertQ(req("NAME_mult_s:Jayden"), "//*[@numFound='1']",
+      {
+        String[] people = getStringsFromQuery("SELECT NAME FROM PEOPLE WHERE DELETED != 'Y'");
+        String man = people[random().nextInt(people.length)];
+        String[] countryNames = getStringsFromQuery("SELECT C.COUNTRY_NAME FROM PEOPLE P "
+            + "INNER JOIN COUNTRIES C ON P.COUNTRY_CODE=C.CODE "
+            + "WHERE P.DELETED!='Y' AND C.DELETED!='Y' AND P.NAME='" + man + "'");
+
+        assertQ(req("{!term f=NAME_mult_s}"+ man), "//*[@numFound='1']",
+            countryNames.length>0?
+             "//doc/str[@name='COUNTRY_NAME_s']='" + countryNames[random().nextInt(countryNames.length)] + "'"
+            :"//doc[count(*[@name='COUNTRY_NAME_s'])=0]");
+      }
+      {
+        String[] countryCodes = getStringsFromQuery("SELECT CODE FROM COUNTRIES WHERE DELETED != 'Y'");
+        String theCode = countryCodes[random().nextInt(countryCodes.length)];
+        int num = numberPeopleByCountryCode(theCode);
+        if(num>0){
+          String nrName = countryNameByCode(theCode);
+          assertQ(req("COUNTRY_CODES_mult_s:"+theCode), "//*[@numFound='" + num + "']",
               "//doc/str[@name='COUNTRY_NAME_s']='" + nrName + "'");
+        }else{ // no one lives there anyway
+          assertQ(req("COUNTRY_CODES_mult_s:"+theCode), "//*[@numFound='" + num + "']");
         }
       }
-      String nrName = countryNameByCode("NR");
-      int num = numberPeopleByCountryCode("NR");
-      if (nrName != null && num > 0) {
-        assertQ(req("COUNTRY_CODES_mult_s:NR"), "//*[@numFound='" + num + "']",
-            "//doc/str[@name='COUNTRY_NAME_s']='" + nrName + "'");
-      }
       if (countryTransformer && !underlyingDataModified) {
         assertQ(req("countryAdded_s:country_added"), "//*[@numFound='"
             + totalPeople() + "']");
@@ -234,24 +264,27 @@ public abstract class AbstractSqlEntityP
       if (!underlyingDataModified) {
         assertQ(req("SPORT_NAME_mult_s:Sailing"), "//*[@numFound='2']");
       }
-      String michaelsName = personNameById(3);
-      String[] michaelsSports = sportNamesByPersonId(3);
-      if (michaelsName != null && michaelsSports.length > 0) {
-        String[] xpath = new String[michaelsSports.length + 1];
-        xpath[0] = "//*[@numFound='1']";
-        int i = 1;
-        for (String ms : michaelsSports) {
-          xpath[i] = "//doc/arr[@name='SPORT_NAME_mult_s']/str[" + i + "]='"
-              + ms + "'";
-          i++;
-        }
-        assertQ(req("NAME_mult_s:" + michaelsName.replaceAll("\\W", "\\\\$0")),
-            xpath);
+      String [] names = getStringsFromQuery("SELECT NAME FROM PEOPLE WHERE DELETED != 'Y'");
+      String name = names[random().nextInt(names.length)];
+      int personId = getIntFromQuery("SELECT ID FROM PEOPLE WHERE DELETED != 'Y' AND NAME='"+name+"'");
+      String[] michaelsSports = sportNamesByPersonId(personId);
+
+      String[] xpath = new String[michaelsSports.length + 1];
+      xpath[0] = "//*[@numFound='1']";
+      int i = 1;
+      for (String ms : michaelsSports) {
+        xpath[i] = "//doc/arr[@name='SPORT_NAME_mult_s']/str='"//[" + i + "]='" don't care about particular order
+            + ms + "'";
+        i++;
       }
+      assertQ(req("NAME_mult_s:" + name.replaceAll("\\W", "\\\\$0")),
+            xpath);
       if (!underlyingDataModified && sportsTransformer) {
         assertQ(req("sportsAdded_s:sport_added"), "//*[@numFound='"
-            + (totalPeople()) + "']");
+            + (totalSportsmen()) + "']");
       }
+      assertQ("checking orphan sport is absent",
+          req("{!term f=SPORT_NAME_mult_s}No Fishing"), "//*[@numFound='0']");
     }
     if (checkDatabaseRequests) {
       Assert.assertTrue("Expecting " + numDatabaseRequests
@@ -304,6 +337,7 @@ public abstract class AbstractSqlEntityP
     }
   }
   
+
   private int getIntFromQuery(String query) throws Exception {
     Connection conn = null;
     Statement s = null;
@@ -367,6 +401,12 @@ public abstract class AbstractSqlEntityP
     return getIntFromQuery("SELECT COUNT(1) FROM PEOPLE WHERE DELETED != 'Y' ");
   }
   
+  public int totalSportsmen() throws Exception {
+    return getIntFromQuery("SELECT COUNT(*) FROM PEOPLE WHERE "
+        + "EXISTS(SELECT ID FROM PEOPLE_SPORTS WHERE PERSON_ID=PEOPLE.ID AND PEOPLE_SPORTS.DELETED != 'Y')"
+        + " AND PEOPLE.DELETED != 'Y'");
+  }
+  
   public boolean countryCodeExists(String cc) throws Exception {
     return getIntFromQuery("SELECT COUNT(1) country_name FROM COUNTRIES WHERE DELETED != 'Y' AND CODE='"
         + cc + "'") > 0;
@@ -574,7 +614,11 @@ public abstract class AbstractSqlEntityP
     sb.append("dataSource=''" + ds + "'' ");
     sb.append(rootTransformerName != null ? "transformer=''"
         + rootTransformerName + "'' " : "");
-    sb.append("query=''SELECT ID, NAME, COUNTRY_CODE FROM PEOPLE WHERE DELETED != 'Y' '' ");
+  
+    sb.append("query=''SELECT ID, NAME, COUNTRY_CODE FROM PEOPLE WHERE DELETED != 'Y' "
+                    +((sportsZipper||countryZipper?"ORDER BY ID":"")
+                     +(wrongPeopleOrder? " DESC":""))+"'' ");
+
     sb.append(deltaQueriesPersonTable());
     sb.append("> \n");
     
@@ -595,9 +639,20 @@ public abstract class AbstractSqlEntityP
         if (useSimpleCaches) {
           sb.append("query=''SELECT CODE, COUNTRY_NAME FROM COUNTRIES WHERE DELETED != 'Y' AND CODE='${People.COUNTRY_CODE}' ''>\n");
         } else {
-          sb.append(random().nextBoolean() ? "cacheKey=''CODE'' cacheLookup=''People.COUNTRY_CODE'' "
-              : "where=''CODE=People.COUNTRY_CODE'' ");
-          sb.append("query=''SELECT CODE, COUNTRY_NAME FROM COUNTRIES'' ");
+          
+          if(countryZipper){// really odd join btw. it sends duped countries 
+            sb.append(random().nextBoolean() ? "cacheKey=''ID'' cacheLookup=''People.ID'' "
+                : "where=''ID=People.ID'' ");
+            sb.append("join=''zipper'' query=''SELECT PEOPLE.ID, CODE, COUNTRY_NAME FROM COUNTRIES"
+                + " JOIN PEOPLE ON COUNTRIES.CODE=PEOPLE.COUNTRY_CODE "
+                + "WHERE PEOPLE.DELETED != 'Y' ORDER BY PEOPLE.ID "+
+                (wrongCountryOrder ? " DESC":"")
+                + "'' ");
+          }else{
+            sb.append(random().nextBoolean() ? "cacheKey=''CODE'' cacheLookup=''People.COUNTRY_CODE'' "
+                : "where=''CODE=People.COUNTRY_CODE'' ");
+            sb.append("query=''SELECT CODE, COUNTRY_NAME FROM COUNTRIES'' ");
+          }
           sb.append("> \n");
         }
       } else {
@@ -623,7 +678,14 @@ public abstract class AbstractSqlEntityP
         } else {
           sb.append(random().nextBoolean() ? "cacheKey=''PERSON_ID'' cacheLookup=''People.ID'' "
               : "where=''PERSON_ID=People.ID'' ");
-          sb.append("query=''SELECT ID, PERSON_ID, SPORT_NAME FROM PEOPLE_SPORTS ORDER BY ID'' ");
+          if(sportsZipper){
+              sb.append("join=''zipper'' query=''SELECT ID, PERSON_ID, SPORT_NAME FROM PEOPLE_SPORTS ORDER BY PERSON_ID"
+                  + (wrongSportsOrder?" DESC" : "")+
+                  "'' ");
+            }
+          else{
+            sb.append("query=''SELECT ID, PERSON_ID, SPORT_NAME FROM PEOPLE_SPORTS ORDER BY ID'' ");
+          }
         }
       } else {
         sb.append("processor=''SqlEntityProcessor'' query=''SELECT ID, SPORT_NAME FROM PEOPLE_SPORTS WHERE DELETED != 'Y' AND PERSON_ID=${People.ID} ORDER BY ID'' ");
@@ -726,7 +788,9 @@ public abstract class AbstractSqlEntityP
     {7,"Noah","NI"},
     {8,"Daniel","NG"},
     {9,"Aiden","NF"},
-    {10,"Anthony","NE"},
+    
+    {21,"Anthony","NE"}, // there is no ID=10 anymore
+    
     {11,"Emma","NL"},
     {12,"Grace","NI"},
     {13,"Hailey","NG"},
@@ -751,7 +815,10 @@ public abstract class AbstractSqlEntityP
     {700, 7, "Boating"},
     {800, 8, "Bodyboarding"},
     {900, 9, "Canoeing"},
-    {1000, 10, "Fishing"},
+    
+    {1000, 10, "No Fishing"}, // orhpaned sport
+    //
+    
     {1100, 11, "Jet Ski"},
     {1110, 11, "Rowing"},
     {1120, 11, "Sailing"},
@@ -760,10 +827,12 @@ public abstract class AbstractSqlEntityP
     {1300, 13, "Kite surfing"},
     {1400, 14, "Parasailing"},
     {1500, 15, "Rafting"},
-    {1600, 16, "Rowing"},
+    //{1600, 16, "Rowing"}, Madison has no sport
     {1700, 17, "Sailing"},
     {1800, 18, "White Water Rafting"},
     {1900, 19, "Water skiing"},
-    {2000, 20, "Windsurfing"}
+    {2000, 20, "Windsurfing"},
+    {2100, 21, "Concrete diving"},
+    {2110, 21, "Bubble rugby"}
   }; 
 }

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/MockSolrEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/MockSolrEntityProcessor.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/MockSolrEntityProcessor.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/MockSolrEntityProcessor.java Fri Dec  5 15:24:11 2014
@@ -31,10 +31,6 @@ public class MockSolrEntityProcessor ext
 
   private int rows;
 
-  public MockSolrEntityProcessor(List<SolrTestCaseJ4.Doc> docsData) {
-    this(docsData, ROWS_DEFAULT);
-  }
-
   public MockSolrEntityProcessor(List<SolrTestCaseJ4.Doc> docsData, int rows) {
     this.docsData = docsData;
     this.rows = rows;

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSolrEntityProcessorUnit.java Fri Dec  5 15:24:11 2014
@@ -31,20 +31,33 @@ public class TestSolrEntityProcessorUnit
   public void testQuery() {
     List<Doc> docs = generateUniqueDocs(2);
 
-    MockSolrEntityProcessor processor = new MockSolrEntityProcessor(docs);
+    MockSolrEntityProcessor processor = createAndInit(docs);
 
     assertExpectedDocs(docs, processor);
     assertEquals(1, processor.getQueryCount());
   }
 
+  private MockSolrEntityProcessor createAndInit(List<Doc> docs) {
+    return createAndInit(docs, SolrEntityProcessor.ROWS_DEFAULT);
+  }
+
   public void testNumDocsGreaterThanRows() {
     List<Doc> docs = generateUniqueDocs(44);
 
-    MockSolrEntityProcessor processor = new MockSolrEntityProcessor(docs, 10);
+    int rowsNum = 10;
+    MockSolrEntityProcessor processor = createAndInit(docs, rowsNum);
     assertExpectedDocs(docs, processor);
     assertEquals(5, processor.getQueryCount());
   }
 
+  private MockSolrEntityProcessor createAndInit(List<Doc> docs, int rowsNum) {
+    MockSolrEntityProcessor processor = new MockSolrEntityProcessor(docs, rowsNum);
+    HashMap<String,String> entityAttrs = new HashMap<String,String>(){{put(SolrEntityProcessor.SOLR_SERVER,"http://route:66/no");}};
+    processor.init(getContext(null, null, null, null, Collections.emptyList(), 
+        entityAttrs));
+    return processor;
+  }
+
   public void testMultiValuedFields() {
     List<Doc> docs = new ArrayList<>();
     List<FldType> types = new ArrayList<>();
@@ -53,7 +66,7 @@ public class TestSolrEntityProcessorUnit
     Doc testDoc = createDoc(types);
     docs.add(testDoc);
 
-    MockSolrEntityProcessor processor = new MockSolrEntityProcessor(docs);
+    MockSolrEntityProcessor processor = createAndInit(docs);
     Map<String, Object> next = processor.nextRow();
     assertNotNull(next);
 

Modified: lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSqlEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSqlEntityProcessor.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSqlEntityProcessor.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestSqlEntityProcessor.java Fri Dec  5 15:24:11 2014
@@ -45,6 +45,60 @@ public class TestSqlEntityProcessor exte
   public void testCachedChildEntities() throws Exception {
     withChildEntities(true, true);
   }
+  
+  @Test
+  public void testSportZipperChildEntities() throws Exception {
+    sportsZipper = true;
+    withChildEntities(true, true);
+  }
+
+  @Test
+  public void testCountryZipperChildEntities() throws Exception {
+    countryZipper = true;
+    withChildEntities(true, true);
+  }
+  
+  @Test
+  public void testBothZipperChildEntities() throws Exception {
+    countryZipper = true;
+    sportsZipper = true;
+    withChildEntities(true, true);
+  }
+  
+  @Test(expected=RuntimeException.class /* DIH exceptions are not propagated, here we capturing assertQ exceptions */)
+  public void testSportZipperChildEntitiesWrongOrder() throws Exception {
+    if(random().nextBoolean()){
+      wrongPeopleOrder = true;
+    }else{
+      wrongSportsOrder = true;
+    }
+    testSportZipperChildEntities();
+  }
+
+  @Test(expected=RuntimeException.class )
+  public void testCountryZipperChildEntitiesWrongOrder() throws Exception {
+    if(random().nextBoolean()){
+      wrongPeopleOrder = true;
+    }else{
+      wrongCountryOrder = true;
+    }
+    testCountryZipperChildEntities();
+  }
+  
+  @Test(expected=RuntimeException.class)
+  public void testBothZipperChildEntitiesWrongOrder() throws Exception {
+    if(random().nextBoolean()){
+      wrongPeopleOrder = true;
+    }else{
+      if(random().nextBoolean()){
+        wrongSportsOrder = true;
+      }else{
+        wrongCountryOrder = true;
+      }
+    }
+    testBothZipperChildEntities();
+  }
+  
   @Test
   @Ignore("broken see SOLR-3857")
   public void testSimpleCacheChildEntities() throws Exception {

Modified: lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/solrconfig.xml?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test-files/extraction/solr/collection1/conf/solrconfig.xml Fri Dec  5 15:24:11 2014
@@ -194,6 +194,18 @@
   
   <requestHandler name="/update/extract" class="org.apache.solr.handler.extraction.ExtractingRequestHandler"/>
 
+  <requestHandler name="/update/extract/lit-def" class="org.apache.solr.handler.extraction.ExtractingRequestHandler">
+    <lst name="defaults">
+      <str name="literal.foo_s">x</str>
+    </lst>
+    <lst name="appends">
+      <str name="literal.bar_s">y</str>
+    </lst>
+    <lst name="invariants">
+      <str name="literal.zot_s">z</str>
+      <str name="uprefix">ignored_</str>
+    </lst>
+  </requestHandler>
 
   <highlighting>
    <!-- Configure the standard fragmenter -->

Modified: lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/contrib/extraction/src/test/org/apache/solr/handler/extraction/ExtractingRequestHandlerTest.java Fri Dec  5 15:24:11 2014
@@ -288,6 +288,74 @@ public class ExtractingRequestHandlerTes
 
   }
 
+  public void testLiteralDefaults() throws Exception {
+
+    // sanity check config
+    loadLocalFromHandler("/update/extract/lit-def",
+                         "extraction/simple.html",
+                         "literal.id", "lit-def-simple");
+    assertU(commit());
+    assertQ(req("q", "id:lit-def-simple")
+            , "//*[@numFound='1']"
+            , "count(//arr[@name='foo_s']/str)=1"
+            , "//arr[@name='foo_s']/str[.='x']"
+            , "count(//arr[@name='bar_s']/str)=1"
+            , "//arr[@name='bar_s']/str[.='y']"
+            , "count(//arr[@name='zot_s']/str)=1"
+            , "//arr[@name='zot_s']/str[.='z']"
+            ); 
+    
+    // override the default foo_s
+    loadLocalFromHandler("/update/extract/lit-def",
+                         "extraction/simple.html",
+                         "literal.foo_s", "1111",
+                         "literal.id", "lit-def-simple");
+    assertU(commit());
+    assertQ(req("q", "id:lit-def-simple")
+            , "//*[@numFound='1']"
+            , "count(//arr[@name='foo_s']/str)=1"
+            , "//arr[@name='foo_s']/str[.='1111']"
+            , "count(//arr[@name='bar_s']/str)=1"
+            , "//arr[@name='bar_s']/str[.='y']"
+            , "count(//arr[@name='zot_s']/str)=1"
+            , "//arr[@name='zot_s']/str[.='z']"
+            ); 
+
+    // pre-pend the bar_s
+    loadLocalFromHandler("/update/extract/lit-def",
+                         "extraction/simple.html",
+                         "literal.bar_s", "2222",
+                         "literal.id", "lit-def-simple");
+    assertU(commit());
+    assertQ(req("q", "id:lit-def-simple")
+            , "//*[@numFound='1']"
+            , "count(//arr[@name='foo_s']/str)=1"
+            , "//arr[@name='foo_s']/str[.='x']"
+            , "count(//arr[@name='bar_s']/str)=2"
+            , "//arr[@name='bar_s']/str[.='2222']"
+            , "//arr[@name='bar_s']/str[.='y']"
+            , "count(//arr[@name='zot_s']/str)=1"
+            , "//arr[@name='zot_s']/str[.='z']"
+            ); 
+
+    // invariant zot_s can not be changed
+    loadLocalFromHandler("/update/extract/lit-def",
+                         "extraction/simple.html",
+                         "literal.zot_s", "3333",
+                         "literal.id", "lit-def-simple");
+    assertU(commit());
+    assertQ(req("q", "id:lit-def-simple")
+            , "//*[@numFound='1']"
+            , "count(//arr[@name='foo_s']/str)=1"
+            , "//arr[@name='foo_s']/str[.='x']"
+            , "count(//arr[@name='bar_s']/str)=1"
+            , "//arr[@name='bar_s']/str[.='y']"
+            , "count(//arr[@name='zot_s']/str)=1"
+            , "//arr[@name='zot_s']/str[.='z']"
+            ); 
+    
+  }
+
   @Test
   public void testPlainTextSpecifyingMimeType() throws Exception {
     ExtractingRequestHandler handler = (ExtractingRequestHandler) h.getCore().getRequestHandler("/update/extract");
@@ -612,7 +680,9 @@ public class ExtractingRequestHandlerTes
     assertQ(req("wdf_nocase:\"Test password protected word doc\""), "//*[@numFound='2']");
   }
   
-  SolrQueryResponse loadLocal(String filename, String... args) throws Exception {
+  SolrQueryResponse loadLocalFromHandler(String handler, String filename, 
+                                         String... args) throws Exception {
+                              
     LocalSolrQueryRequest req = (LocalSolrQueryRequest) req(args);
     try {
       // TODO: stop using locally defined streams once stream.file and
@@ -620,11 +690,15 @@ public class ExtractingRequestHandlerTes
       List<ContentStream> cs = new ArrayList<>();
       cs.add(new ContentStreamBase.FileStream(getFile(filename)));
       req.setContentStreams(cs);
-      return h.queryAndResponse("/update/extract", req);
+      return h.queryAndResponse(handler, req);
     } finally {
       req.close();
     }
   }
 
+  SolrQueryResponse loadLocal(String filename, String... args) throws Exception {
+    return loadLocalFromHandler("/update/extract", filename, args);
+  }
+
 
 }

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/cloud/ZkController.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/cloud/ZkController.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/cloud/ZkController.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/cloud/ZkController.java Fri Dec  5 15:24:11 2014
@@ -24,6 +24,7 @@ import java.net.InetAddress;
 import java.net.NetworkInterface;
 import java.net.URLEncoder;
 import java.net.UnknownHostException;
+import java.nio.charset.StandardCharsets;
 import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -2010,15 +2011,17 @@ public final class ZkController {
 
     Map<String,Object> stateObj = null;
     if (stateData != null && stateData.length > 0) {
-      Object parsedJson = ZkStateReader.fromJSON(stateData);
-      if (parsedJson instanceof Map) {
-        stateObj = (Map<String,Object>)parsedJson;
-      } else if (parsedJson instanceof String) {
-        // old format still in ZK
-        stateObj = new LinkedHashMap<>();
-        stateObj.put("state", (String)parsedJson);
+      // TODO: Remove later ... this is for upgrading from 4.8.x to 4.10.3 (see: SOLR-6732)
+      if (stateData[0] == (byte)'{') {
+        Object parsedJson = ZkStateReader.fromJSON(stateData);
+        if (parsedJson instanceof Map) {
+          stateObj = (Map<String,Object>)parsedJson;
+        } else {
+          throw new SolrException(ErrorCode.SERVER_ERROR, "Leader-initiated recovery state data is invalid! "+parsedJson);
+        }
       } else {
-        throw new SolrException(ErrorCode.SERVER_ERROR, "Leader-initiated recovery state data is invalid! "+parsedJson);
+        // old format still in ZK
+        stateObj = ZkNodeProps.makeMap("state", new String(stateData, StandardCharsets.UTF_8));
       }
     }
 
@@ -2051,7 +2054,7 @@ public final class ZkController {
       log.warn(exc.getMessage(), exc);
     }
     if (stateObj == null)
-      stateObj = new LinkedHashMap<>();
+      stateObj = ZkNodeProps.makeMap();
 
     stateObj.put("state", state);
     // only update the createdBy value if its not set

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java Fri Dec  5 15:24:11 2014
@@ -17,6 +17,21 @@
 
 package org.apache.solr.handler.component;
 
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+
 import org.apache.lucene.index.IndexReaderContext;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.index.ReaderUtil;
@@ -90,22 +105,6 @@ import org.apache.solr.search.grouping.e
 import org.apache.solr.search.grouping.endresulttransformer.SimpleEndResultTransformer;
 import org.apache.solr.util.SolrPluginUtils;
 
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.regex.Pattern;
-
 /**
  * TODO!
  * 
@@ -845,51 +844,33 @@ public class QueryComponent extends Sear
 
     boolean shardQueryIncludeScore = (rb.getFieldFlags() & SolrIndexSearcher.GET_SCORES) != 0 || rb.getSortSpec().includesScore();
     if (distribSinglePass) {
-      String fl = rb.req.getParams().get(CommonParams.FL);
-      if (fl == null) {
-        if (fields.getRequestedFieldNames() == null && fields.wantsAllFields()) {
-          fl = "*";
-        } else  {
-          fl = "";
-          for (String s : fields.getRequestedFieldNames()) {
-            fl += s + ",";
-          }
-        }
-      }
-      if (!fields.wantsField(keyFieldName))  {
-        // the user has not requested the unique key but
-        // we still need to add it otherwise mergeIds can't work
-        if (fl.endsWith(",")) {
-          fl += keyFieldName;
-        } else  {
-          fl += "," + keyFieldName;
-        }
-      }
-      sreq.params.set(CommonParams.FL, updateFl(fl, shardQueryIncludeScore));
-    } else {
-      // in this first phase, request only the unique key field and any fields needed for merging.
-      if (shardQueryIncludeScore) {
-        sreq.params.set(CommonParams.FL, keyFieldName + ",score");
+      String[] fls = rb.req.getParams().getParams(CommonParams.FL);
+      if (fls != null && fls.length > 0 && (fls.length != 1 || !fls[0].isEmpty())) {
+        // If the outer request contains actual FL's use them...
+        sreq.params.set(CommonParams.FL, fls);
       } else {
-        sreq.params.set(CommonParams.FL, keyFieldName);
+        // ... else we need to explicitly ask for all fields, because we are going to add
+        // additional fields below
+        sreq.params.set(CommonParams.FL, "*");
       }
     }
+    StringBuilder additionalFL = new StringBuilder();
+    boolean additionalAdded = false;
+    if (!distribSinglePass || !fields.wantsField(keyFieldName)) 
+      additionalAdded = addFL(additionalFL, keyFieldName, additionalAdded);
+    if ((!distribSinglePass || !fields.wantsScore()) && shardQueryIncludeScore) 
+      additionalAdded = addFL(additionalFL, "score", additionalAdded);
+    if (additionalAdded) sreq.params.add(CommonParams.FL, additionalFL.toString());
 
     rb.addRequest(this, sreq);
   }
-
-
-  String updateFl(String originalFields, boolean includeScoreIfMissing) {
-    if (includeScoreIfMissing && !scorePattern.matcher(originalFields).find()) {
-      return originalFields + ",score";
-    } else {
-      return originalFields;
-    }
+  
+  private boolean addFL(StringBuilder fl, String field, boolean additionalAdded) {
+    if (additionalAdded) fl.append(",");
+    fl.append(field);
+    return true;
   }
 
-  private static final Pattern scorePattern = Pattern.compile("\\bscore\\b");
-
-
   private void mergeIds(ResponseBuilder rb, ShardRequest sreq) {
       List<MergeStrategy> mergeStrategies = rb.getMergeStrategies();
       if(mergeStrategies != null) {
@@ -1263,6 +1244,10 @@ public class QueryComponent extends Sear
           if (sdoc != null) {
             if (returnScores) {
               doc.setField("score", sdoc.score);
+            } else {
+              // Score might have been added (in createMainQuery) to shard-requests (and therefore in shard-response-docs)
+              // Remove score if the outer request did not ask for it returned
+              doc.remove("score");
             }
             if (removeKeyField) {
               doc.removeFields(keyFieldName);
@@ -1323,6 +1308,31 @@ public class QueryComponent extends Sear
       throw new UnsupportedOperationException();
     }
 
+    @Override
+    public int startPosition() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int endPosition() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int startOffset() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public int endOffset() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public BytesRef getPayload() throws IOException {
+      throw new UnsupportedOperationException();
+    }
+
     @Override
     public int nextDoc() throws IOException {
       throw new UnsupportedOperationException();

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/CachedIndexOutput.java Fri Dec  5 15:24:11 2014
@@ -37,7 +37,7 @@ public class CachedIndexOutput extends R
   
   public CachedIndexOutput(BlockDirectory directory, IndexOutput dest,
       int blockSize, String name, Cache cache, int bufferSize) {
-    super(bufferSize);
+    super("dest=" + dest + " name=" + name, bufferSize);
     this.directory = directory;
     this.dest = dest;
     this.blockSize = blockSize;

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/ReusedBufferedIndexOutput.java Fri Dec  5 15:24:11 2014
@@ -43,11 +43,12 @@ public abstract class ReusedBufferedInde
   
   private final Store store;
   
-  public ReusedBufferedIndexOutput() {
-    this(BUFFER_SIZE);
+  public ReusedBufferedIndexOutput(String resourceDescription) {
+    this(resourceDescription, BUFFER_SIZE);
   }
   
-  public ReusedBufferedIndexOutput(int bufferSize) {
+  public ReusedBufferedIndexOutput(String resourceDescription, int bufferSize) {
+    super(resourceDescription);
     checkBufferSize(bufferSize);
     this.bufferSize = bufferSize;
     store = BufferStore.instance(bufferSize);

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/hdfs/HdfsFileWriter.java Fri Dec  5 15:24:11 2014
@@ -38,7 +38,7 @@ public class HdfsFileWriter extends Outp
   public static final int BUFFER_SIZE = 16384;
   
   public HdfsFileWriter(FileSystem fileSystem, Path path) throws IOException {
-    super(getOutputStream(fileSystem, path), BUFFER_SIZE);
+    super("fileSystem=" + fileSystem + " path=" + path, getOutputStream(fileSystem, path), BUFFER_SIZE);
   }
   
   private static final OutputStream getOutputStream(FileSystem fileSystem, Path path) throws IOException {

Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/RunUpdateProcessorFactory.java Fri Dec  5 15:24:11 2014
@@ -94,7 +94,10 @@ class RunUpdateProcessor extends UpdateR
   {
     updateHandler.commit(cmd);
     super.processCommit(cmd);
-    changesSinceCommit = false;
+    if (!cmd.softCommit) {
+      // a hard commit means we don't need to flush the transaction log
+      changesSinceCommit = false;
+    }
   }
 
   /**

Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml Fri Dec  5 15:24:11 2014
@@ -482,6 +482,21 @@
     </lst>
   </requestHandler>
 
+  <requestHandler name="/search-facet-def" class="solr.SearchHandler" >
+    <lst name="defaults">
+      <str name="facet.field">foo_s</str>
+    </lst>
+    <lst name="appends">
+      <str name="facet.query">foo_s:bar</str>
+    </lst>
+  </requestHandler>
+  <requestHandler name="/search-facet-invariants" class="solr.SearchHandler" >
+    <lst name="invariants">
+      <str name="facet.field">foo_s</str>
+      <str name="facet.query">foo_s:bar</str>
+    </lst>
+  </requestHandler>
+
   <admin>
     <defaultQuery>solr</defaultQuery>
     <gettableFiles>solrconfig.xml schema.xml admin-extra.html</gettableFiles>

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/cloud/HttpPartitionTest.java Fri Dec  5 15:24:11 2014
@@ -18,6 +18,7 @@ package org.apache.solr.cloud;
  */
 
 import java.io.File;
+import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -40,9 +41,12 @@ import org.apache.solr.common.SolrInputD
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
 import org.apache.solr.common.util.NamedList;
+import org.apache.solr.core.CoreContainer;
+import org.apache.solr.servlet.SolrDispatchFilter;
 import org.junit.After;
 import org.junit.Before;
 import org.slf4j.Logger;
@@ -104,6 +108,8 @@ public class HttpPartitionTest extends A
   public void doTest() throws Exception {
     waitForThingsToLevelOut(30000);
 
+    testLeaderInitiatedRecoveryCRUD();
+
     // test a 1x2 collection
     testRf2();
 
@@ -122,7 +128,59 @@ public class HttpPartitionTest extends A
 
     log.info("HttpParitionTest succeeded ... shutting down now!");
   }
-  
+
+  /**
+   * Tests handling of lir state znodes.
+   */
+  protected void testLeaderInitiatedRecoveryCRUD() throws Exception {
+    String testCollectionName = "c8n_crud_1x2";
+    String shardId = "shard1";
+    createCollection(testCollectionName, 1, 2, 1);
+    cloudClient.setDefaultCollection(testCollectionName);
+
+    Replica leader =
+        cloudClient.getZkStateReader().getLeaderRetry(testCollectionName, shardId);
+    JettySolrRunner leaderJetty = getJettyOnPort(getReplicaPort(leader));
+
+    CoreContainer cores = ((SolrDispatchFilter)leaderJetty.getDispatchFilter().getFilter()).getCores();
+    ZkController zkController = cores.getZkController();
+    assertNotNull("ZkController is null", zkController);
+
+    Replica notLeader =
+        ensureAllReplicasAreActive(testCollectionName, shardId, 1, 2, maxWaitSecsToSeeAllActive).get(0);
+
+    ZkCoreNodeProps replicaCoreNodeProps = new ZkCoreNodeProps(notLeader);
+    String replicaUrl = replicaCoreNodeProps.getCoreUrl();
+
+    assertTrue(!zkController.isReplicaInRecoveryHandling(replicaUrl));
+    assertTrue(zkController.ensureReplicaInLeaderInitiatedRecovery(testCollectionName, shardId, replicaUrl, replicaCoreNodeProps, false));
+    assertTrue(zkController.isReplicaInRecoveryHandling(replicaUrl));
+    Map<String,Object> lirStateMap = zkController.getLeaderInitiatedRecoveryStateObject(testCollectionName, shardId, notLeader.getName());
+    assertNotNull(lirStateMap);
+    assertEquals(ZkStateReader.DOWN, lirStateMap.get("state"));
+    zkController.removeReplicaFromLeaderInitiatedRecoveryHandling(replicaUrl);
+    assertTrue(!zkController.isReplicaInRecoveryHandling(replicaUrl));
+
+    // test old non-json format handling
+    SolrZkClient zkClient = zkController.getZkClient();
+    String znodePath = zkController.getLeaderInitiatedRecoveryZnodePath(testCollectionName, shardId, notLeader.getName());
+    zkClient.setData(znodePath, "down".getBytes(StandardCharsets.UTF_8), true);
+    lirStateMap = zkController.getLeaderInitiatedRecoveryStateObject(testCollectionName, shardId, notLeader.getName());
+    assertNotNull(lirStateMap);
+    assertEquals(ZkStateReader.DOWN, lirStateMap.get("state"));
+    zkClient.delete(znodePath, -1, false);
+
+    // try to clean up
+    try {
+      CollectionAdminRequest req = new CollectionAdminRequest.Delete();
+      req.setCollectionName(testCollectionName);
+      req.process(cloudClient);
+    } catch (Exception e) {
+      // don't fail the test
+      log.warn("Could not delete collection {} after test completed", testCollectionName);
+    }
+  }
+
   protected void testRf2() throws Exception {
     // create a collection that has 1 shard but 2 replicas
     String testCollectionName = "c8n_1x2";

Modified: lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java?rev=1643326&r1=1643325&r2=1643326&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test/org/apache/solr/handler/component/DistributedQueryComponentOptimizationTest.java Fri Dec  5 15:24:11 2014
@@ -20,7 +20,9 @@ package org.apache.solr.handler.componen
 import org.apache.solr.BaseDistributedSearchTestCase;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.QueryResponse;
+import org.apache.solr.cloud.AbstractFullDistribZkTestBase;
 import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.params.ShardParams;
 import org.apache.solr.common.util.SimpleOrderedMap;
 import org.junit.BeforeClass;
 
@@ -115,6 +117,17 @@ public class DistributedQueryComponentOp
 
     verifySinglePass("q", "id:19", "fl", "id,*a_sS", "sort", "payload asc", "distrib.singlePass", "true");
     verifySinglePass("q", "id:19", "fl", "id,dynamic,cat*", "sort", "payload asc", "distrib.singlePass", "true");
+
+    // see SOLR-6795, distrib.singlePass=true would return score even when not asked for
+    handle.clear();
+    handle.put("timestamp", SKIPVAL);
+    handle.put("_version_", SKIPVAL);
+    // we don't to compare maxScore because most distributed requests return it anyway (just because they have score already)
+    handle.put("maxScore", SKIPVAL);
+    query("q", "{!func}id", ShardParams.DISTRIB_SINGLE_PASS, "true");
+
+    // fix for a bug where not all fields are returned if using multiple fl parameters, see SOLR-6796
+    query("q","*:*", "fl", "id", "fl","dynamic","sort","payload desc", ShardParams.DISTRIB_SINGLE_PASS, "true");
   }
 
   private void verifySinglePass(String... q) throws SolrServerException {