Vinay Naik created PIO-200: ------------------------------ Summary: Improve redeploy script example Key: PIO-200 URL: https://issues.apache.org/jira/browse/PIO-200 Project: PredictionIO Issue Type: Improvement Components: Core Affects Versions: 0.13.0 Environment: - Version of PredictionIO - apache-predictionio-0.13.0 - Other components used - hadoop-2.8.2 - spark-2.1.2 - elasticsearch-5.6.4 - hbase-1.3.2 - openjdk-8-jdk - Ubuntu 18.04 LTS Reporter: Vinay Naik
All, I have discovered a potential improvement for redeploy-script (predictionio/examples/redeploy-script/redeploy.sh). Details are outlined below. *PIO information* - Version of PredictionIO - apache-predictionio-0.13.0 - Other components used ** hadoop-2.8.2 ** spark-2.1.2 ** elasticsearch-5.6.4 ** hbase-1.3.2 ** openjdk-8-jdk *Issue description* The redeploy script provided in examples is crucial for production deployments to fully leverage real-time ingestion of events. However, after extended usage I noticed that whilst _pio deploy_ within script successfully undeploys any existing engine instance and binds a new one to the same port; it fails to clear up resources allocated to previous deployment (read as PID continues to linger). Continued usage will lead to lack of memory forcing us to kill stale processes manually. *Code example* {code:java} # Deploy DEPLOY_LOG=`mktemp $LOG_DIR/tmp.XXXXXXXXXX` $($DEPLOY_COMMAND 1>$DEPLOY_LOG 2>&1) & # Check if the engine is up sleep 60 curl $HOSTNAME:$PORT > /dev/null RETURN_VAL=$? COUNTER=0 while [[ $RETURN_VAL -ne 0 && $COUNTER -lt 20 ]]; do sleep 30 curl $HOSTNAME:$PORT > /dev/null let RETURN_VAL=$? let COUNTER=COUNTER+1 done{code} *Expected behaviour* - Deploys new engine instance - Eliminates old process *Actual results* - Deploys new engine instance - Retains old process *Suggested resolution* This can be easily handled by; - Looking for PID of any existing engine instance - Complete current _pio deploy_ cycle - If PID for previous instance exist, kill process thus releasing resources. {code:java} # Deploy # Get current running instance PID PIDBYPORT_COMMAND="lsof -t -i:$PORT" DEPLOYEDPORT=$($PIDBYPORT_COMMAND) DEPLOY_LOG=`mktemp $LOG_DIR/tmp.XXXXXXXXXX` $($DEPLOY_COMMAND 1>$DEPLOY_LOG 2>&1) & # Check if the engine is up sleep 60 curl $HOSTNAME:$PORT > /dev/null RETURN_VAL=$? COUNTER=0 while [[ $RETURN_VAL -ne 0 && $COUNTER -lt 20 ]]; do sleep 30 curl $HOSTNAME:$PORT > /dev/null let RETURN_VAL=$? let COUNTER=COUNTER+1 done # Check if the previous engine instance is running KILLSD_COMMAND="kill $DEPLOYEDPORT" if [ -z "$DEPLOYEDPORT" ] then printf "\nNo stale PIDs found for port $PORT\n" else $($KILLSD_COMMAND) printf "\nStale PID found as $DEPLOYEDPORT. Resources released.\n" fi{code} I will create a pull request to that end. -- This message was sent by Atlassian JIRA (v7.6.3#76005)