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)

Reply via email to