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)