From 7d64c5d656edca6367a42d9c599284a3a65bac92 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 15 Jun 2018 12:48:49 +0400 Subject: [PATCH 01/54] grab-solr: stop all unsafety --- tools/grab-solr.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 78d6f857..4e89435a 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -25,7 +25,7 @@ TMP_FILE=$TMP_DIR/$FILENAME SRC_DIR=$BUILD_DIR/$VSN EXAMPLE_DIR=$SRC_DIR/example COL1_DIR=$EXAMPLE_DIR/solr/collection1 -: ${ARTIFACT_URL_PREFIX:="http://s3.amazonaws.com/files.basho.com"} +: ${ARTIFACT_URL_PREFIX:="https://s3.amazonaws.com/files.basho.com"} check_for_solr() { @@ -36,11 +36,11 @@ check_for_solr() download() { if which wget > /dev/null; then - wget --no-check-certificate --progress=dot:mega $1 + wget --progress=dot:mega $1 elif which curl > /dev/null; then - curl --insecure --progress-bar -O $1 + curl --progress-bar -O $1 elif which fetch > /dev/null; then - fetch --no-verify-peer $1 + fetch $1 fi } From 982efef1217bf6cf45c934420598dbeff0b20937 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 15 Jun 2018 23:13:33 +0400 Subject: [PATCH 02/54] solr build script changes --- tools/build-jar.sh | 50 ++++++++++++++--------------- tools/build-solr.sh | 4 +-- tools/grab-solr.sh | 76 +++++++++++++++++++++++++++------------------ 3 files changed, 73 insertions(+), 57 deletions(-) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index d087afed..f60c8685 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -24,9 +24,9 @@ if [ ! -x "`which javac`" ] || [ ! -x "`which jar`" ]; then exit 1 fi -if ! javac -version 2>&1 | egrep "1\.7\.[0-9_.]+" +if ! javac -version 2>&1 | egrep $'(?:1\.[789]|10)\.' then - echo "JDK 1.7 must be used to compile these jars" + echo "JDK 1.8+ must be used to compile these jars" exit 1 fi @@ -51,57 +51,57 @@ SOLR_WAR=$SOLR_DIR/webapps/solr.war SOLR_JAR_DIR=../build/solr-jars if [ ! -e $SOLR_WAR ]; then - echo "Download the Solr package..." + echo "Downloading the Solr package..." ./grab-solr.sh fi if [ ! -e $SOLR_JAR_DIR ]; then - echo "Explode the WAR..." + echo "Exploding ${SOLR_WAR}..." mkdir $SOLR_JAR_DIR cp $SOLR_WAR $SOLR_JAR_DIR - pushd $SOLR_JAR_DIR - jar xf solr.war WEB-INF/lib - mv WEB-INF/lib/* . - rm -rf WEB-INF solr.war - popd + (cd $SOLR_JAR_DIR \ + && jar xf solr.war WEB-INF/lib \ + && mv WEB-INF/lib/* . \ + && rm -rf WEB-INF solr.war) # copy logging jars cp $SOLR_DIR/lib/ext/* $SOLR_JAR_DIR fi -echo "Compile..." -javac -cp "$SOLR_JAR_DIR/*" \ - ../java_src/com/basho/yokozuna/handler/*.java \ - ../java_src/com/basho/yokozuna/handler/component/*.java \ - ../java_src/com/basho/yokozuna/query/*.java \ - ../java_src/com/basho/yokozuna/monitor/*.java +echo "Compiling..." +printf "SOLR_JAR_DIR = %s\n" "${SOLR_JAR_DIR}" -echo "Create yokozuna.jar..." -if [ ! -e "../priv/java_lib" ]; then - mkdir ../priv/java_lib -fi +# javac -cp "$SOLR_JAR_DIR/*" \ +# ../java_src/com/basho/yokozuna/*/*.java \ +# ../java_src/com/basho/yokozuna/*/*/*.java YZ_JAR_VSN=3 YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar YZ_JAR_SHA=$YZ_JAR_NAME.sha -jar cvf $YZ_JAR_NAME \ - -C ../java_src/ com/basho/yokozuna/handler \ - -C ../java_src/ com/basho/yokozuna/query +echo "Creating ${YZ_JAR_NAME}..." +mkdir -p ../priv/java_lib +# jar -cvf $YZ_JAR_NAME \ +# -C ../java_src/ com/basho/yokozuna/handler \ +# -C ../java_src/ com/basho/yokozuna/query +(cd ../java_src && ant -f yokozuna.xml all) +cp ../yz-build/yz-handler.jar $YZ_JAR_NAME sha $YZ_JAR_NAME $YZ_JAR_SHA echo "Finished building yokozuna.jar..." # monitor has to be packaged separately because it relies on the # dynamic classpath the jetty/solr set up -echo "Create yz_monitor.jar..." +echo "Create ${YZ_JAR_NAME}..." MON_JAR_VSN=1 MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar MON_JAR_SHA=$MON_JAR_NAME.sha -jar cvf $MON_JAR_NAME \ - -C ../java_src/ com/basho/yokozuna/monitor +# jar cvf $MON_JAR_NAME \ +# -C ../java_src/ com/basho/yokozuna/monitor + +cp ../yz-build/yz-monitor.jar $MON_JAR_NAME sha $MON_JAR_NAME $MON_JAR_SHA diff --git a/tools/build-solr.sh b/tools/build-solr.sh index 0f8bedc9..188d96bb 100755 --- a/tools/build-solr.sh +++ b/tools/build-solr.sh @@ -79,9 +79,9 @@ WORK_DIR=$1; shift NAME=$1; shift URL=$1; shift -if ! javac -version 2>&1 | egrep "1\.7\.[0-9_.]+" +if ! javac -version 2>&1 | egrep "1\.8\.[0-9_.]+" then - echo "JDK 1.7 must be used to compile Solr" + echo "JDK 1.8+ must be used to compile Solr" exit 1 fi diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 4e89435a..95d0036d 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -7,6 +7,7 @@ # ./grab-solr.sh # # specify SOLR_PKG_DIR to skip the solr download and use a local copy +set -x set -e if [ $(basename $PWD) != "tools" ] @@ -16,16 +17,26 @@ fi PRIV_DIR=../priv CONF_DIR=$PRIV_DIR/conf + + SOLR_DIR=$PRIV_DIR/solr +FRESH_SOLR=1 + BUILD_DIR=../build VSN=solr-4.10.4-yz-2 +VSN=solr-7.3.1-SNAPSHOT + FILENAME=$VSN.tgz TMP_DIR=/var/tmp/yokozuna TMP_FILE=$TMP_DIR/$FILENAME SRC_DIR=$BUILD_DIR/$VSN + EXAMPLE_DIR=$SRC_DIR/example +SERVER_DIR=$SRC_DIR/server + COL1_DIR=$EXAMPLE_DIR/solr/collection1 : ${ARTIFACT_URL_PREFIX:="https://s3.amazonaws.com/files.basho.com"} +ARTIFACT_URL_PREFIX=file:///Users/lelf/S/solr-7.3.1/solr/package check_for_solr() { @@ -35,12 +46,12 @@ check_for_solr() download() { - if which wget > /dev/null; then + if which fetch > /dev/null; then + fetch $1 + elif which wget > /dev/null; then wget --progress=dot:mega $1 elif which curl > /dev/null; then curl --progress-bar -O $1 - elif which fetch > /dev/null; then - fetch $1 fi } @@ -53,7 +64,7 @@ get_solr() ln -s $TMP_FILE $FILENAME else echo "Pulling Solr from S3" - download "${ARTIFACT_URL_PREFIX}/solr/$FILENAME" + download "${ARTIFACT_URL_PREFIX}/$FILENAME" if [ -d $TMP_DIR ]; then cp $FILENAME $TMP_DIR else @@ -85,53 +96,58 @@ then get_solr fi - echo "Creating Solr dir $SOLR_DIR" + echo "Creating Solr dir $SOLR_DIR..." # Explicitly copy files needed rather than copying everything and # removing which requires using cp -rn (since $SOLR_DIR/etc has files # which shouldn't be overwritten). For whatever reason, cp -n causes # non-zero exit code when files that would have been overwritten are # detected. - cp -r $EXAMPLE_DIR/etc/create-solrtest.keystore.sh $SOLR_DIR/etc - cp -r $EXAMPLE_DIR/etc/webdefault.xml $SOLR_DIR/etc - cp -r $EXAMPLE_DIR/lib $SOLR_DIR - cp -r $COL1_DIR/conf/lang $CONF_DIR - cp $COL1_DIR/conf/protwords.txt $CONF_DIR - cp $COL1_DIR/conf/stopwords.txt $CONF_DIR - cp $COL1_DIR/conf/synonyms.txt $CONF_DIR - cp $COL1_DIR/conf/mapping-* $CONF_DIR + # cp -r $EXAMPLE_DIR/etc/create-solrtest.keystore.sh $SOLR_DIR/etc + cp -r $SERVER_DIR/etc/webdefault.xml $SOLR_DIR/etc + cp -r $SERVER_DIR/lib $SOLR_DIR + cp -r $SERVER_DIR/solr/configsets/_default/conf/lang $CONF_DIR + cp $SERVER_DIR/solr/configsets/_default/conf/protwords.txt $CONF_DIR + cp $SERVER_DIR/solr/configsets/_default/conf/stopwords.txt $CONF_DIR + cp $SERVER_DIR/solr/configsets/_default/conf/synonyms.txt $CONF_DIR + # cp $COL1_DIR/conf/mapping-* $CONF_DIR # TODO: does resources need to be copied? - cp -r $EXAMPLE_DIR/resources $SOLR_DIR - cp -r $EXAMPLE_DIR/solr-webapp $SOLR_DIR - cp -r $EXAMPLE_DIR/start.jar $SOLR_DIR - cp -r $EXAMPLE_DIR/webapps $SOLR_DIR + cp -r $SERVER_DIR/resources $SOLR_DIR + cp -r $SERVER_DIR/modules $SOLR_DIR + cp -r $SERVER_DIR/solr-webapp $SOLR_DIR + cp $SERVER_DIR/start.jar $SOLR_DIR + # cp -r $SERVER_DIR/webapps $SOLR_DIR echo "Solr dir created successfully" fi JAVA_LIB=../priv/java_lib YZ_JAR_VSN=3 -YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar +YZ_JAR_NAME=yz-handler.jar +YZ_ARTIFACTS_URL=/Users/lelf/S/yokozuna/yz-build -if [ ! -e $JAVA_LIB/$YZ_JAR_NAME ] +if [[ ! -f $JAVA_LIB/$YZ_JAR_NAME ]] then - if [ ! -d $JAVA_LIB ] - then - mkdir $JAVA_LIB - fi - + mkdir -p $JAVA_LIB echo "Downloading $YZ_JAR_NAME" - download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" - mv $YZ_JAR_NAME $JAVA_LIB/$YZ_JAR_NAME + # download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" + download ${YZ_ARTIFACTS_URL}/${YZ_JAR_NAME} + mv $YZ_JAR_NAME $JAVA_LIB/yokozuna-${YZ_JAR_VSN}.jar + #cp ../yz-build/$YZ_JAR_NAME $JAVA_LIB/ fi EXT_LIB=../priv/solr/lib/ext MON_JAR_VSN=1 -MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar +MON_JAR_NAME=yz-monitor.jar -if [ ! -e $EXT_LIB/$MON_JAR_NAME ] +if [[ ! -f $EXT_LIB/$MON_JAR_NAME ]] then echo "Downloading $MON_JAR_NAME" - download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" - mv $MON_JAR_NAME $EXT_LIB/$MON_JAR_NAME + #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" + download ${YZ_ARTIFACTS_URL}/${MON_JAR_NAME} + mv $MON_JAR_NAME $EXT_LIB/yz_monitor-${MON_JAR_VSN}.jar + #cp ../yz-build/$MON_JAR_NAME $EXT_LIB/ fi + +echo Done. + From a42e861c0bb7606ece2b9d7d573b66810adfe6d5 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 18:33:12 +0400 Subject: [PATCH 03/54] restructure tools: common.sh, copy-jars.sh --- tools/build-jar.sh | 54 ++++++-------------- tools/common.sh | 39 +++++++++++++++ tools/copy-jars.sh | 30 ++++++++++++ tools/grab-solr.sh | 120 +++++++++++++-------------------------------- 4 files changed, 119 insertions(+), 124 deletions(-) create mode 100644 tools/common.sh create mode 100755 tools/copy-jars.sh diff --git a/tools/build-jar.sh b/tools/build-jar.sh index f60c8685..d3b6454c 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -1,23 +1,10 @@ #!/usr/bin/env sh # # Build JAR file containing customer Solr request handlers. -set -e +set -eu +source common.sh -function sha -{ - file=$1 - sha_file=$2 - - if which sha1sum; then - sha1sum $file > $sha_file - elif which shasum; then - shasum -a 1 $file > $sha_file - else - echo "Unable to locate program to compute SHA1" - exit 1 - fi -} if [ ! -x "`which javac`" ] || [ ! -x "`which jar`" ]; then echo "Couldn't find javac and/or jar, which is needed to compile Yokozuna." @@ -37,20 +24,15 @@ then fi -echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% NOTICE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" -echo "% %" -echo "% If building new jars to be uploaded to s3 then make sure to update the %" -echo "% YZ_JAR_VSN and MON_JAR_VSN variables. %" -echo "% %" -echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%" - -echo "Build the yokozuna.jar..." +echo "Building ${YZ_JAR_NAME} ${MON_JAR_NAME}..." SOLR_DIR=../priv/solr SOLR_WAR=$SOLR_DIR/webapps/solr.war SOLR_JAR_DIR=../build/solr-jars -if [ ! -e $SOLR_WAR ]; then +if [ -e $SOLR_WAR ]; then + echo "$SOLR_WAR is already there" +else echo "Downloading the Solr package..." ./grab-solr.sh fi @@ -75,34 +57,30 @@ printf "SOLR_JAR_DIR = %s\n" "${SOLR_JAR_DIR}" # ../java_src/com/basho/yokozuna/*/*.java \ # ../java_src/com/basho/yokozuna/*/*/*.java -YZ_JAR_VSN=3 -YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar -YZ_JAR_SHA=$YZ_JAR_NAME.sha - echo "Creating ${YZ_JAR_NAME}..." mkdir -p ../priv/java_lib # jar -cvf $YZ_JAR_NAME \ # -C ../java_src/ com/basho/yokozuna/handler \ # -C ../java_src/ com/basho/yokozuna/query -(cd ../java_src && ant -f yokozuna.xml all) -cp ../yz-build/yz-handler.jar $YZ_JAR_NAME -sha $YZ_JAR_NAME $YZ_JAR_SHA +(cd ../java_src \ + && ant all -Dyz_vsn=${YZ_JAR_VSN} -Dyz_mon_vsn=${MON_JAR_VSN} \ + ) + +cp ../yz-build/$YZ_JAR_NAME . +mk_sha $YZ_JAR_NAME $YZ_JAR_SHA echo "Finished building yokozuna.jar..." # monitor has to be packaged separately because it relies on the # dynamic classpath the jetty/solr set up -echo "Create ${YZ_JAR_NAME}..." +echo "--- ${YZ_JAR_NAME}" && ls -l ${YZ_JAR_NAME}* -MON_JAR_VSN=1 -MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar -MON_JAR_SHA=$MON_JAR_NAME.sha # jar cvf $MON_JAR_NAME \ # -C ../java_src/ com/basho/yokozuna/monitor -cp ../yz-build/yz-monitor.jar $MON_JAR_NAME +cp ../yz-build/$MON_JAR_NAME . +mk_sha $MON_JAR_NAME $MON_JAR_SHA -sha $MON_JAR_NAME $MON_JAR_SHA +echo "--- ${MON_JAR_NAME}" && ls -l ${MON_JAR_NAME}* -echo "Finished building yz_monitor.jar..." diff --git a/tools/common.sh b/tools/common.sh new file mode 100644 index 00000000..bc47732b --- /dev/null +++ b/tools/common.sh @@ -0,0 +1,39 @@ +# -*- Bash -*- + + +declare SOLR_VSN=7.3.1 + +declare YZ_JAR_VSN=3.1S +declare YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar +declare YZ_JAR_SHA=$YZ_JAR_NAME.sha + +declare MON_JAR_VSN=1S +declare MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar +declare MON_JAR_SHA=$MON_JAR_NAME.sha + +function mk_sha() +{ + file=$1 + sha_file=$2 + + if type sha1sum &>/dev/null; then + sha1sum $file > $sha_file + elif type shasum &>/dev/null; then + shasum -a 1 $file > $sha_file + else + echo "Unable to locate program to compute SHA1" + exit 1 + fi +} + +download() +{ + if which fetch > /dev/null; then + fetch $1 + elif which wget > /dev/null; then + wget --progress=dot:mega $1 + elif which curl > /dev/null; then + curl --progress-bar -O $1 + fi +} + diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh new file mode 100755 index 00000000..66acc2ef --- /dev/null +++ b/tools/copy-jars.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env sh +set -eu +source common.sh + +JAVA_LIB=../priv/java_lib + +YZ_ARTIFACTS_URL="$(realpath ../yz-build)" + +if [[ ! -f $JAVA_LIB/$YZ_JAR_NAME ]] +then + mkdir -p $JAVA_LIB + echo "Downloading $YZ_JAR_NAME" + # download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" + download ${YZ_ARTIFACTS_URL}/${YZ_JAR_NAME} + mv $YZ_JAR_NAME $JAVA_LIB +fi + +EXT_LIB=../priv/solr/lib/ext + +if [[ ! -f $EXT_LIB/$MON_JAR_NAME ]] +then + echo "Downloading $MON_JAR_NAME" + #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" + download ${YZ_ARTIFACTS_URL}/${MON_JAR_NAME} + mv $MON_JAR_NAME $EXT_LIB +fi + +echo Done. + + diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 95d0036d..c27cf585 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -7,27 +7,25 @@ # ./grab-solr.sh # # specify SOLR_PKG_DIR to skip the solr download and use a local copy -set -x -set -e -if [ $(basename $PWD) != "tools" ] -then - cd tools -fi +set -eu + +[[ $(basename $PWD) == "tools" ]] || cd tools + +source common.sh + PRIV_DIR=../priv CONF_DIR=$PRIV_DIR/conf - SOLR_DIR=$PRIV_DIR/solr FRESH_SOLR=1 BUILD_DIR=../build -VSN=solr-4.10.4-yz-2 -VSN=solr-7.3.1-SNAPSHOT +VSN=solr-7.3.1 FILENAME=$VSN.tgz -TMP_DIR=/var/tmp/yokozuna +TMP_DIR="$(pwd)/tmp" TMP_FILE=$TMP_DIR/$FILENAME SRC_DIR=$BUILD_DIR/$VSN @@ -35,69 +33,49 @@ EXAMPLE_DIR=$SRC_DIR/example SERVER_DIR=$SRC_DIR/server COL1_DIR=$EXAMPLE_DIR/solr/collection1 -: ${ARTIFACT_URL_PREFIX:="https://s3.amazonaws.com/files.basho.com"} -ARTIFACT_URL_PREFIX=file:///Users/lelf/S/solr-7.3.1/solr/package + +# http://apache.cs.uu.nl/lucene/solr/7.3.1/solr-7.3.1.tgz +# https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz +# https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz.asc +# https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz.sha1 +ARTIFACT_URL_PREFIX=https://www.apache.org/dist/lucene/solr/7.3.1 check_for_solr() { # $SOLR_DIR is preloaded with xml files, so check for the generated jar - test -e $SOLR_DIR/start.jar -} - -download() -{ - if which fetch > /dev/null; then - fetch $1 - elif which wget > /dev/null; then - wget --progress=dot:mega $1 - elif which curl > /dev/null; then - curl --progress-bar -O $1 - fi + [[ -e $SOLR_DIR/start.jar ]] } get_solr() { - if [ -z ${SOLR_PKG_DIR+x} ] - then - if [ -e $TMP_FILE ]; then - echo "Using cached copy of Solr $TMP_FILE" - ln -s $TMP_FILE $FILENAME - else - echo "Pulling Solr from S3" - download "${ARTIFACT_URL_PREFIX}/$FILENAME" - if [ -d $TMP_DIR ]; then - cp $FILENAME $TMP_DIR - else - mkdir -m 1777 $TMP_DIR - cp $FILENAME $TMP_DIR - fi - fi + mkdir -p ${SOLR_PKG_DIR} + + if [[ -e $TMP_FILE ]]; then + echo "Using cached copy of Solr at $TMP_FILE" + ln -s $TMP_FILE $FILENAME else - # This is now obsolete thanks to implicit caching above - # but will leave in for now as to not break anyone. - echo "Using local copy of Solr $SOLR_PKG_DIR/$FILENAME" - cp $SOLR_PKG_DIR/$FILENAME ./ + echo "Downloading original Solr..." + download "${ARTIFACT_URL_PREFIX}/$FILENAME" + download "${ARTIFACT_URL_PREFIX}/$FILENAME.sha1" + set -u; shasum -s -c $FILENAME.sha1 + mkdir -p -m 1777 $TMP_DIR + cp $FILENAME $TMP_DIR fi - tar zxf $FILENAME -} - -if ! check_for_solr -then - echo "Create dir $BUILD_DIR" - if [ ! -e $BUILD_DIR ]; then - mkdir $BUILD_DIR - fi + tar -xf $FILENAME + echo "OK, tar = ${FILENAME}" +} - cd $BUILD_DIR +if check_for_solr; then + echo "Solr is there, $SOLR_DIR" +else + mkdir -p $BUILD_DIR && cd $BUILD_DIR - if [ ! -e $SRC_DIR ] + if [[ ! -e $SRC_DIR ]] then get_solr fi - echo "Creating Solr dir $SOLR_DIR..." - # Explicitly copy files needed rather than copying everything and # removing which requires using cp -rn (since $SOLR_DIR/etc has files # which shouldn't be overwritten). For whatever reason, cp -n causes @@ -121,33 +99,3 @@ then echo "Solr dir created successfully" fi -JAVA_LIB=../priv/java_lib -YZ_JAR_VSN=3 -YZ_JAR_NAME=yz-handler.jar -YZ_ARTIFACTS_URL=/Users/lelf/S/yokozuna/yz-build - -if [[ ! -f $JAVA_LIB/$YZ_JAR_NAME ]] -then - mkdir -p $JAVA_LIB - echo "Downloading $YZ_JAR_NAME" - # download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" - download ${YZ_ARTIFACTS_URL}/${YZ_JAR_NAME} - mv $YZ_JAR_NAME $JAVA_LIB/yokozuna-${YZ_JAR_VSN}.jar - #cp ../yz-build/$YZ_JAR_NAME $JAVA_LIB/ -fi - -EXT_LIB=../priv/solr/lib/ext -MON_JAR_VSN=1 -MON_JAR_NAME=yz-monitor.jar - -if [[ ! -f $EXT_LIB/$MON_JAR_NAME ]] -then - echo "Downloading $MON_JAR_NAME" - #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" - download ${YZ_ARTIFACTS_URL}/${MON_JAR_NAME} - mv $MON_JAR_NAME $EXT_LIB/yz_monitor-${MON_JAR_VSN}.jar - #cp ../yz-build/$MON_JAR_NAME $EXT_LIB/ -fi - -echo Done. - From ba2aad5e51d4aa532a35d524472a24e1f9b8543e Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:13:31 +0400 Subject: [PATCH 04/54] tools: use sha512 --- tools/common.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/common.sh b/tools/common.sh index bc47732b..2bb83003 100644 --- a/tools/common.sh +++ b/tools/common.sh @@ -16,12 +16,12 @@ function mk_sha() file=$1 sha_file=$2 - if type sha1sum &>/dev/null; then - sha1sum $file > $sha_file + if type sha512t256 &>/dev/null; then + sha512t256 $file > $file.sha512 elif type shasum &>/dev/null; then - shasum -a 1 $file > $sha_file + shasum -a 512256 $file > $file.sha512 else - echo "Unable to locate program to compute SHA1" + echo "Unable to locate program to compute SHA" exit 1 fi } From 0107b1dd7c39a0d8fcbbb1b871404cb8d3255bf2 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sun, 17 Jun 2018 14:14:48 +0400 Subject: [PATCH 05/54] Fix solr startup --- src/yz_solr_proc.erl | 63 +++++++++++++++++++++++++------------------- 1 file changed, 36 insertions(+), 27 deletions(-) diff --git a/src/yz_solr_proc.erl b/src/yz_solr_proc.erl index 4b5899f3..aefe675e 100644 --- a/src/yz_solr_proc.erl +++ b/src/yz_solr_proc.erl @@ -231,34 +231,43 @@ build_cmd(_JavaPath, _SolrPort, _SolrJXMPort, "data/::yz_solr_start_timeout::", build_cmd(JavaPath, SolrPort, SolrJMXPort, Dir, TempDir) -> YZPrivSolr = filename:join([?YZ_PRIV, "solr"]), {ok, Etc} = application:get_env(riak_core, platform_etc_dir), - Headless = "-Djava.awt.headless=true", - SolrHome = "-Dsolr.solr.home=" ++ filename:absname(Dir), - HostContext = "-DhostContext=" ++ ?SOLR_HOST_CONTEXT, - JettyHome = "-Djetty.home=" ++ YZPrivSolr, - JettyTemp = "-Djetty.temp=" ++ filename:absname(TempDir), - Port = "-Djetty.port=" ++ integer_to_list(SolrPort), - CP = "-cp", - CP2 = filename:join([YZPrivSolr, "start.jar"]), - %% log4j.properties must be in the classpath unless a full URL - %% (e.g. file://) is given for it, and we'd rather not put etc or - %% data on the classpath, but we have to templatize the file to - %% get the platform log directory into it - Logging = "-Dlog4j.configuration=file://" ++ - filename:join([filename:absname(Etc), "solr-log4j.properties"]), - LibDir = "-Dyz.lib.dir=" ++ filename:join([?YZ_PRIV, "java_lib"]), - Class = "org.eclipse.jetty.start.Main", - case SolrJMXPort of - undefined -> - JMX = []; - _ -> - JMXPortArg = "-Dcom.sun.management.jmxremote.port=" ++ integer_to_list(SolrJMXPort), - JMXAuthArg = "-Dcom.sun.management.jmxremote.authenticate=false", - JMXSSLArg = "-Dcom.sun.management.jmxremote.ssl=false", - JMX = [JMXPortArg, JMXAuthArg, JMXSSLArg] - end, - Args = [Headless, JettyHome, JettyTemp, Port, SolrHome, HostContext, CP, CP2, Logging, LibDir] - ++ string:tokens(solr_jvm_opts(), " ") ++ JMX ++ [Class], + JOptions = [ + { "java.awt.headless", true }, + { "solr.solr.home", filename:absname(Dir) }, + { "jetty.home", YZPrivSolr }, + { "jetty.base", YZPrivSolr }, + { "jetty.port", SolrPort }, + { "jetty.temp", filename:absname(TempDir) }, + + %% log4j.properties must be in the classpath unless a full URL + %% (e.g. file://) is given for it, and we'd rather not put etc or + %% data on the classpath, but we have to templatize the file to + %% get the platform log directory into it + { "log4j.configuration", + filename:join([filename:absname(Etc), "solr-log4j.properties"]) }, + + { "yz.lib.dir", filename:join([?YZ_PRIV, "java_lib"]) } + ], + + %% HostContext = "-DhostContext=" ++ ?SOLR_HOST_CONTEXT, + + StartJAR = filename:join([YZPrivSolr, "start.jar"]), + + %% @TODO + %% case SolrJMXPort of + %% undefined -> + %% JMX = []; + %% _ -> + %% JMXPortArg = "-Dcom.sun.management.jmxremote.port=" ++ integer_to_list(SolrJMXPort), + %% JMXAuthArg = "-Dcom.sun.management.jmxremote.authenticate=false", + %% JMXSSLArg = "-Dcom.sun.management.jmxremote.ssl=false", + %% JMX = [JMXPortArg, JMXAuthArg, JMXSSLArg] + %% end, + + JOptArgs = [ io_lib:format("-d~p=~p", [K,V]) || {K,V} <- JOptions ], + + Args = JOptArgs ++ string:tokens(solr_jvm_opts(), " ") ++ ["-jar", StartJAR], {JavaPath, Args}. %% @private From bd2adca9b183cd48df4d2dc5a557a97508fb9604 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 03:10:42 +0400 Subject: [PATCH 06/54] minor yz_solr_proc fixes --- src/yz_solr_proc.erl | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/yz_solr_proc.erl b/src/yz_solr_proc.erl index aefe675e..92a296e2 100644 --- a/src/yz_solr_proc.erl +++ b/src/yz_solr_proc.erl @@ -166,7 +166,7 @@ handle_info({check_solr, WaitTimeSecs}, S=?S_MATCH) -> {false, _} -> %% solr did not finish startup quickly enough, or has just %% crashed and the exit message is on its way, shutdown - {stop, "solr didn't start in alloted time", S} + {stop, "solr didn't start in allowed time", S} end; handle_info(tick, #state{is_up=IsUp, enable_dist_query=EnableDistQuery} = S) -> NewIsUp = yz_solr:is_up(), @@ -228,7 +228,7 @@ build_cmd(_JavaPath, _SolrPort, _SolrJXMPort, "data/::yz_solr_start_timeout::", %% happy, but will never respond to pings, so we can test the %% timeout capability {os:find_executable("grep"), ["foo"]}; -build_cmd(JavaPath, SolrPort, SolrJMXPort, Dir, TempDir) -> +build_cmd(JavaPath, SolrPort, _SolrJMXPort, Dir, TempDir) -> YZPrivSolr = filename:join([?YZ_PRIV, "solr"]), {ok, Etc} = application:get_env(riak_core, platform_etc_dir), @@ -237,7 +237,7 @@ build_cmd(JavaPath, SolrPort, SolrJMXPort, Dir, TempDir) -> { "solr.solr.home", filename:absname(Dir) }, { "jetty.home", YZPrivSolr }, { "jetty.base", YZPrivSolr }, - { "jetty.port", SolrPort }, + { "jetty.port", integer_to_binary(SolrPort) }, { "jetty.temp", filename:absname(TempDir) }, %% log4j.properties must be in the classpath unless a full URL @@ -265,9 +265,12 @@ build_cmd(JavaPath, SolrPort, SolrJMXPort, Dir, TempDir) -> %% JMX = [JMXPortArg, JMXAuthArg, JMXSSLArg] %% end, - JOptArgs = [ io_lib:format("-d~p=~p", [K,V]) || {K,V} <- JOptions ], + JOptArgs = [ io_lib:format("-D~ts=~ts", [K,V]) || {K,V} <- JOptions ], - Args = JOptArgs ++ string:tokens(solr_jvm_opts(), " ") ++ ["-jar", StartJAR], + Args = JOptArgs + ++ string:tokens(solr_jvm_opts(), " ") + ++ ['-jar', StartJAR] + ++ ['--module=http'], {JavaPath, Args}. %% @private From 681d671ab5ebfbf089c04027c83e8c6722b6cf80 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 15 Jun 2018 12:52:08 +0400 Subject: [PATCH 07/54] maven/idea files From 251f7e570cc030d8d882dff572e2ab4000348bb9 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:06:34 +0400 Subject: [PATCH 08/54] ant build.xml for java files --- java_src/build.xml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 java_src/build.xml diff --git a/java_src/build.xml b/java_src/build.xml new file mode 100644 index 00000000..79691dc1 --- /dev/null +++ b/java_src/build.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 963363bf9f8d83f11a86a2b3c81734af85557b86 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:26:02 +0400 Subject: [PATCH 09/54] fix SimpleQueryExample --- .../yokozuna/query/SimpleQueryExample.java | 30 +++++++++++-------- 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java index 38c22936..7b6bec60 100644 --- a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java +++ b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java @@ -4,38 +4,44 @@ * * Usage: * - * java -cp priv/java_lib/yokozuna.jar:priv/solr-jars/WEB-INF/lib/* com.basho.yokozuna.query.SimpleQueryExample BASE_URL INDEX FIELD TERM + * java -cp priv/solr-jars/WEB-INF/lib/* com.basho.yokozuna.query.SimpleQueryExample BASE_URL INDEX FIELD TERM * * Example: * - * java -cp priv/java_lib/yokozuna.jar:priv/solr-jars/WEB-INF/lib/* com.basho.yokozuna.query.SimpleQueryExample http://localhost:8098/search fruit text apple + * java -cp priv/solr-jars/WEB-INF/lib/* com.basho.yokozuna.query.SimpleQueryExample http://localhost:8098/search fruit text apple */ package com.basho.yokozuna.query; -import org.apache.solr.client.solrj.SolrRequest; -import org.apache.solr.client.solrj.SolrServer; -import org.apache.solr.client.solrj.SolrServerException; -import org.apache.solr.client.solrj.impl.HttpSolrServer; -import org.apache.solr.client.solrj.response.QueryResponse; +import org.apache.solr.client.solrj.*; +import org.apache.solr.client.solrj.impl.HttpSolrClient; import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.params.ModifiableSolrParams; +import java.io.IOException; + public class SimpleQueryExample { - public static void main(String[] args) throws SolrServerException { + + + public static void main(String[] args) + throws SolrServerException, IOException { final String baseURL = args[0]; final String index = args[1]; final String field = args[2]; final String term = args[3]; - final SolrServer solr = new HttpSolrServer(baseURL + "/" + index); - final ModifiableSolrParams params = new ModifiableSolrParams(); + String prefix = baseURL + "/" + index; + SolrClient solr = new HttpSolrClient.Builder(prefix).build(); + + ModifiableSolrParams params = new ModifiableSolrParams(); params.set("qt", "/"); params.set("q", field + ":" + term); - final SolrRequest req = new QueryRequest(params); + SolrRequest req = new QueryRequest(params); + + QueryResponse resp = solr.query(params); - final QueryResponse resp = solr.query(params); System.out.println("resp: " + resp); } } From 9df86386d8f018f27f29a4d4cc854572f41f3b92 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:30:20 +0400 Subject: [PATCH 10/54] XXX handler.EntropyData for solr6 --- .../basho/yokozuna/handler/EntropyData.java | 59 +++++++++---------- 1 file changed, 29 insertions(+), 30 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/EntropyData.java b/java_src/com/basho/yokozuna/handler/EntropyData.java index ec2d6ea2..ecc9ff53 100644 --- a/java_src/com/basho/yokozuna/handler/EntropyData.java +++ b/java_src/com/basho/yokozuna/handler/EntropyData.java @@ -16,18 +16,6 @@ package com.basho.yokozuna.handler; -import java.io.IOException; - -import javax.xml.bind.DatatypeConverter; - -import org.apache.lucene.util.Bits; -import org.apache.lucene.util.BytesRef; -import org.apache.lucene.index.AtomicReader; -import org.apache.lucene.index.DocsEnum; -import org.apache.lucene.index.Terms; -import org.apache.lucene.index.TermsEnum; -import org.apache.lucene.search.DocIdSetIterator; - import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.core.PluginInfo; @@ -37,8 +25,20 @@ import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.util.plugin.PluginInfoInitialized; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.apache.lucene.index.LeafReader; +import org.apache.lucene.index.Terms; +import org.apache.lucene.index.TermsEnum; +import org.apache.lucene.util.Bits; +import org.apache.lucene.util.BytesRef; + +import java.io.IOException; + +import org.apache.commons.codec.binary.Base64; +import org.slf4j.*; + + +//import org.apache.lucene.index.AtomicReader; +//import org.apache.lucene.index.DocsEnum; /** * This class provides handler logic to iterate over the entropy data @@ -81,16 +81,17 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons try { final SolrIndexSearcher searcher = req.getSearcher(); - final AtomicReader rdr = searcher.getAtomicReader(); + final LeafReader rdr = searcher.getSlowAtomicReader(); BytesRef tmp = null; final Terms terms = rdr.terms(ENTROPY_DATA_FIELD); + // .terms(ENTROPY_DATA_FIELD); if (terms == null) { rsp.add("more", false); return; } - final TermsEnum te = terms.iterator(null); + final TermsEnum te = terms.iterator(); if (isContinue(cont)) { if (log.isDebugEnabled()) { @@ -179,8 +180,9 @@ entropy data field (term). } static boolean isLive(final Bits liveDocs, final TermsEnum te) throws IOException { - final DocsEnum de = te.docs(liveDocs, null); - return de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS; + //final DocsEnum de = te. //docs(liveDocs, null); + //return de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS; + return true; } static BytesRef decodeCont(final String cont) { @@ -201,15 +203,10 @@ public String getDescription() { return "vector clock data iterator"; } - @Override - public String getVersion() { - return "0.0.1"; - } - - @Override - public String getSource() { - return "TODO: implement getSource"; - } +// @Override +// public String getVersion() { +// return "0.0.1"; +// } /** @param vsn a String vsn number referring to the item's ed handler version @@ -240,9 +237,11 @@ public String getSource() { @param base64EncodedVal base64 encoded string @return a string of decoded base64 bytes */ - private String decodeBase64DocPart(String base64EncodedVal) { - return new String(DatatypeConverter.parseBase64Binary( - base64EncodedVal)); + + public String decodeBase64DocPart(String base64EncodedVal) { + //return new String(DatatypeConverter.parseBase64Binary( + // base64EncodedVal)); + return new String(Base64.decodeBase64(base64EncodedVal)); } } From 49a6d4921c1bd2590dea31eda113c48966caa2f2 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:31:28 +0400 Subject: [PATCH 11/54] trivial FQShardTranslator changes --- .../handler/component/FQShardTranslator.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java b/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java index 1e1a02d5..d940ebba 100644 --- a/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java +++ b/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java @@ -8,10 +8,8 @@ import org.apache.solr.handler.component.ShardRequest; import org.apache.solr.request.SolrQueryRequest; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import org.slf4j.*; -import java.io.IOException; /** * Translate custom Yokozuna filter query shard params to normal @@ -33,16 +31,19 @@ * each shard by passing a query param with the name `$host:$port` and * a value of the filter query to run. For example: * - * ?10.0.1.100:10014=_yz_pn:1 OR _yz_pn:7 OR ...\ - * &10.0.1.101:10014=_yz_pn:4 OR _yz_pn:10 OR ... - * + *
+ * {@code
+ * ?10.0.1.100:10014=_yz_pn:1 OR _yz_pn:7 OR ...\
+ *    &10.0.1.101:10014=_yz_pn:4 OR _yz_pn:10 OR ...
+ * }
+ * 
*/ public class FQShardTranslator extends SearchComponent { protected static final Logger log = LoggerFactory.getLogger(FQShardTranslator.class); public static final String COMPONENT_NAME = "fq_shard_translator"; @Override - public void prepare(ResponseBuilder rb) throws IOException { + public void prepare(ResponseBuilder rb) { SolrQueryRequest req = rb.req; SolrParams params = req.getParams(); @@ -58,21 +59,19 @@ public void prepare(ResponseBuilder rb) throws IOException { } @Override - public void process(ResponseBuilder rb) throws IOException { - return; + public void process(ResponseBuilder rb) { } @Override - public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) { - return; - } + public void modifyRequest(ResponseBuilder rb, SearchComponent who, ShardRequest sreq) {} + @Override public String getDescription() { return "Yokozuna's FQ Shard Translator"; } - @Override + // @Override public String getSource() { return "https://github.com/basho/yokozuna"; } From 16e619731b061a625d82b635b73237f716d227f4 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:31:45 +0400 Subject: [PATCH 12/54] remove FQShardTranslator:isDistrib kludge (FIXME?) --- .../yokozuna/handler/component/FQShardTranslator.java | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java b/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java index d940ebba..8fafe79e 100644 --- a/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java +++ b/java_src/com/basho/yokozuna/handler/component/FQShardTranslator.java @@ -47,7 +47,7 @@ public void prepare(ResponseBuilder rb) { SolrQueryRequest req = rb.req; SolrParams params = req.getParams(); - if (!isDistrib(params)) { + if (! rb.isDistributed()) { String shardUrl = params.get(ShardParams.SHARD_URL); if (shardUrl != null) { String hostPort = shardUrl.substring(0, shardUrl.indexOf('/')); @@ -76,13 +76,4 @@ public String getSource() { return "https://github.com/basho/yokozuna"; } - private boolean isDistrib(SolrParams params) { - // Based on HttpShardHandler because rb.isDistrib is not public. - boolean distrib = params.getBool("distrib", false); - String shards = params.get(ShardParams.SHARDS); - boolean hasShardURL = shards != null; - - return hasShardURL || distrib; - } - } From 0fae1b0a7440f5ed40bc1bcc3208f3d547d0b025 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:26:43 +0400 Subject: [PATCH 13/54] c.b.y.m.Monitor: set thread name --- .../com/basho/yokozuna/monitor/Monitor.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/java_src/com/basho/yokozuna/monitor/Monitor.java b/java_src/com/basho/yokozuna/monitor/Monitor.java index 51c028e4..a6e3e38a 100644 --- a/java_src/com/basho/yokozuna/monitor/Monitor.java +++ b/java_src/com/basho/yokozuna/monitor/Monitor.java @@ -37,28 +37,31 @@ public void run() { log.debug("Monitor attempting read on stdin"); } if (System.in.read() < 0) { - if (log.isInfoEnabled()) { - log.info("Yokozuna has exited - shutting down Solr"); - } - System.exit(0); + die(); } if (log.isDebugEnabled()) { log.debug("Monitoring succeeded reading stdin"); } } catch (final IOException ioe) { - if (log.isInfoEnabled()) { - log.info("Yokozuna has exited - shutting down Solr"); - } - System.exit(0); + die(); } } + // for dtrace’s sake + private void die() { + if (log.isInfoEnabled()) { + log.info("Yokozuna has exited - shutting down Solr"); + } + System.exit(0); + } + /** * Start monitoring stdin in a background thread */ public static Monitor monitor() { final Monitor m = new Monitor(); + m.setName("riak superviser thread"); m.start(); return m; } From 0833513e9b8f4a88d298b70efda6516fc8723ab0 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:12:43 +0400 Subject: [PATCH 14/54] fix solr logging --- rel_etc/solr-log4j.properties | 17 ++++++++++------- src/yz_solr_proc.erl | 7 ++++++- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/rel_etc/solr-log4j.properties b/rel_etc/solr-log4j.properties index 87d506c5..8efd5a09 100644 --- a/rel_etc/solr-log4j.properties +++ b/rel_etc/solr-log4j.properties @@ -1,8 +1,11 @@ -log4j.rootLogger=WARN, rotate -log4j.appender.rotate=org.apache.log4j.RollingFileAppender -log4j.appender.rotate.File={{platform_log_dir}}/solr.log -log4j.appender.rotate.MaxFileSize=10MB -log4j.appender.rotate.MaxBackupIndex=5 -log4j.appender.rotate.layout=org.apache.log4j.PatternLayout -log4j.appender.rotate.layout.ConversionPattern=%d [%p] <%t>@%F:%L %m%n +solr.log=${solr.log.dir} + +log4j.rootLogger=WARN, file + +log4j.appender.file=org.apache.log4j.RollingFileAppender +log4j.appender.file.File=${solr.log}/solr.log +log4j.appender.file.MaxFileSize=10MB +log4j.appender.file.MaxBackupIndex=5 +log4j.appender.file.layout=org.apache.log4j.EnhancedPatternLayout +log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t %F:%L) [%X{core}] %c{1.} %m%n diff --git a/src/yz_solr_proc.erl b/src/yz_solr_proc.erl index 92a296e2..7d2d8ec1 100644 --- a/src/yz_solr_proc.erl +++ b/src/yz_solr_proc.erl @@ -231,10 +231,14 @@ build_cmd(_JavaPath, _SolrPort, _SolrJXMPort, "data/::yz_solr_start_timeout::", build_cmd(JavaPath, SolrPort, _SolrJMXPort, Dir, TempDir) -> YZPrivSolr = filename:join([?YZ_PRIV, "solr"]), {ok, Etc} = application:get_env(riak_core, platform_etc_dir), + {ok, Log} = application:get_env(riak_core, platform_log_dir), JOptions = [ { "java.awt.headless", true }, + { "solr.solr.home", filename:absname(Dir) }, + { "solr.log.dir", filename:absname(Log) }, + { "jetty.home", YZPrivSolr }, { "jetty.base", YZPrivSolr }, { "jetty.port", integer_to_binary(SolrPort) }, @@ -245,7 +249,8 @@ build_cmd(JavaPath, SolrPort, _SolrJMXPort, Dir, TempDir) -> %% data on the classpath, but we have to templatize the file to %% get the platform log directory into it { "log4j.configuration", - filename:join([filename:absname(Etc), "solr-log4j.properties"]) }, + "file://" ++ filename:join([filename:absname(Etc), "solr-log4j.properties"]) + }, { "yz.lib.dir", filename:join([?YZ_PRIV, "java_lib"]) } ], From 67516c7250456311d72249dec0a85156f471ac4a Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:38:39 +0400 Subject: [PATCH 15/54] solrconfig.xml: no need to declare /admin --- priv/conf/solrconfig.xml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/priv/conf/solrconfig.xml b/priv/conf/solrconfig.xml index 521f75df..3a598976 100644 --- a/priv/conf/solrconfig.xml +++ b/priv/conf/solrconfig.xml @@ -633,8 +633,8 @@ Admin Handlers - This will register all the standard admin RequestHandlers. --> - + + - - - - _yz_id:ping_query - - + + + + + + From f4d765207dffa638abebfaeed5eb8c285920bdf5 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 20:52:52 +0400 Subject: [PATCH 16/54] fix jetty configuration --- priv/solr/contexts/solr-jetty-context.xml | 24 +- priv/solr/etc/jetty-http.xml | 60 +++++ priv/solr/etc/jetty.xml | 273 ++++++++++++---------- 3 files changed, 224 insertions(+), 133 deletions(-) create mode 100644 priv/solr/etc/jetty-http.xml diff --git a/priv/solr/contexts/solr-jetty-context.xml b/priv/solr/contexts/solr-jetty-context.xml index 6a811851..21be01ce 100644 --- a/priv/solr/contexts/solr-jetty-context.xml +++ b/priv/solr/contexts/solr-jetty-context.xml @@ -1,8 +1,20 @@ - - + + - - /webapps/solr.war - /etc/webdefault.xml - /solr-webapp + + + + /solr-webapp/webapp + /etc/webdefault.xml + false + + + + + + + + + + diff --git a/priv/solr/etc/jetty-http.xml b/priv/solr/etc/jetty-http.xml new file mode 100644 index 00000000..18100d55 --- /dev/null +++ b/priv/solr/etc/jetty-http.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/priv/solr/etc/jetty.xml b/priv/solr/etc/jetty.xml index a6898712..dae34adf 100644 --- a/priv/solr/etc/jetty.xml +++ b/priv/solr/etc/jetty.xml @@ -1,5 +1,5 @@ - + @@ -10,128 +10,156 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + solr.jetty + + + + + + + + + + + false + + + + + + + + + + + + + + + + + + + + https + + + + + + + + + + + - - - - - - 10 - 10000 - false - - - - - + + + true + false + requestedPath - - - - - - - log4j.configuration etc/log4j.properties - - - 60000 - - 5000 - - - false + + + + ^/$ + /solr/ - - - - - + + + + + + /v2/* + /solr/____v2 + + + + + + + /api/* + /solr/____v2 + + + + + + + + + /solr/* + /internal_solr + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + - true - false - false - 1000 false false - - - - + org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern .*/servlet-api-[^/]*\.jar$ - + + + + + /contexts + 0 + + + - - - - + + + + @@ -30,8 +30,8 @@ - - + + diff --git a/tools/build-jar.sh b/tools/build-jar.sh index d3b6454c..454d3747 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -3,6 +3,7 @@ # Build JAR file containing customer Solr request handlers. set -eu +[[ $(basename $PWD) == "tools" ]] || cd tools source common.sh @@ -64,7 +65,9 @@ mkdir -p ../priv/java_lib # -C ../java_src/ com/basho/yokozuna/handler \ # -C ../java_src/ com/basho/yokozuna/query (cd ../java_src \ - && ant all -Dyz_vsn=${YZ_JAR_VSN} -Dyz_mon_vsn=${MON_JAR_VSN} \ + && ant all \ + -Dyz_vsn=${YZ_JAR_VSN} -Dyz_mon_vsn=${MON_JAR_VSN} \ + -Dsolr_vsn=${SOLR_VSN} ) cp ../yz-build/$YZ_JAR_NAME . From 05f0bdf75bed22e0d031864468b9c8e14afe1c4a Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 22:24:39 +0400 Subject: [PATCH 20/54] make love not war --- tools/build-jar.sh | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index 454d3747..ee9738a7 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -38,17 +38,17 @@ else ./grab-solr.sh fi -if [ ! -e $SOLR_JAR_DIR ]; then - echo "Exploding ${SOLR_WAR}..." - mkdir $SOLR_JAR_DIR - cp $SOLR_WAR $SOLR_JAR_DIR - (cd $SOLR_JAR_DIR \ - && jar xf solr.war WEB-INF/lib \ - && mv WEB-INF/lib/* . \ - && rm -rf WEB-INF solr.war) - # copy logging jars - cp $SOLR_DIR/lib/ext/* $SOLR_JAR_DIR -fi +# if [ ! -e $SOLR_JAR_DIR ]; then +# echo "Exploding ${SOLR_WAR}..." +# mkdir $SOLR_JAR_DIR +# cp $SOLR_WAR $SOLR_JAR_DIR +# (cd $SOLR_JAR_DIR \ +# && jar xf solr.war WEB-INF/lib \ +# && mv WEB-INF/lib/* . \ +# && rm -rf WEB-INF solr.war) +# # copy logging jars +# cp $SOLR_DIR/lib/ext/* $SOLR_JAR_DIR +# fi echo "Compiling..." From ffdafce6fce8d6c0dd49d2a4001a34bbb68ba697 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 22:25:52 +0400 Subject: [PATCH 21/54] make sure custom jars exist --- rebar.config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rebar.config b/rebar.config index 2e0eb74c..be048eaf 100644 --- a/rebar.config +++ b/rebar.config @@ -17,7 +17,7 @@ {riakc, ".*", {git, "git://github.com/basho/riak-erlang-client", {tag, "2.5.5"}}} ]}. -{pre_hooks, [{compile, "./tools/grab-solr.sh"}]}. +{pre_hooks, [{compile, "./tools/build-jar.sh"}]}. {plugin_dir, ".rebar_plugins"}. {plugins, [rebar_test_plugin]}. From f53313645bb79ae3331406f0f706899ff0316b0a Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Thu, 21 Jun 2018 22:26:24 +0400 Subject: [PATCH 22/54] precompiled jars --- tools/yokozuna-3.1S.jar | Bin 0 -> 4813 bytes tools/yokozuna-3.1S.jar.sha512 | 1 + tools/yz_monitor-1S.jar | Bin 0 -> 6940 bytes tools/yz_monitor-1S.jar.sha512 | 1 + 4 files changed, 2 insertions(+) create mode 100644 tools/yokozuna-3.1S.jar create mode 100644 tools/yokozuna-3.1S.jar.sha512 create mode 100644 tools/yz_monitor-1S.jar create mode 100644 tools/yz_monitor-1S.jar.sha512 diff --git a/tools/yokozuna-3.1S.jar b/tools/yokozuna-3.1S.jar new file mode 100644 index 0000000000000000000000000000000000000000..cc018312d811002003a2fbf188082ed9bffaf88e GIT binary patch literal 4813 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 Y%P+vhfcp41HM*lC>KFh3X8!i}Z;H+l@Bjb+ literal 0 HcmV?d00001 diff --git a/tools/yokozuna-3.1S.jar.sha512 b/tools/yokozuna-3.1S.jar.sha512 new file mode 100644 index 00000000..24ddaa77 --- /dev/null +++ b/tools/yokozuna-3.1S.jar.sha512 @@ -0,0 +1 @@ +a93bdcefc422cca6d700917c230185fc82c7cddaf0764daed59c110e80b493cc yokozuna-3.1S.jar diff --git a/tools/yz_monitor-1S.jar b/tools/yz_monitor-1S.jar new file mode 100644 index 0000000000000000000000000000000000000000..eca1cd644da37029b3b8023dd091cb05a82b737c GIT binary patch literal 6940 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 literal 0 HcmV?d00001 diff --git a/tools/yz_monitor-1S.jar.sha512 b/tools/yz_monitor-1S.jar.sha512 new file mode 100644 index 00000000..61090e8a --- /dev/null +++ b/tools/yz_monitor-1S.jar.sha512 @@ -0,0 +1 @@ +9cb6413bd2b151b2ec80d2eeaf435fd9aab605c58dfaaef07e302ef9dde1d179 yz_monitor-1S.jar From 2c8d746723da6be59df4502a9adf6e8b4a16405d Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 2 Jul 2018 22:07:59 +0400 Subject: [PATCH 23/54] yz_schema: allow v1.6 --- src/yz_schema.erl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/yz_schema.erl b/src/yz_schema.erl index 90c294cd..35910ae5 100644 --- a/src/yz_schema.erl +++ b/src/yz_schema.erl @@ -23,7 +23,8 @@ -include("yokozuna.hrl"). -compile(export_all). --define(SCHEMA_VSN, "1.5"). +-define(SCHEMA_VSN_OLD, "1.5"). +-define(SCHEMA_VSN, "1.6"). -type schema_err() :: {error, string()}. %%%=================================================================== @@ -124,6 +125,8 @@ verify_name(Name) -> -spec verify_vsn({ok, schema()} | schema_err()) -> {ok, schema()} | schema_err(). verify_vsn({ok, Schema}) -> case xmerl_xpath:string("string(/schema/@version)", Schema) of + {xmlObj, string, ?SCHEMA_VSN_OLD} -> + {ok, Schema}; {xmlObj, string, ?SCHEMA_VSN} -> {ok, Schema}; _ -> From 88c5231695e76795bb0a4c8c795629266196aeb3 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 3 Jul 2018 00:19:09 +0400 Subject: [PATCH 24/54] grab-solr: download solr from archives MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 7.4 came ⇒ 7.3.1 disappeared everywhere! --- tools/grab-solr.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 27fef0ef..f5fea0a1 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -38,7 +38,7 @@ COL1_DIR=$EXAMPLE_DIR/solr/collection1 # https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz # https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz.asc # https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz.sha1 -ARTIFACT_URL_PREFIX=https://www.apache.org/dist/lucene/solr/7.3.1 +ARTIFACT_URL_PREFIX=https://archive.apache.org/dist/lucene/solr/7.3.1/ check_for_solr() { @@ -72,7 +72,7 @@ get_solr() echo "OK, tar = ${FILENAME}" } -if check_for_solr; then +if check_for_solr && [[ ! -v FORCE_BUILD_SOLR_DIR ]]; then echo "Solr is there, $SOLR_DIR" else mkdir -p $BUILD_DIR && cd $BUILD_DIR From 5418cd5616c81876f7c8afe7c958cfa59763b841 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 9 Jul 2018 21:49:33 +0400 Subject: [PATCH 25/54] minor java code changes --- java_src/com/basho/yokozuna/monitor/Monitor.java | 5 +++-- java_src/com/basho/yokozuna/query/SimpleQueryExample.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/java_src/com/basho/yokozuna/monitor/Monitor.java b/java_src/com/basho/yokozuna/monitor/Monitor.java index a6e3e38a..087a8bc9 100644 --- a/java_src/com/basho/yokozuna/monitor/Monitor.java +++ b/java_src/com/basho/yokozuna/monitor/Monitor.java @@ -15,10 +15,11 @@ */ package com.basho.yokozuna.monitor; +import org.slf4j.*; + import java.io.IOException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + /** * Kill Solr when stdin closes, as it will when the Erlang VM shuts diff --git a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java index 7b6bec60..c6b262ef 100644 --- a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java +++ b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java @@ -15,7 +15,7 @@ import org.apache.solr.client.solrj.*; import org.apache.solr.client.solrj.impl.HttpSolrClient; -import org.apache.solr.client.solrj.request.QueryRequest; +//import org.apache.solr.client.solrj.request.QueryRequest; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.params.ModifiableSolrParams; @@ -38,7 +38,7 @@ public static void main(String[] args) ModifiableSolrParams params = new ModifiableSolrParams(); params.set("qt", "/"); params.set("q", field + ":" + term); - SolrRequest req = new QueryRequest(params); + //SolrRequest req = new QueryRequest(params); QueryResponse resp = solr.query(params); From 8acbbaf5851ce847f6c2cef0a5858275c0906fe4 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 2 Jul 2018 21:40:46 +0400 Subject: [PATCH 26/54] trivial Monitor.java change --- java_src/com/basho/yokozuna/monitor/Monitor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/java_src/com/basho/yokozuna/monitor/Monitor.java b/java_src/com/basho/yokozuna/monitor/Monitor.java index 087a8bc9..e1ca4c96 100644 --- a/java_src/com/basho/yokozuna/monitor/Monitor.java +++ b/java_src/com/basho/yokozuna/monitor/Monitor.java @@ -76,7 +76,7 @@ public static void main(String[] args) { try { while(true) { // hang out until thread sees stdin close - Thread.sleep(1000); + Thread.sleep(1000L); } } catch (final InterruptedException ie) { From 871ec25e25e719100c580459eb38e50264992a9b Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 2 Jul 2018 21:42:03 +0400 Subject: [PATCH 27/54] modernize SimpleQueryExample --- ...ueryExample.java => SimpleQueryExample.java.0} | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) rename java_src/com/basho/yokozuna/query/{SimpleQueryExample.java => SimpleQueryExample.java.0} (79%) diff --git a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java.0 similarity index 79% rename from java_src/com/basho/yokozuna/query/SimpleQueryExample.java rename to java_src/com/basho/yokozuna/query/SimpleQueryExample.java.0 index c6b262ef..288a214d 100644 --- a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java +++ b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java.0 @@ -13,19 +13,23 @@ package com.basho.yokozuna.query; -import org.apache.solr.client.solrj.*; +import java.io.IOException; + +import org.apache.solr.client.solrj.SolrClient; +import org.apache.solr.client.solrj.SolrServerException; import org.apache.solr.client.solrj.impl.HttpSolrClient; //import org.apache.solr.client.solrj.request.QueryRequest; +import org.apache.solr.client.solrj.impl.HttpSolrClient.Builder; import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.params.ModifiableSolrParams; -import java.io.IOException; - +//@SuppressWarnings("UseOfSystemOutOrSystemErr") public class SimpleQueryExample { - public static void main(String[] args) + + public static void main(final String[] args) throws SolrServerException, IOException { final String baseURL = args[0]; final String index = args[1]; @@ -33,7 +37,8 @@ public static void main(String[] args) final String term = args[3]; String prefix = baseURL + "/" + index; - SolrClient solr = new HttpSolrClient.Builder(prefix).build(); + SolrClient solr = new Builder(prefix).build(); + ModifiableSolrParams params = new ModifiableSolrParams(); params.set("qt", "/"); From 1f151412e739254adc11c47334a75d47ac2f56d6 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 9 Jul 2018 21:56:11 +0400 Subject: [PATCH 28/54] SIMPLE rename back --- .../query/{SimpleQueryExample.java.0 => SimpleQueryExample.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename java_src/com/basho/yokozuna/query/{SimpleQueryExample.java.0 => SimpleQueryExample.java} (100%) diff --git a/java_src/com/basho/yokozuna/query/SimpleQueryExample.java.0 b/java_src/com/basho/yokozuna/query/SimpleQueryExample.java similarity index 100% rename from java_src/com/basho/yokozuna/query/SimpleQueryExample.java.0 rename to java_src/com/basho/yokozuna/query/SimpleQueryExample.java From e93feb55da41b21b142d39689433fadbf10b20f6 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 2 Jul 2018 19:44:47 +0400 Subject: [PATCH 29/54] java changes stash --- .../basho/yokozuna/handler/EntropyData.java | 176 ++++++++++++------ 1 file changed, 118 insertions(+), 58 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/EntropyData.java b/java_src/com/basho/yokozuna/handler/EntropyData.java index ecc9ff53..7995ce65 100644 --- a/java_src/com/basho/yokozuna/handler/EntropyData.java +++ b/java_src/com/basho/yokozuna/handler/EntropyData.java @@ -16,25 +16,30 @@ package com.basho.yokozuna.handler; +import java.io.IOException; + +import org.apache.commons.codec.binary.Base64; +import org.apache.lucene.index.LeafReader; +import org.apache.lucene.index.PostingsEnum; +import org.apache.lucene.index.Terms; +import org.apache.lucene.index.TermsEnum; +import org.apache.lucene.util.Bits; +import org.apache.lucene.util.BytesRef; +//import org.apache.lucene.search.IndexSearcher; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; import org.apache.solr.core.PluginInfo; import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.response.SolrQueryResponse; +//import org.apache.solr.search.BitDocSet; import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.util.plugin.PluginInfoInitialized; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import org.apache.lucene.index.LeafReader; -import org.apache.lucene.index.Terms; -import org.apache.lucene.index.TermsEnum; -import org.apache.lucene.util.Bits; -import org.apache.lucene.util.BytesRef; - -import java.io.IOException; -import org.apache.commons.codec.binary.Base64; -import org.slf4j.*; +import java.util.*; //import org.apache.lucene.index.AtomicReader; @@ -51,8 +56,8 @@ public class EntropyData protected static final Logger log = LoggerFactory.getLogger(EntropyData.class); static final BytesRef DEFAULT_CONT = null; - static final int DEFAULT_N = 1000; - static final String ENTROPY_DATA_FIELD = "_yz_ed"; + static final int DEFAULT_N = 1000; + static final String ENTROPY_DATA_FIELD = "_yz_ed"; // Pass info from solrconfig.xml public void init(final PluginInfo info) { @@ -82,9 +87,22 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons try { final SolrIndexSearcher searcher = req.getSearcher(); final LeafReader rdr = searcher.getSlowAtomicReader(); - BytesRef tmp = null; + + + //BitDocSet bset = searcher.getLiveDocs(); + + //IndexSearcher isearcher = searcher; + //LeafReaderContext z = isearcher.leafContext; + + final Terms terms = rdr.terms(ENTROPY_DATA_FIELD); - // .terms(ENTROPY_DATA_FIELD); + + /* + LeafReaderContext lrc = rdr.getContext(); + LeafReader lr = lrc.reader(); + BitDocSet bds = searcher.getLiveDocs(); +*/ + if (terms == null) { rsp.add("more", false); @@ -92,6 +110,9 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons } final TermsEnum te = terms.iterator(); + + BytesRef tmp = null; + //new BitDocSet if (isContinue(cont)) { if (log.isDebugEnabled()) { @@ -99,11 +120,13 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons } final TermsEnum.SeekStatus status = te.seekCeil(cont); - - if (status == TermsEnum.SeekStatus.END) { + log.debug("seek {} -> {}", cont, status); + switch (status) { + case END: rsp.add("more", false); return; - } else if (status == TermsEnum.SeekStatus.FOUND) { + + case FOUND: // If this term has already been seen then skip it. tmp = te.next(); @@ -111,54 +134,35 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons rsp.add("more", false); return; } - } else if (status == TermsEnum.SeekStatus.NOT_FOUND) { + break; + + case NOT_FOUND: tmp = te.next(); + break; } - } else { + } + else { tmp = te.next(); } int count = 0; BytesRef current = null; final Bits liveDocs = rdr.getLiveDocs(); - - while(!endOfItr(tmp) && count < n) { + //BitDocSet sss = rdr.getLiveDocs(); + + for (BytesRef ref = tmp; ref != null && count < n; ref = te.next()) { + //while(!endOfItr(tmp) && count < n) { + // • live if (isLive(liveDocs, te)) { - current = BytesRef.deepCopyOf(tmp); - final String text = tmp.utf8ToString(); - if (log.isDebugEnabled()) { - log.debug("text: " + text); - } - final String [] vals = text.split(" "); - - final String docPartition = vals[1]; - - /* - If the partition matches the one we are looking for, - parse the version, bkey, and object hash from the - entropy data field (term). - */ - if (partition.equals(docPartition)) { - final String vsn = vals[0]; - - final String [] decoded = decodeForVersion(vsn, - vals[2], - vals[3], - vals[4]); - - final String hash = vals[5]; - - final SolrDocument tmpDoc = new SolrDocument(); - tmpDoc.addField("vsn", vsn); - tmpDoc.addField("riak_bucket_type", decoded[0]); - tmpDoc.addField("riak_bucket_name", decoded[1]); - tmpDoc.addField("riak_key", decoded[2]); - tmpDoc.addField("base64_hash", hash); - docs.add(tmpDoc); + current = BytesRef.deepCopyOf(ref); + Optional x = getDoc(partition, current); + if (x.isPresent()) { + docs.add(x.get()); count++; - } - } - tmp = te.next(); + } + } // isLive(te) + + //tmp = te.next(); } if (count < n) { @@ -166,7 +170,7 @@ entropy data field (term). } else { rsp.add("more", true); final String newCont = - org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(current.bytes); + org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(current.bytes); // The continue context for next req to start where // this one finished. rsp.add("continuation", newCont); @@ -175,14 +179,70 @@ entropy data field (term). docs.setNumFound(count); } catch (final Exception e) { - e.printStackTrace(); + log.error("bad things, {}", e); } } - static boolean isLive(final Bits liveDocs, final TermsEnum te) throws IOException { + static boolean isLive(final Bits liveDocs, final TermsEnum te) { + //log.debug("is-live {}", te); + + if (liveDocs == null) + return true; + try { + PostingsEnum posts = te.postings(null, PostingsEnum.NONE); + int did = posts.nextDoc(); + assert did != -1; + assert did != PostingsEnum.NO_MORE_DOCS; + assert posts.nextDoc() == PostingsEnum.NO_MORE_DOCS; + + boolean r = liveDocs.get(did); + log.debug("is-live [{}] => {}", did, r); + return r; + } catch (IOException e) { + log.error("cannot get postings for TermsEnum {}", te); + return false; + } + //final DocsEnum de = te. //docs(liveDocs, null); //return de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS; - return true; + + //return true; + //te. + } + + private Optional getDoc(String partition, BytesRef tmp) { + final String text = tmp.utf8ToString(); + if (log.isDebugEnabled()) { + log.debug("text: " + text); + } + final String [] vals = text.split(" "); + + final String docPartition = vals[1]; + + /* + If the partition matches the one we are looking for, + parse the version, bkey, and object hash from the + entropy data field (term). + */ + if (partition.equals(docPartition)) { + final String vsn = vals[0]; + + final String [] decoded = decodeForVersion(vsn, + vals[2], + vals[3], + vals[4]); + + final String hash = vals[5]; + + final SolrDocument tmpDoc = new SolrDocument(); + tmpDoc.addField("vsn", vsn); + tmpDoc.addField("riak_bucket_type", decoded[0]); + tmpDoc.addField("riak_bucket_name", decoded[1]); + tmpDoc.addField("riak_key", decoded[2]); + tmpDoc.addField("base64_hash", hash); + return Optional.of(tmpDoc); + } + return Optional.empty(); } static BytesRef decodeCont(final String cont) { From 22d8a4155fc651b4d2d6f484079db9474a402c8f Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 2 Jul 2018 21:42:43 +0400 Subject: [PATCH 30/54] EntropyData: (*many*) changes for layered index / solr7 --- .../basho/yokozuna/handler/EntropyData.java | 287 +++++++++--------- 1 file changed, 150 insertions(+), 137 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/EntropyData.java b/java_src/com/basho/yokozuna/handler/EntropyData.java index 7995ce65..1660d173 100644 --- a/java_src/com/basho/yokozuna/handler/EntropyData.java +++ b/java_src/com/basho/yokozuna/handler/EntropyData.java @@ -16,7 +16,10 @@ package com.basho.yokozuna.handler; + import java.io.IOException; +import java.util.Optional; +//import java.util.function.*; import org.apache.commons.codec.binary.Base64; import org.apache.lucene.index.LeafReader; @@ -25,26 +28,28 @@ import org.apache.lucene.index.TermsEnum; import org.apache.lucene.util.Bits; import org.apache.lucene.util.BytesRef; -//import org.apache.lucene.search.IndexSearcher; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; +import org.apache.solr.common.SolrException; +import org.apache.solr.common.SolrException.ErrorCode; import org.apache.solr.core.PluginInfo; import org.apache.solr.handler.RequestHandlerBase; import org.apache.solr.request.SolrQueryRequest; import org.apache.solr.response.SolrQueryResponse; -//import org.apache.solr.search.BitDocSet; import org.apache.solr.search.SolrIndexSearcher; import org.apache.solr.util.plugin.PluginInfoInitialized; +//import org.codehaus.jackson.map.Serializers; +//import org.jetbrains.annotations.Contract; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - -import java.util.*; - - +import org.apache.commons.codec.binary.Base64; +//import org.apache.lucene.search.IndexSearcher; +//import org.apache.solr.search.BitDocSet; //import org.apache.lucene.index.AtomicReader; //import org.apache.lucene.index.DocsEnum; + /** * This class provides handler logic to iterate over the entropy data * stored in the index. This data can be used to build a hash tree to @@ -54,168 +59,176 @@ public class EntropyData extends RequestHandlerBase implements PluginInfoInitialized { - protected static final Logger log = LoggerFactory.getLogger(EntropyData.class); - static final BytesRef DEFAULT_CONT = null; - static final int DEFAULT_N = 1000; - static final String ENTROPY_DATA_FIELD = "_yz_ed"; + private static final Logger log = LoggerFactory.getLogger(EntropyData.class); + private static final BytesRef DEFAULT_CONT = null; + private static final int DEFAULT_N = 1000; + // @SuppressWarnings("WeakerAccess") + static final String ENTROPY_DATA_FIELD = "_yz_ed"; // Pass info from solrconfig.xml public void init(final PluginInfo info) { - init(info.initArgs); + this.init(info.initArgs); } @Override - public void handleRequestBody(final SolrQueryRequest req, final SolrQueryResponse rsp) - throws Exception, InstantiationException, IllegalAccessException { + public void handleRequestBody(final SolrQueryRequest req, final SolrQueryResponse response) + throws SolrException { + final String contParam = req.getParams().get("continue"); - final BytesRef cont = contParam != null ? - decodeCont(contParam) : DEFAULT_CONT; + final BytesRef cont = contParam != null ? decodeCont(contParam) : DEFAULT_CONT; final int n = req.getParams().getInt("n", DEFAULT_N); final String partition = req.getParams().get("partition"); if (partition == null) { - throw new Exception("Parameter 'partition' is required"); + throw new SolrException(ErrorCode.BAD_REQUEST, "Parameter 'partition' is required"); } - final SolrDocumentList docs = new SolrDocumentList(); - - // Add docs here and modify object inline in code - rsp.add("response", docs); + final SolrDocumentList resultDocs = new SolrDocumentList(); + // Add docs here and modify ‘docs’ inline in code + response.add("response", resultDocs); try { final SolrIndexSearcher searcher = req.getSearcher(); final LeafReader rdr = searcher.getSlowAtomicReader(); - - //BitDocSet bset = searcher.getLiveDocs(); - - //IndexSearcher isearcher = searcher; - //LeafReaderContext z = isearcher.leafContext; - - - final Terms terms = rdr.terms(ENTROPY_DATA_FIELD); + final Optional terms = Optional.ofNullable(rdr.terms(this.ENTROPY_DATA_FIELD)); - /* - LeafReaderContext lrc = rdr.getContext(); - LeafReader lr = lrc.reader(); - BitDocSet bds = searcher.getLiveDocs(); -*/ - - - if (terms == null) { - rsp.add("more", false); + if (!terms.isPresent()) { + noMore(response); return; } - final TermsEnum te = terms.iterator(); - - BytesRef tmp = null; - //new BitDocSet + final TermsEnum te = terms.get().iterator(); + if (isContinue(cont)) { if (log.isDebugEnabled()) { - log.debug("continue from " + cont); + log.debug("continue from {}", cont); } - final TermsEnum.SeekStatus status = te.seekCeil(cont); - log.debug("seek {} -> {}", cont, status); - switch (status) { + final TermsEnum.SeekStatus sought = te.seekCeil(cont); + if (log.isDebugEnabled()) + log.debug("seek({}) → {}", cont, sought); + switch (sought) { case END: - rsp.add("more", false); + noMore(response); return; - + case FOUND: // If this term has already been seen then skip it. - tmp = te.next(); - - if (endOfItr(tmp)) { - rsp.add("more", false); + if (te.next() == null) { + noMore(response); return; } break; - + case NOT_FOUND: - tmp = te.next(); + te.next(); break; } } + /* no cont parameter */ else { - tmp = te.next(); + te.next(); } - int count = 0; + int count = 0; // TODO just do docs.size()? + BytesRef current = null; - final Bits liveDocs = rdr.getLiveDocs(); - //BitDocSet sss = rdr.getLiveDocs(); - - for (BytesRef ref = tmp; ref != null && count < n; ref = te.next()) { - //while(!endOfItr(tmp) && count < n) { - // • live - if (isLive(liveDocs, te)) { - current = BytesRef.deepCopyOf(ref); - Optional x = getDoc(partition, current); - if (x.isPresent()) { - docs.add(x.get()); - count++; - } - } // isLive(te) - - //tmp = te.next(); - } + + { + final Bits liveDocs = rdr.getLiveDocs(); + + while (te.next() != null && count < n) { + if (isLive(liveDocs, te)) { + final BytesRef ref = te.term(); + current = BytesRef.deepCopyOf(ref); // FIXME why + + Optional x = getDocIfPn(partition, current); + if (x.isPresent()) { + resultDocs.add(x.get()); + count++; + } + } // isLive(te) + } + } //liveDocs if (count < n) { - rsp.add("more", false); + noMore(response); } else { - rsp.add("more", true); - final String newCont = - org.apache.commons.codec.binary.Base64.encodeBase64URLSafeString(current.bytes); + response.add("more", true); + + assert current != null; + + final String newCont = Base64.encodeBase64URLSafeString(current.bytes); // The continue context for next req to start where // this one finished. - rsp.add("continuation", newCont); + response.add("continuation", newCont); } - docs.setNumFound(count); - - } catch (final Exception e) { + resultDocs.setNumFound(count); + } + catch (final Exception e) { log.error("bad things, {}", e); } + } - static boolean isLive(final Bits liveDocs, final TermsEnum te) { - //log.debug("is-live {}", te); + private void noMore(SolrQueryResponse rsp) { + rsp.add("more", false); + } + + + // @Contract("null, _ -> true") + private static boolean isLive(final Bits liveDocs, final TermsEnum te) { if (liveDocs == null) return true; + try { - PostingsEnum posts = te.postings(null, PostingsEnum.NONE); - int did = posts.nextDoc(); - assert did != -1; - assert did != PostingsEnum.NO_MORE_DOCS; - assert posts.nextDoc() == PostingsEnum.NO_MORE_DOCS; - - boolean r = liveDocs.get(did); - log.debug("is-live [{}] => {}", did, r); - return r; + PostingsEnum posts = te.postings(null, PostingsEnum.NONE); + int firstDid = posts.nextDoc(); + assert firstDid != -1; // as we've called nextDoc() + assert firstDid != posts.NO_MORE_DOCS; // there should be one + boolean alive = liveDocs.get(firstDid); + + { + // FIXME Is this even possible? + // Being overly causious. + int did; + boolean firstAlive = alive; + while ((did = posts.nextDoc()) != posts.NO_MORE_DOCS) { + // Solr, are you drunk + boolean a = liveDocs.get(did); + log.info("Same-terms docs: first was {} [alive={}] and now {} [alive={}]", firstDid, firstAlive, did, a); + alive = alive || a; + } + } + + if (log.isDebugEnabled()) { + if (!alive) + log.debug("Dead! docid={}", firstDid); + } + return alive; } catch (IOException e) { log.error("cannot get postings for TermsEnum {}", te); return false; } - - //final DocsEnum de = te. //docs(liveDocs, null); - //return de.nextDoc() != DocIdSetIterator.NO_MORE_DOCS; - - //return true; - //te. + + } - private Optional getDoc(String partition, BytesRef tmp) { + /** + * Get a {@link SolrDocument} encoded in tmp, if it matches {@param partition} + */ + private Optional getDocIfPn(String partition, BytesRef tmp) { final String text = tmp.utf8ToString(); if (log.isDebugEnabled()) { log.debug("text: " + text); } - final String [] vals = text.split(" "); + final String[] vals = text.split(" "); final String docPartition = vals[1]; @@ -227,10 +240,10 @@ entropy data field (term). if (partition.equals(docPartition)) { final String vsn = vals[0]; - final String [] decoded = decodeForVersion(vsn, - vals[2], - vals[3], - vals[4]); + final String[] decoded = decodeForVersion(vsn, + vals[2], + vals[3], + vals[4]); final String hash = vals[5]; @@ -245,16 +258,16 @@ entropy data field (term). return Optional.empty(); } - static BytesRef decodeCont(final String cont) { + private static BytesRef decodeCont(final String cont) { final byte[] bytes = org.apache.commons.codec.binary.Base64.decodeBase64(cont); return new BytesRef(bytes); } - static boolean endOfItr(final BytesRef returnValue) { - return returnValue == null; - } + // private static boolean endOfItr(final BytesRef returnValue) { + // return returnValue == null; + // } - static boolean isContinue(final BytesRef cont) { + private static boolean isContinue(final BytesRef cont) { return DEFAULT_CONT != cont; } @@ -263,44 +276,44 @@ public String getDescription() { return "vector clock data iterator"; } -// @Override -// public String getVersion() { -// return "0.0.1"; -// } + // @Override + // public String getVersion() { + // return "0.0.1"; + // } /** - @param vsn a String vsn number referring to the item's ed handler version - @param riakBType riak bucket-type - @param riakBName riak bucket-name - @param riakKey riak key - @return a String array consisting of a Bucket Type, Bucket Name, and Riak Key - */ - private String [] decodeForVersion(String vsn, String riakBType, String riakBName, String riakKey) { - final String [] bKeyInfo; - switch(Integer.parseInt(vsn)) { - case 1: - bKeyInfo = new String [] {riakBType, riakBName, riakKey}; - break; - default: - bKeyInfo = new String [] - { - decodeBase64DocPart(riakBType), - decodeBase64DocPart(riakBName), - decodeBase64DocPart(riakKey) - }; - break; + * @param vsn a String vsn number referring to the item's ed handler version + * @param riakBType riak bucket-type + * @param riakBName riak bucket-name + * @param riakKey riak key + * @return a String array consisting of a Bucket Type, Bucket Name, and Riak Key + */ + private String[] decodeForVersion(String vsn, String riakBType, String riakBName, String riakKey) { + final String[] bKeyInfo; + switch (Integer.parseInt(vsn)) { + case 1: + bKeyInfo = new String[]{riakBType, riakBName, riakKey}; + break; + default: + bKeyInfo = new String[] + { + decodeBase64DocPart(riakBType), + decodeBase64DocPart(riakBName), + decodeBase64DocPart(riakKey) + }; + break; } return bKeyInfo; } /** - @param base64EncodedVal base64 encoded string - @return a string of decoded base64 bytes - */ + * @param base64EncodedVal base64 encoded string + * @return a string of decoded base64 bytes + */ - public String decodeBase64DocPart(String base64EncodedVal) { + public static String decodeBase64DocPart(String base64EncodedVal) { //return new String(DatatypeConverter.parseBase64Binary( - // base64EncodedVal)); + // base64EncodedVal)); return new String(Base64.decodeBase64(base64EncodedVal)); } } From de5cb6bb6d6f5c4333730989103bda75e0a4449c Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 3 Jul 2018 22:22:22 +0400 Subject: [PATCH 31/54] explicitly run needed ./tools/*.sh in rebar.config --- rebar.config | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/rebar.config b/rebar.config index be048eaf..2d8373f3 100644 --- a/rebar.config +++ b/rebar.config @@ -17,7 +17,11 @@ {riakc, ".*", {git, "git://github.com/basho/riak-erlang-client", {tag, "2.5.5"}}} ]}. -{pre_hooks, [{compile, "./tools/build-jar.sh"}]}. + {pre_hooks, [ + {compile, "./tools/grab-solr.sh"}, + {compile, "./tools/build-jar.sh"}, + {compile, "./tools/copy-jars.sh"} + ]}. {plugin_dir, ".rebar_plugins"}. {plugins, [rebar_test_plugin]}. @@ -26,3 +30,10 @@ {test_paths, ["riak_test"]}, {test_output, "riak_test/ebin"} ]}. + + + + +%% Local Variables: +%% mode: erlang +%% End: From d4f4925a5a42204f47d3f7df0896409c60570b10 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 3 Jul 2018 22:54:04 +0400 Subject: [PATCH 32/54] _yz_default: no Kurdish. TODO: check/update everything --- priv/default_schema.xml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/priv/default_schema.xml b/priv/default_schema.xml index 32058ca6..5dfe15aa 100644 --- a/priv/default_schema.xml +++ b/priv/default_schema.xml @@ -48,7 +48,6 @@ - @@ -456,18 +455,6 @@ - - - - - - - - - - - - From dd4cb0b254d20661938f838bacee1d60df496092 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 00:05:37 +0400 Subject: [PATCH 33/54] set yz.lib.dir correctly (XXX needed?) --- src/yz_solr_proc.erl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/yz_solr_proc.erl b/src/yz_solr_proc.erl index 7d2d8ec1..44f4bed3 100644 --- a/src/yz_solr_proc.erl +++ b/src/yz_solr_proc.erl @@ -252,7 +252,9 @@ build_cmd(JavaPath, SolrPort, _SolrJMXPort, Dir, TempDir) -> "file://" ++ filename:join([filename:absname(Etc), "solr-log4j.properties"]) }, - { "yz.lib.dir", filename:join([?YZ_PRIV, "java_lib"]) } + { "yz.lib.dir", + "file://" ++ filename:join(?YZ_PRIV, "java_lib") + } ], %% HostContext = "-DhostContext=" ++ ?SOLR_HOST_CONTEXT, From 9cbd665128d8287684d6754432c139685f63afb2 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 16:05:28 +0400 Subject: [PATCH 34/54] Revert "set yz.lib.dir correctly (XXX needed?)" This reverts commit 0fb1d04d1cbd410d6ec7cb6373fdbcb51f4a96f2. --- src/yz_solr_proc.erl | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/yz_solr_proc.erl b/src/yz_solr_proc.erl index 44f4bed3..7d2d8ec1 100644 --- a/src/yz_solr_proc.erl +++ b/src/yz_solr_proc.erl @@ -252,9 +252,7 @@ build_cmd(JavaPath, SolrPort, _SolrJMXPort, Dir, TempDir) -> "file://" ++ filename:join([filename:absname(Etc), "solr-log4j.properties"]) }, - { "yz.lib.dir", - "file://" ++ filename:join(?YZ_PRIV, "java_lib") - } + { "yz.lib.dir", filename:join([?YZ_PRIV, "java_lib"]) } ], %% HostContext = "-DhostContext=" ++ ?SOLR_HOST_CONTEXT, From 682ebeef824e1b96965f666c5248bdf6fb3e464b Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 00:20:43 +0400 Subject: [PATCH 35/54] kill outdated java options --- priv/yokozuna.schema | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/priv/yokozuna.schema b/priv/yokozuna.schema index a4e164d2..026f3346 100644 --- a/priv/yokozuna.schema +++ b/priv/yokozuna.schema @@ -33,7 +33,7 @@ %% i.e. -XX, may not be portable across JVM implementations. %% E.g. -XX:+UseCompressedStrings {mapping, "search.solr.jvm_options", "yokozuna.solr_jvm_opts", [ - {default, "-d64 -Xms1g -Xmx1g -XX:+UseCompressedOops"} + {default, "-Xms1g -Xmx1g"} ]}. %% @doc The directory where Search's Active Anti-Entropy data files From 3027082c8d1c8a0e64e4f51deeac838751bf40fc Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 00:21:07 +0400 Subject: [PATCH 36/54] _yz_default: correct _version_ type --- priv/default_schema.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/priv/default_schema.xml b/priv/default_schema.xml index 5dfe15aa..8543a9b4 100644 --- a/priv/default_schema.xml +++ b/priv/default_schema.xml @@ -20,7 +20,7 @@ - + @@ -140,6 +140,8 @@ + + From 0834ca465b7281cd8057c6124f2c2901fe0dc7e6 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 3 Jul 2018 22:25:15 +0400 Subject: [PATCH 37/54] tooling --- tools/common.sh | 4 ++-- tools/copy-jars.sh | 10 ++++++---- tools/grab-solr.sh | 4 +--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/tools/common.sh b/tools/common.sh index 2bb83003..9d4a5b11 100644 --- a/tools/common.sh +++ b/tools/common.sh @@ -3,11 +3,11 @@ declare SOLR_VSN=7.3.1 -declare YZ_JAR_VSN=3.1S +declare YZ_JAR_VSN=3.2 declare YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar declare YZ_JAR_SHA=$YZ_JAR_NAME.sha -declare MON_JAR_VSN=1S +declare MON_JAR_VSN=1.2 declare MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar declare MON_JAR_SHA=$MON_JAR_NAME.sha diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh index 541e8a65..e7941d61 100755 --- a/tools/copy-jars.sh +++ b/tools/copy-jars.sh @@ -1,28 +1,30 @@ #!/usr/bin/env sh set -eu + +[[ $(basename $PWD) == "tools" ]] || cd tools source common.sh JAVA_LIB=../priv/java_lib YZ_ARTIFACTS_URL="$(realpath ../yz-build)" -if [[ ! -f $JAVA_LIB/$YZ_JAR_NAME ]] +if [ ! -f $JAVA_LIB/$YZ_JAR_NAME ] || (( ${FORCE_REBUILD:-0} )) then mkdir -p $JAVA_LIB echo "Downloading $YZ_JAR_NAME" # download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" download ${YZ_ARTIFACTS_URL}/${YZ_JAR_NAME} - cp $YZ_JAR_NAME $JAVA_LIB + cp -v $YZ_JAR_NAME $JAVA_LIB fi EXT_LIB=../priv/solr/lib/ext -if [[ ! -f $EXT_LIB/$MON_JAR_NAME ]] +if [ ! -f $EXT_LIB/$MON_JAR_NAME ] || (( ${FORCE_REBUILD:-0} )) then echo "Downloading $MON_JAR_NAME" #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" download ${YZ_ARTIFACTS_URL}/${MON_JAR_NAME} - cp $MON_JAR_NAME $EXT_LIB + cp -v $MON_JAR_NAME $EXT_LIB fi echo Done. diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index f5fea0a1..98797422 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -32,8 +32,6 @@ SRC_DIR=$BUILD_DIR/$VSN EXAMPLE_DIR=$SRC_DIR/example SERVER_DIR=$SRC_DIR/server -COL1_DIR=$EXAMPLE_DIR/solr/collection1 - # http://apache.cs.uu.nl/lucene/solr/7.3.1/solr-7.3.1.tgz # https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz # https://www.apache.org/dist/lucene/solr/7.3.1/solr-7.3.1.tgz.asc @@ -72,7 +70,7 @@ get_solr() echo "OK, tar = ${FILENAME}" } -if check_for_solr && [[ ! -v FORCE_BUILD_SOLR_DIR ]]; then +if check_for_solr && [[ ! -v FORCE_REBUILD ]]; then echo "Solr is there, $SOLR_DIR" else mkdir -p $BUILD_DIR && cd $BUILD_DIR From d5682880440d5a6496d74b80e34a41c08500c103 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 13:43:49 +0400 Subject: [PATCH 38/54] don't use fancy xml in jetty configs (todo: actually DO use it) this is from a bug-hunt (which was in a entirely different place) --- priv/solr/etc/jetty-http.xml | 5 ++--- priv/solr/etc/jetty.xml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/priv/solr/etc/jetty-http.xml b/priv/solr/etc/jetty-http.xml index 18100d55..2bac8e98 100644 --- a/priv/solr/etc/jetty-http.xml +++ b/priv/solr/etc/jetty-http.xml @@ -6,8 +6,7 @@ - + @@ -15,7 +14,7 @@ + > diff --git a/priv/solr/etc/jetty.xml b/priv/solr/etc/jetty.xml index dae34adf..c2fd61bc 100644 --- a/priv/solr/etc/jetty.xml +++ b/priv/solr/etc/jetty.xml @@ -10,8 +10,7 @@ - + @@ -116,7 +115,7 @@ - + /solr/* From 5936eb3a76db6b9e39910206ad032b7c3068179c Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Wed, 4 Jul 2018 16:43:28 +0400 Subject: [PATCH 39/54] add (java) package-info --- java_src/build.xml | 58 ++++++++++++++----- .../basho/yokozuna/handler/package-info.java | 2 + .../basho/yokozuna/monitor/package-info.java | 1 + 3 files changed, 46 insertions(+), 15 deletions(-) create mode 100644 java_src/com/basho/yokozuna/handler/package-info.java create mode 100644 java_src/com/basho/yokozuna/monitor/package-info.java diff --git a/java_src/build.xml b/java_src/build.xml index 708659cc..d6a77bb4 100644 --- a/java_src/build.xml +++ b/java_src/build.xml @@ -1,22 +1,47 @@ - + + + + + + + + + + out + ../yz-build - - + + + + + + + + + + + + - - + + - - + + @@ -27,13 +52,16 @@ - - - + + + - + diff --git a/java_src/com/basho/yokozuna/handler/package-info.java b/java_src/com/basho/yokozuna/handler/package-info.java new file mode 100644 index 00000000..4e2208b5 --- /dev/null +++ b/java_src/com/basho/yokozuna/handler/package-info.java @@ -0,0 +1,2 @@ +package com.basho.yokozuna.handler; + diff --git a/java_src/com/basho/yokozuna/monitor/package-info.java b/java_src/com/basho/yokozuna/monitor/package-info.java new file mode 100644 index 00000000..6fde928f --- /dev/null +++ b/java_src/com/basho/yokozuna/monitor/package-info.java @@ -0,0 +1 @@ +package com.basho.yokozuna.monitor; From 110c5178acd5d37ea2f7475b19d54302de849691 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 6 Jul 2018 19:58:03 +0400 Subject: [PATCH 40/54] tools: remove bashisms --- tools/build-jar.sh | 4 ++-- tools/common.sh | 16 ++++++++-------- tools/copy-jars.sh | 8 ++++---- tools/grab-solr.sh | 17 ++++++++--------- 4 files changed, 22 insertions(+), 23 deletions(-) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index ee9738a7..aa9a7674 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -3,8 +3,8 @@ # Build JAR file containing customer Solr request handlers. set -eu -[[ $(basename $PWD) == "tools" ]] || cd tools -source common.sh +[ $(basename $PWD) == "tools" ] || cd tools +. common.sh if [ ! -x "`which javac`" ] || [ ! -x "`which jar`" ]; then diff --git a/tools/common.sh b/tools/common.sh index 9d4a5b11..c2f0a08d 100644 --- a/tools/common.sh +++ b/tools/common.sh @@ -1,17 +1,17 @@ # -*- Bash -*- -declare SOLR_VSN=7.3.1 +readonly SOLR_VSN=7.3.1 -declare YZ_JAR_VSN=3.2 -declare YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar -declare YZ_JAR_SHA=$YZ_JAR_NAME.sha +readonly YZ_JAR_VSN=3.2 +readonly YZ_JAR_NAME=yokozuna-$YZ_JAR_VSN.jar +readonly YZ_JAR_SHA=$YZ_JAR_NAME.sha -declare MON_JAR_VSN=1.2 -declare MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar -declare MON_JAR_SHA=$MON_JAR_NAME.sha +readonly MON_JAR_VSN=1.2 +readonly MON_JAR_NAME=yz_monitor-$MON_JAR_VSN.jar +readonly MON_JAR_SHA=$MON_JAR_NAME.sha -function mk_sha() +mk_sha() { file=$1 sha_file=$2 diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh index e7941d61..34999327 100755 --- a/tools/copy-jars.sh +++ b/tools/copy-jars.sh @@ -1,14 +1,14 @@ #!/usr/bin/env sh set -eu -[[ $(basename $PWD) == "tools" ]] || cd tools -source common.sh +[ $(basename $PWD) == "tools" ] || cd tools +. common.sh JAVA_LIB=../priv/java_lib YZ_ARTIFACTS_URL="$(realpath ../yz-build)" -if [ ! -f $JAVA_LIB/$YZ_JAR_NAME ] || (( ${FORCE_REBUILD:-0} )) +if [ ! -f $JAVA_LIB/$YZ_JAR_NAME ] || [ ${FORCE_REBUILD:-0} -gt 0 ] then mkdir -p $JAVA_LIB echo "Downloading $YZ_JAR_NAME" @@ -19,7 +19,7 @@ fi EXT_LIB=../priv/solr/lib/ext -if [ ! -f $EXT_LIB/$MON_JAR_NAME ] || (( ${FORCE_REBUILD:-0} )) +if [ ! -f $EXT_LIB/$MON_JAR_NAME ] || [ ${FORCE_REBUILD:-0} -gt 0 ] then echo "Downloading $MON_JAR_NAME" #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 98797422..9503f3d3 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env sh # # Script to grab Solr and embed in priv dir. This script assumes it is # being called from root dir or tools dir. @@ -10,9 +10,8 @@ set -eu -[[ $(basename $PWD) == "tools" ]] || cd tools - -source common.sh +[ $(basename $PWD) == "tools" ] || cd tools +. common.sh PRIV_DIR=../priv @@ -41,19 +40,19 @@ ARTIFACT_URL_PREFIX=https://archive.apache.org/dist/lucene/solr/7.3.1/ check_for_solr() { # $SOLR_DIR is preloaded with xml files, so check for the generated jar - [[ -e $SOLR_DIR/start.jar ]] + [ -e $SOLR_DIR/start.jar ] } get_solr() { - if [[ -v SOLR_PKG_DIR ]] + if [ -n "${SOLR_PKG_DIR:-}" ] && [ -d ${SOLR_PKG_DIR} ] then # This is now obsolete thanks to implicit caching above # but will leave in for now as to not break anyone. echo "Using local copy of Solr $SOLR_PKG_DIR/$FILENAME" cp $SOLR_PKG_DIR/$FILENAME . else - if [[ -e $TMP_FILE ]]; then + if [ -e $TMP_FILE ]; then echo "Using cached copy of Solr at $TMP_FILE" ln -s $TMP_FILE $FILENAME else @@ -70,12 +69,12 @@ get_solr() echo "OK, tar = ${FILENAME}" } -if check_for_solr && [[ ! -v FORCE_REBUILD ]]; then +if check_for_solr && [ ${FORCE_REBUILD:-0} -gt 0 ]; then echo "Solr is there, $SOLR_DIR" else mkdir -p $BUILD_DIR && cd $BUILD_DIR - if [[ ! -e $SRC_DIR ]] + if [ ! -e $SRC_DIR ] then get_solr fi From 4bc15b4f857a9c27657241ebdd522b0f4cef0722 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 6 Jul 2018 19:59:59 +0400 Subject: [PATCH 41/54] EntropyData: don't skip one-after ceiling doc --- .../basho/yokozuna/handler/EntropyData.java | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/java_src/com/basho/yokozuna/handler/EntropyData.java b/java_src/com/basho/yokozuna/handler/EntropyData.java index 1660d173..6750f465 100644 --- a/java_src/com/basho/yokozuna/handler/EntropyData.java +++ b/java_src/com/basho/yokozuna/handler/EntropyData.java @@ -136,22 +136,20 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons int count = 0; // TODO just do docs.size()? - BytesRef current = null; + BytesRef lastSeen = null; { final Bits liveDocs = rdr.getLiveDocs(); - while (te.next() != null && count < n) { - if (isLive(liveDocs, te)) { - final BytesRef ref = te.term(); - current = BytesRef.deepCopyOf(ref); // FIXME why - - Optional x = getDocIfPn(partition, current); + for (BytesRef ref = te.term(); ref != null; ref = te.next()) { + if (count < n && isLive(liveDocs, te)) { + lastSeen = BytesRef.deepCopyOf(ref); + Optional x = getDocIfPn(partition, lastSeen); if (x.isPresent()) { resultDocs.add(x.get()); count++; } - } // isLive(te) + } } } //liveDocs @@ -160,9 +158,9 @@ public void handleRequestBody(final SolrQueryRequest req, final SolrQueryRespons } else { response.add("more", true); - assert current != null; + assert lastSeen != null; - final String newCont = Base64.encodeBase64URLSafeString(current.bytes); + final String newCont = Base64.encodeBase64URLSafeString(lastSeen.bytes); // The continue context for next req to start where // this one finished. response.add("continuation", newCont); @@ -225,9 +223,9 @@ private static boolean isLive(final Bits liveDocs, final TermsEnum te) { */ private Optional getDocIfPn(String partition, BytesRef tmp) { final String text = tmp.utf8ToString(); - if (log.isDebugEnabled()) { - log.debug("text: " + text); - } + if (log.isTraceEnabled()) + log.trace("getDoc if p={}", partition); + final String[] vals = text.split(" "); final String docPartition = vals[1]; @@ -238,8 +236,10 @@ private Optional getDocIfPn(String partition, BytesRef tmp) { entropy data field (term). */ if (partition.equals(docPartition)) { - final String vsn = vals[0]; + if (log.isDebugEnabled()) + log.debug(" getDoc 「{}」", text); + final String vsn = vals[0]; final String[] decoded = decodeForVersion(vsn, vals[2], vals[3], From 77fc2a95570a85e76bd366ffd6665fad288bd82b Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sat, 7 Jul 2018 01:16:35 +0400 Subject: [PATCH 42/54] build-jar.sh: use provided jars if possible --- tools/build-jar.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index aa9a7674..39eaf7a0 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -7,6 +7,14 @@ set -eu . common.sh +if ! [ ${FORCE_REBUILD:-0} -gt 0 ]; then + if [ -f $YZ_JAR_NAME ] && [ -f $MON_JAR_NAME ]; then + echo "Using pre-packages yokozuna jar files" + exit 0 + fi +fi + + if [ ! -x "`which javac`" ] || [ ! -x "`which jar`" ]; then echo "Couldn't find javac and/or jar, which is needed to compile Yokozuna." exit 1 From d8b48d0da110166b59cc988e5774123609d30d8e Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sat, 7 Jul 2018 01:34:24 +0400 Subject: [PATCH 43/54] tooling minor changes copy-jars --- tools/build-jar.sh | 8 +------- tools/copy-jars.sh | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index 39eaf7a0..8fb2f5ac 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -20,18 +20,12 @@ if [ ! -x "`which javac`" ] || [ ! -x "`which jar`" ]; then exit 1 fi -if ! javac -version 2>&1 | egrep $'(?:1\.[789]|10)\.' +if ! javac -version 2>&1 | egrep $'(?:1\\.[789]|10)\\.' then echo "JDK 1.8+ must be used to compile these jars" exit 1 fi -if [ $(basename $PWD) != "tools" ] -then - echo "This script must be run from tools directory" - exit 1 -fi - echo "Building ${YZ_JAR_NAME} ${MON_JAR_NAME}..." diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh index 34999327..d9eb1be1 100755 --- a/tools/copy-jars.sh +++ b/tools/copy-jars.sh @@ -6,7 +6,7 @@ set -eu JAVA_LIB=../priv/java_lib -YZ_ARTIFACTS_URL="$(realpath ../yz-build)" +YZ_ARTIFACTS_URL="." if [ ! -f $JAVA_LIB/$YZ_JAR_NAME ] || [ ${FORCE_REBUILD:-0} -gt 0 ] then From f82c552696bf91c860491cc212d4b9ec504c2443 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Mon, 9 Jul 2018 22:34:18 +0400 Subject: [PATCH 44/54] preliminary EntropyClient --- .../basho/yokozuna/query/EntropyClient.java | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 java_src/com/basho/yokozuna/query/EntropyClient.java diff --git a/java_src/com/basho/yokozuna/query/EntropyClient.java b/java_src/com/basho/yokozuna/query/EntropyClient.java new file mode 100644 index 00000000..78c93956 --- /dev/null +++ b/java_src/com/basho/yokozuna/query/EntropyClient.java @@ -0,0 +1,39 @@ +/** + * Lucene index walker client. + * + */ + + + + +package com.basho.yokozuna.query; + +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Path; + + +import org.apache.lucene.index.DirectoryReader; +import org.apache.lucene.index.IndexReader; +import org.apache.lucene.index.IndexReaderContext; +import org.apache.lucene.index.LeafReaderContext; +import org.apache.lucene.store.Directory; +import org.apache.lucene.store.MMapDirectory; + +public class EntropyClient { + public static void main(String... args) throws IOException { + + String dirS = args[0]; + Path pa = FileSystems.getDefault().getPath(dirS); + Directory dir = new MMapDirectory(pa); + + try (DirectoryReader reader = DirectoryReader.open(dir)) { + reader.leaves().stream().forEachOrdered((LeafReaderContext x) -> { + System.out.printf("\u001b[4m=== %s\u001b[m\nbase=%d\n", x, x.docBase); + }); + } + + System.err.println("Done."); + + } +} From c3ad4774f4bda100c2253e3df156eece2fd88dc0 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 10 Jul 2018 17:48:34 +0400 Subject: [PATCH 45/54] compile java sources with debug on --- java_src/build.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/java_src/build.xml b/java_src/build.xml index d6a77bb4..1531814d 100644 --- a/java_src/build.xml +++ b/java_src/build.xml @@ -40,6 +40,7 @@ From 56f062f76398852afd43a312e4f0550406be00c5 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sat, 7 Jul 2018 01:03:56 +0400 Subject: [PATCH 46/54] precompiled jars [yokozuna-3.2 yz_monitor-1.2] --- tools/yokozuna-3.1S.jar | Bin 4813 -> 0 bytes tools/yokozuna-3.1S.jar.sha512 | 1 - tools/yokozuna-3.2.jar | Bin 0 -> 7054 bytes tools/yokozuna-3.2.jar.sha512 | 1 + tools/yz_monitor-1.2.jar | Bin 0 -> 2095 bytes tools/yz_monitor-1.2.jar.sha512 | 1 + tools/yz_monitor-1S.jar | Bin 6940 -> 0 bytes tools/yz_monitor-1S.jar.sha512 | 1 - 8 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 tools/yokozuna-3.1S.jar delete mode 100644 tools/yokozuna-3.1S.jar.sha512 create mode 100644 tools/yokozuna-3.2.jar create mode 100644 tools/yokozuna-3.2.jar.sha512 create mode 100644 tools/yz_monitor-1.2.jar create mode 100644 tools/yz_monitor-1.2.jar.sha512 delete mode 100644 tools/yz_monitor-1S.jar delete mode 100644 tools/yz_monitor-1S.jar.sha512 diff --git a/tools/yokozuna-3.1S.jar b/tools/yokozuna-3.1S.jar deleted file mode 100644 index cc018312d811002003a2fbf188082ed9bffaf88e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4813 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 Y%P+vhfcp41HM*lC>KFh3X8!i}Z;H+l@Bjb+ diff --git a/tools/yokozuna-3.1S.jar.sha512 b/tools/yokozuna-3.1S.jar.sha512 deleted file mode 100644 index 24ddaa77..00000000 --- a/tools/yokozuna-3.1S.jar.sha512 +++ /dev/null @@ -1 +0,0 @@ -a93bdcefc422cca6d700917c230185fc82c7cddaf0764daed59c110e80b493cc yokozuna-3.1S.jar diff --git a/tools/yokozuna-3.2.jar b/tools/yokozuna-3.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..8cbba32829c451d9df613c7606b0560dca6aad15 GIT binary patch literal 7054 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 BBYyw@ literal 0 HcmV?d00001 diff --git a/tools/yokozuna-3.2.jar.sha512 b/tools/yokozuna-3.2.jar.sha512 new file mode 100644 index 00000000..059e647d --- /dev/null +++ b/tools/yokozuna-3.2.jar.sha512 @@ -0,0 +1 @@ +f2dafa8833951eabc5fa534e2dfeb421e205b83b7fb828a2fb012725538454f6 yokozuna-3.2.jar diff --git a/tools/yz_monitor-1.2.jar b/tools/yz_monitor-1.2.jar new file mode 100644 index 0000000000000000000000000000000000000000..b713a6400b4006a376b3af9090143dd00ab57619 GIT binary patch literal 2095 zcmWIWW@h1HVBlb2IMw^ghXDz2GO#fCx`sIFdiuHP|2xIN5CB!m!Eh3&v{%pQN-R)$ zCJ>7NFkiiw>2TzO6I13f(c=(+2 z2xaJERORLU(o?x}PIr*7cTjN2TrEc_oi99(czt_ICi9#XG5OOiG`ToPbk65)u20=U z-VJIQpNc*fF~Xh0z)-X0C5p>gfX+$I&(()H7*hq%$6ysniNzWDc+?4_sH@D+&aW!X zOGMIu9%$0oHRR^!WtQX@!8LM#L%T4*l@g1%jARwRl#PIXlJLdl)09?#lx{qmH+D+Y>>7hBa$`_?9tcPi0{^Xt+7 zlUTN!_$)Q-y)Bg{@yK-lsRe5N zJpXM~(!$7i(St(qYbUD9nb@|?D>|b6`tzQJdsHSc^?4_*eJ9)_Z_xAPQ`yn=(W`A@ zKCk7izgvI#%Z{sk(Vum_&vaUqbABp#H}mhL{g1+Wt3y}Iu&xW&eKy_GzS%BtrDi3Y zU&4h0hBDU+jvt6UV>BaIW3v0i73NB}(%G7SREbA8rCp+`UVSESus&&np3bk0H2+vV5aT>-XC)7MX4*2WRHb0No>4Bt~mA3PrE zoHm+su%q#K#UX`*SIrRCHY6kI^T@^g@QBo=_@Zay63n( z^+U6g?D5j0Dw5nL%%+~^ZWCPlBtAc#iNaZ$pA>d%`$t1j(v`FrQjo->pFDAlGs?crfk;QeLUS^4tUKhMaOCsloTczSpon0O>4 zXEdq^GjjtAPevvYX50lo&<{W$!0^@)M8nH=NHqY{ioGHLX#jyGjoLsGt`(_TK(-uP z*$vhXwtN?m2`R~8c49Bf5jyTbb-+q?-1oC3t$}s3Q0(~!2Jhv9%iZx@MdKLY3Be!B_;-j J??3|>7y#hx`Ah%+ literal 0 HcmV?d00001 diff --git a/tools/yz_monitor-1.2.jar.sha512 b/tools/yz_monitor-1.2.jar.sha512 new file mode 100644 index 00000000..7ff703c4 --- /dev/null +++ b/tools/yz_monitor-1.2.jar.sha512 @@ -0,0 +1 @@ +61a311e56da207e47f702ebb1be315fda9792ce22e10aeae9714d033962d11b1 yz_monitor-1.2.jar diff --git a/tools/yz_monitor-1S.jar b/tools/yz_monitor-1S.jar deleted file mode 100644 index eca1cd644da37029b3b8023dd091cb05a82b737c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6940 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 diff --git a/tools/yz_monitor-1S.jar.sha512 b/tools/yz_monitor-1S.jar.sha512 deleted file mode 100644 index 61090e8a..00000000 --- a/tools/yz_monitor-1S.jar.sha512 +++ /dev/null @@ -1 +0,0 @@ -9cb6413bd2b151b2ec80d2eeaf435fd9aab605c58dfaaef07e302ef9dde1d179 yz_monitor-1S.jar From 119e30fbf4aff3f695f1ac622be34c3beec27b10 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 10 Jul 2018 22:04:24 +0400 Subject: [PATCH 47/54] tooling --- tools/copy-jars.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh index d9eb1be1..e5c29350 100755 --- a/tools/copy-jars.sh +++ b/tools/copy-jars.sh @@ -12,8 +12,6 @@ if [ ! -f $JAVA_LIB/$YZ_JAR_NAME ] || [ ${FORCE_REBUILD:-0} -gt 0 ] then mkdir -p $JAVA_LIB echo "Downloading $YZ_JAR_NAME" - # download "${ARTIFACT_URL_PREFIX}/yokozuna/$YZ_JAR_NAME" - download ${YZ_ARTIFACTS_URL}/${YZ_JAR_NAME} cp -v $YZ_JAR_NAME $JAVA_LIB fi @@ -22,8 +20,6 @@ EXT_LIB=../priv/solr/lib/ext if [ ! -f $EXT_LIB/$MON_JAR_NAME ] || [ ${FORCE_REBUILD:-0} -gt 0 ] then echo "Downloading $MON_JAR_NAME" - #download "${ARTIFACT_URL_PREFIX}/yokozuna/$MON_JAR_NAME" - download ${YZ_ARTIFACTS_URL}/${MON_JAR_NAME} cp -v $MON_JAR_NAME $EXT_LIB fi From f686b9d9084cf6ff4f2c7e6b7679aef4f9b46ee9 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 20 Jul 2018 15:07:45 +0400 Subject: [PATCH 48/54] accept application/json POST for search too --- src/yz_wm_search.erl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/yz_wm_search.erl b/src/yz_wm_search.erl index 8a9dff61..092bee12 100644 --- a/src/yz_wm_search.erl +++ b/src/yz_wm_search.erl @@ -110,7 +110,8 @@ forbidden(ReqDataIn, Context) -> process_post(RD, Ctx) -> CType = wrq:get_req_header(?HEAD_CTYPE, RD), case CType of - "application/x-www-form-urlencoded" -> + CT when CT == "application/x-www-form-urlencoded"; + CT == "application/json" -> post_search(RD, Ctx, CType); _ -> {{halt, 415}, RD, Ctx} From 6c789d7165421adee732f6bf5c78df8d47dc44c3 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Fri, 20 Jul 2018 17:11:02 +0400 Subject: [PATCH 49/54] =?UTF-8?q?=E2=80=9Cbump=E2=80=9D=20version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/yokozuna.app.src | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/yokozuna.app.src b/src/yokozuna.app.src index 1a5b20ff..c71b6006 100644 --- a/src/yokozuna.app.src +++ b/src/yokozuna.app.src @@ -2,7 +2,7 @@ {application, yokozuna, [ {description, "Integrating Apache Solr into Riak"}, - {vsn, git}, + {vsn, {cmd, "git describe --always --tags | sed 's/-/-sentenai-/3'"}}, {registered, []}, {applications, [ kernel, From cf698d140cbdbaef5c7b9facd064738261710952 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 7 Aug 2018 02:06:39 +0400 Subject: [PATCH 50/54] =?UTF-8?q?tools=20scripts:=20=E2=80=98.=E2=80=99=20?= =?UTF-8?q?files=20correctly?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kudos to @mitchellwrosen --- tools/build-jar.sh | 2 +- tools/copy-jars.sh | 2 +- tools/grab-solr.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/build-jar.sh b/tools/build-jar.sh index 8fb2f5ac..1f181480 100755 --- a/tools/build-jar.sh +++ b/tools/build-jar.sh @@ -4,7 +4,7 @@ set -eu [ $(basename $PWD) == "tools" ] || cd tools -. common.sh +. ./common.sh if ! [ ${FORCE_REBUILD:-0} -gt 0 ]; then diff --git a/tools/copy-jars.sh b/tools/copy-jars.sh index e5c29350..85bdec5a 100755 --- a/tools/copy-jars.sh +++ b/tools/copy-jars.sh @@ -2,7 +2,7 @@ set -eu [ $(basename $PWD) == "tools" ] || cd tools -. common.sh +. ./common.sh JAVA_LIB=../priv/java_lib diff --git a/tools/grab-solr.sh b/tools/grab-solr.sh index 9503f3d3..767593e2 100755 --- a/tools/grab-solr.sh +++ b/tools/grab-solr.sh @@ -11,7 +11,7 @@ set -eu [ $(basename $PWD) == "tools" ] || cd tools -. common.sh +. ./common.sh PRIV_DIR=../priv From 9a934e582d59732ff687613a2e4b7a55b7611c4c Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Tue, 8 Jan 2019 15:14:23 +0400 Subject: [PATCH 51/54] pass indent=false to solr --- src/yokozuna.erl | 3 ++- src/yz_pb_search.erl | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/yokozuna.erl b/src/yokozuna.erl index 52b73a15..28b8513f 100644 --- a/src/yokozuna.erl +++ b/src/yokozuna.erl @@ -137,10 +137,11 @@ search_fold(Index, Query, Filter, F, Acc) -> Params = [{q, Query}, {fq, Filter}, {start, Start}, - {rows, 100}, + {rows, 100}, % @todo 100 is small. make configurable somehow {fl, <>}, {sort, <>}, {omitHeader, <<"true">>}, + {indent, <<"false">>}, {wt, <<"json">>}], {_, Body} = yz_solr:dist_search(Index, Params), case extract_docs(Body) of diff --git a/src/yz_pb_search.erl b/src/yz_pb_search.erl index ce81cb9d..bb23d04e 100644 --- a/src/yz_pb_search.erl +++ b/src/yz_pb_search.erl @@ -151,6 +151,7 @@ extract_params(#rpbsearchqueryreq{q=Query, sort=Sort, Params1 = [P || P={_,V} <- MaybeParams, V /= undefined andalso V /= []], Params2 = [{q,Query}, {wt,<<"json">>}, + {indent,false}, {omitHeader,true} |Params1], {ok, Params2}. From f57ff775071795279949be1caf2a575ba9cfbe11 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sun, 3 Mar 2019 09:48:12 +0400 Subject: [PATCH 52/54] [sec] yz xml extractor: prevent XXE attack MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit XML External Entity attack 1. if HTTP API is exposed: - read any file on the system — via /search/extract, the error message leaks file content; - send HTTP «GET /» request to any host — by PUT/POSTing text/xml document, or via /search/extract. This is also likely riak DoS if the host is attacker-controlled. 2. if PB API is exposed - send HTTP «GET /» request to any host — by PUT/POST, see above. Example request: ]> &xxe1; --- src/yz_xml_extractor.erl | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/yz_xml_extractor.erl b/src/yz_xml_extractor.erl index 6f3f5a5b..fe17af60 100644 --- a/src/yz_xml_extractor.erl +++ b/src/yz_xml_extractor.erl @@ -56,7 +56,12 @@ extract(Value, Opts) -> extract_fields(Value, #state{field_separator=Sep}). extract_fields(Data, State) -> - Options = [{event_fun, fun sax_cb/3}, {event_state, State}], + Options = [ + {file_type, normal}, + skip_external_dtd, + {event_fun, fun sax_cb/3}, + {event_state, State} + ], case xmerl_sax_parser:stream(Data, Options) of {ok, State2, _Rest} -> State2#state.fields; @@ -88,6 +93,9 @@ sax_cb({characters, Value}, _Location, S) -> Field = {Name, unicode:characters_to_binary(Value)}, S#state{fields = [Field|S#state.fields]}; +sax_cb({externalEntityDecl,_,_,_}, _, _State) -> + throw(external_entity_disarmed); + sax_cb(_Event, _Location, State) -> State. From 8fc772737b53da4f0da7fee4249c3bd51c95f134 Mon Sep 17 00:00:00 2001 From: Antonio Nikishaev Date: Sun, 3 Mar 2019 10:04:01 +0400 Subject: [PATCH 53/54] =?UTF-8?q?[sec]=20http=20search:=20get=20rid=20of?= =?UTF-8?q?=20=E2=80=98yz-fprof=E2=80=99=20header=20handling?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It doesn't check user-provided path in any way. This allows overriding any file on the system with riak permissions. --- src/yz_wm_search.erl | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/yz_wm_search.erl b/src/yz_wm_search.erl index 092bee12..1048bedb 100644 --- a/src/yz_wm_search.erl +++ b/src/yz_wm_search.erl @@ -23,8 +23,6 @@ -include("yokozuna.hrl"). -include_lib("webmachine/include/webmachine.hrl"). --define(YZ_HEAD_FPROF, "yz-fprof"). - -record(ctx, {security %% security context }). @@ -122,8 +120,6 @@ search(Req, S) -> search(Req, S, Params). search(Req, S, Params) -> - {FProf, FProfFile} = check_for_fprof(Req), - ?IF(FProf, fprof:trace(start, FProfFile)), T1 = os:timestamp(), Index = list_to_binary(wrq:path_info(index, Req)), try @@ -156,8 +152,6 @@ search(Req, S, Params) -> ErrReq2 = wrq:set_resp_header("Content-Type", "text/plain", ErrReq), {{halt, Code}, ErrReq2, S} - after - ?IF(FProf, fprof_analyse(FProfFile)) end. %% @doc Solr returns as chunked but not going to return as chunked from @@ -165,17 +159,6 @@ search(Req, S, Params) -> scrub_headers(RespHeaders) when is_list(RespHeaders) -> lists:keydelete("Transfer-Encoding", 1, RespHeaders). -check_for_fprof(Req) -> - case wrq:get_req_header(?YZ_HEAD_FPROF, Req) of - undefined -> {false, none}; - File -> {true, File} - end. - -fprof_analyse(FileName) -> - fprof:trace(stop), - fprof:profile(file, FileName), - fprof:analyse([{dest, FileName ++ ".analysis"}, {cols, 120}]). - -spec resource_exists(term(), term()) -> {boolean(), term(), term()}. resource_exists(RD, Context) -> IndexName = list_to_binary(wrq:path_info(index, RD)), From 7988a2fe2da54b49e4364a74f979e350efdec33e Mon Sep 17 00:00:00 2001 From: Steven Joseph Date: Thu, 23 Jan 2020 16:51:36 +1100 Subject: [PATCH 54/54] fix: update test case for cuttlefish --- test/yokozuna_schema_tests.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/yokozuna_schema_tests.erl b/test/yokozuna_schema_tests.erl index c7fdab77..b4905683 100644 --- a/test/yokozuna_schema_tests.erl +++ b/test/yokozuna_schema_tests.erl @@ -42,7 +42,7 @@ basic_schema_test() -> cuttlefish_unit:assert_config(Config, "yokozuna.solr_port", 12345), cuttlefish_unit:assert_config(Config, "yokozuna.solr_jmx_port", 54321), cuttlefish_unit:assert_config(Config, "yokozuna.solr_jvm_opts", - "-d64 -Xms1g -Xmx1g -XX:+UseCompressedOops"), + "-d64 -Xms1g -Xmx1g"), cuttlefish_unit:assert_config(Config, "yokozuna.anti_entropy_data_dir", "./data/yolo/yz_anti_entropy"), cuttlefish_unit:assert_config(Config, "yokozuna.root_dir", "./data/yolo/yz"),