Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions solr/CHANGES.txt
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,8 @@ Other Changes

* SOLR-16190: Http2SolrClient should make sure to shutdown the executor (Kevin Risden)

* SOLR-16191: Validate that installed ps utility supports -p flag, so that we do not inadvertantly stop the wrong process. (Mike Drob, Michael Gibney)

Build
---------------------
* SOLR-16053: Upgrade scriptDepVersions (Kevin Risden)
Expand Down
19 changes: 12 additions & 7 deletions solr/bin/solr
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,11 @@ if [ "${THIS_OS:0:6}" == "CYGWIN" ]; then
echo -e "This script does not support cygwin due to severe limitations and lack of adherence\nto BASH standards, such as lack of lsof, curl, and ps options.\n\nPlease use the native solr.cmd script on Windows!"
exit 1
fi
# Alpine Linux BusyBox comes with a stripped down ps, make sure we have a fully featured one
if [ $$ -ne $(ps -o pid='' -p $$ || echo 0) ] ; then
echo -e "This script relies on a version of ps that supports the -p flag.\n\nPlease install a POSIX compliant version and try again."
exit 1
fi

# This helps with debugging when running bats tests but not the whole script is compliant yet
# set -u
Expand Down Expand Up @@ -682,7 +687,7 @@ function spinner() {
local pid=$1
local delay=0.5
local spinstr='|/-\'
while [ "$(ps aux | awk '{print $2}' | grep -w $pid)" ]; do
while ps -o pid='' -p $pid &> /dev/null ; do
local temp=${spinstr#?}
printf " [%c] " "$spinstr"
local spinstr=$temp${spinstr%"$temp"}
Expand All @@ -697,7 +702,7 @@ function solr_pid_by_port() {
THE_PORT="$1"
if [ -e "$SOLR_PID_DIR/solr-$THE_PORT.pid" ]; then
PID=`cat "$SOLR_PID_DIR/solr-$THE_PORT.pid"`
CHECK_PID=`ps -o pid='' $PID | tr -d ' '`
CHECK_PID=`ps -o pid='' -p $PID | tr -d ' '`
if [ -n "$CHECK_PID" ]; then
echo $PID
fi
Expand All @@ -707,7 +712,7 @@ function solr_pid_by_port() {
# extract the value of the -Djetty.port parameter from a running Solr process
function jetty_port() {
SOLR_PID="$1"
SOLR_PROC=`ps auxww | grep -w $SOLR_PID | grep start\.jar | grep jetty\.port`
SOLR_PROC=`ps -o command='' -p "$SOLR_PID" | grep start\.jar | grep jetty\.port`
IFS=' ' read -a proc_args <<< "$SOLR_PROC"
for arg in "${proc_args[@]}"
do
Expand Down Expand Up @@ -849,7 +854,7 @@ function stop_solr() {
# Check if a process is running with the specified PID.
# -o stat will output the STAT, where Z indicates a zombie
# stat='' removes the header (--no-headers isn't supported on all platforms)
STAT=`(ps -o stat='' $SOLR_PID || :) | tr -d ' '`
STAT=`(ps -o stat='' -p $SOLR_PID || :) | tr -d ' '`
if [[ "${STAT:-Z}" != "Z" ]]; then
slept=$((loops * 2))
if [ $slept -lt $SOLR_STOP_WAIT ]; then
Expand All @@ -869,7 +874,7 @@ function stop_solr() {
exit 0
fi

STAT=`(ps -o stat='' $SOLR_PID || :) | tr -d ' '`
STAT=`(ps -o stat='' -p $SOLR_PID || :) | tr -d ' '`
if [[ "${STAT:-Z}" != "Z" ]]; then
if [ -n "{$JSTACK:-}" ]; then
echo -e "Solr process $SOLR_PID is still running; jstacking it now."
Expand All @@ -885,7 +890,7 @@ function stop_solr() {
sleep 10
fi

STAT=`(ps -o stat='' $SOLR_PID || :) | tr -d ' '`
STAT=`(ps -o stat='' -p $SOLR_PID || :) | tr -d ' '`
if [ "${STAT:-}" == "Z" ]; then
# This can happen if, for example, you are running Solr inside a docker container with multiple processes
# rather than running it is as the only service. The --init flag on docker avoids that particular problem.
Expand Down Expand Up @@ -1860,7 +1865,7 @@ if [[ "$SCRIPT_CMD" == "stop" && -z "${SOLR_PORT:-}" ]]; then
if [ $numSolrs -eq 1 ]; then
# only do this if there is only 1 node running, otherwise they must provide the -p or -all
PID="$(cat "$(find "$SOLR_PID_DIR" -name "solr-*.pid" -type f)")"
CHECK_PID=`ps -o pid='' $PID | tr -d ' '`
CHECK_PID=`ps -o pid='' -p $PID | tr -d ' '`
if [ "$CHECK_PID" != "" ]; then
port=`jetty_port "$CHECK_PID"`
if [ "$port" != "" ]; then
Expand Down