You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by ni...@apache.org on 2009/02/26 07:34:09 UTC
svn commit: r748037 - in /hadoop/core/nightly: hudsonPatchQueueAdmin.sh
processHadoopPatchEmail.sh
Author: nigel
Date: Thu Feb 26 06:34:09 2009
New Revision: 748037
URL: http://svn.apache.org/viewvc?rev=748037&view=rev
Log:
HADOOP-5232. Enable patch testing to occur on more than one host. Contributed by Giri Kesavan.
Modified:
hadoop/core/nightly/hudsonPatchQueueAdmin.sh
hadoop/core/nightly/processHadoopPatchEmail.sh
Modified: hadoop/core/nightly/hudsonPatchQueueAdmin.sh
URL: http://svn.apache.org/viewvc/hadoop/core/nightly/hudsonPatchQueueAdmin.sh?rev=748037&r1=748036&r2=748037&view=diff
==============================================================================
--- hadoop/core/nightly/hudsonPatchQueueAdmin.sh (original)
+++ hadoop/core/nightly/hudsonPatchQueueAdmin.sh Thu Feb 26 06:34:09 2009
@@ -1,67 +1,136 @@
#!/bin/bash
-#set -x
+usage()
+{
+cat << EOF
+usage: $0 options
+
+This script initates patch build's on Hudson slaves.
+
+OPTIONS:
+ -h Show this message
+ -p Project Name like HADOOP, PIG or ZOOPKEEPER.
+ -s Build Server Names
+ -c Called by values like USER OR Build Server name
+ -t Path to curl binary
+ -u Build url token
+ -q Path to the Queue Directory
+ ### The directory to accumulate the patch queue. Must be
+ ### writable by this process.
+ -v Verbose
+EOF
+}
+
+PROJECT=
+QUEUE_DIR=
+BUILD_SERVERS=
+CALLED_BY=
+CURL=
+BUILD_URL_TOKEN=
+VERBOSE=
+
+while getopts "hp:s:c:t:u:q:v" OPTION
+do
+ case $OPTION in
+ h)
+ usage
+ exit 1
+ ;;
+ p)
+ PROJECT=$OPTARG
+ ;;
+ s)
+ BUILD_SERVERS=$OPTARG
+ ;;
+ c)
+ CALLED_BY=$OPTARG
+ ;;
+ t)
+ CURL=$OPTARG
+ ;;
+ u)
+ BUILD_URL_TOKEN=$OPTARG
+ ;;
+ q)
+ QUEUE_DIR=$OPTARG
+ ;;
+ v)
+ VERBOSE=1
+ ;;
+ ?)
+ usage
+ exit
+ ;;
+ esac
+done
+
+if [[ -z $PROJECT ]] || [[ -z $BUILD_SERVERS ]] || [[ -z $CALLED_BY ]] || [[ -z $CURL ]] || [[ -z $BUILD_URL_TOKEN ]] || [[ -z $QUEUE_DIR ]]
+then
+ usage
+ exit 1
+fi
-### The Jira project name. Examples: HADOOP or RIVER or LUCENE
-PROJECT=$1
-### The directory to accumulate the patch queue. Must be
-### writable by this process.
-QUEUE_DIR=$2
-### The complete URL to trigger a build.
-TRIGGER_BUILD_URL=$3
+if [[ $VERBOSE == 1 ]]; then
+set -x
+fi
-WGET=/usr/sfw/bin/wget
+PATCH_QUEUE=${QUEUE_DIR}/patch_queue.txt
+
+### To check if this patch_admin job called by test-patch.sh or hudson
+### if called by test-patch.sh then freee up the slae machine.
+if [[ $CALLEDBY != "" && $CALLEDBY != "USER" ]]; then
+ rm -rf ${QUEUE_DIR}/${CALLEDBY}
+fi
QUEUE_HTML_FILE=`pwd`/${PROJECT}_PatchQueue.html
-CURRENT_DIR=${QUEUE_DIR}/current
-CURRENT_PATCH=`cat $CURRENT_DIR/defectNum`
-### If there is no current patch being tested,
-### look for the next one in the queue.
-if [[ $CURRENT_PATCH == "" ]] ; then
- cd $QUEUE_DIR
- CURRENT_PATCH=`/bin/ls -1dtr ${PROJECT}* | head -1`
- ### If there is another patch in the queue, start testing it.
- if [[ $CURRENT_PATCH != "" ]] ; then
- rm -rf $CURRENT_DIR
- mv $CURRENT_PATCH $CURRENT_DIR
- ### Start build.
- echo "$CURRENT_PATCH patch submitted for testing at `date`"
- $WGET -q -O $CURRENT_DIR/build $TRIGGER_BUILD_URL
- chmod -R g+w $CURRENT_DIR
+echo "<html>" > $QUEUE_HTML_FILE
+echo "<title>Patch Queue for $PROJECT</title>" >> $QUEUE_HTML_FILE
+echo "<h3 align='left'><img src="http://hadoop.apache.org/core/images/hadoop-logo.jpg" height="50"></img>Patch Queue for HADOOP</h3>" >> $QUEUE_HTML_FILE
+echo "<hr style='height:2px;border-width:0;color:red;background-color:blue'>" >> $QUEUE_HTML_FILE
+echo "<h4>Currently Running (or Waiting To Run)</h4>" >> $QUEUE_HTML_FILE
+echo "<table cellspacing=10><tr align=left><th>Issue</th><th>Submitted to</th><th>Date Submitted to Run</th></tr>" >> $QUEUE_HTML_FILE
+
+for SLAVE in $BUILD_SERVERS
+do
+ TRIGGER_BUILD_URL=${HUDSON_URL}'job/Hadoop-Patch-'${SLAVE}${BUILD_URL_TOKEN}
+ CURRENT_PATCH=${QUEUE_DIR}/${SLAVE}
+ defect=`head -n 1 $PATCH_QUEUE | awk '{print $1}'`
+if [[ ! -f $CURRENT_PATCH ]]; then
+ if [[ $defect ]]; then
+ echo $defect > ${CURRENT_PATCH}
+ sed -i '1d' $PATCH_QUEUE
+ echo "$defect patch submitted for testing at `date +"%b %a %H:%M"`"
+ echo "$CURL $TRIGGER_BUILD_URL&DEFECTNUM=$defect"
+ $CURL "$TRIGGER_BUILD_URL&DEFECTNUM=$defect"
+ echo "<tr><td><a href=\"http://issues.apache.org/jira/browse/${defect}\">$defect</a></td><td>${SLAVE}</td><td>`date +"%b %a %H:%M"` UTC</td></tr>" >> $QUEUE_HTML_FILE
else
CURRENT_PATCH="none"
CURRENT_PATCH_TIME="-"
+ echo "<tr><td>$CURRENT_PATCH</td><td>$CURRENT_PATCH_TIME</td></tr>" >> $QUEUE_HTML_FILE
fi
-fi
-if [[ -z $CURRENT_PATCH_TIME ]] ; then
- CURRENT_PATCH_TIME=`/bin/ls -dtl ${CURRENT_DIR}* | awk '{print $6" "$7" "$8" GMT"}'`
-fi
-
-cd $QUEUE_DIR
-QUEUE=`/bin/ls -1dtrl ${PROJECT}* | awk '{print "<tr><td><a href=\"http://issues.apache.org/jira/browse/"$9"\">"$9"</a></td><td>"$6" "$7" "$8" GMT</td></tr>"}'`
-if [[ $QUEUE == "" ]] ; then
- QUEUE="<tr><td>empty</td><td>-</td></tr>"
-fi
-
-echo "<html>" > $QUEUE_HTML_FILE
-echo "<title>Patch Queue for $PROJECT</title>" >> $QUEUE_HTML_FILE
-echo "<h1>Patch Queue for $PROJECT</h1>" >> $QUEUE_HTML_FILE
-echo "<hr>" >> $QUEUE_HTML_FILE
-echo "<h2>Currently Running (or Waiting To Run)</h2>" >> $QUEUE_HTML_FILE
-echo "<table cellspacing=10><tr align=left><th>Issue</th><th>Date Submitted to Run</th></tr>" >> $QUEUE_HTML_FILE
-if [[ $CURRENT_PATCH == "none" ]] ; then
- echo "<tr><td>$CURRENT_PATCH</td><td>$CURRENT_PATCH_TIME</td></tr>" >> $QUEUE_HTML_FILE
else
- echo "<tr><td><a href=\"http://issues.apache.org/jira/browse/${CURRENT_PATCH}\">$CURRENT_PATCH</a></td><td>$CURRENT_PATCH_TIME</td></tr>" >> $QUEUE_HTML_FILE
+ CURRENT_PATCH_TIME=`/bin/ls -dtl ${CURRENT_PATCH} | awk '{print $6" "$7" "$8" UTC"}'`
+ EXEC_PATCH=`cat ${CURRENT_PATCH}`
+ echo "<tr><td><a href=\"http://issues.apache.org/jira/browse/$EXEC_PATCH\">$EXEC_PATCH</a></td><td>${SLAVE}</td><td>$CURRENT_PATCH_TIME</td></tr>" >> $QUEUE_HTML_FILE
fi
+done
echo "</table>" >> $QUEUE_HTML_FILE
-echo "<hr>" >> $QUEUE_HTML_FILE
-echo "<h2>Waiting in the Queue</h2>" >> $QUEUE_HTML_FILE
+echo "<hr style='height:2px;border-width:0;color:red;background-color:blue'>" >> $QUEUE_HTML_FILE
+echo "<h4>Waiting in the Queue</h4>" >> $QUEUE_HTML_FILE
echo "<table cellspacing=10><tr align=left><th>Issue</th><th>Date Submitted</th></tr>" >> $QUEUE_HTML_FILE
-echo "$QUEUE" >> $QUEUE_HTML_FILE
+
+if [ -s $PATCH_QUEUE ]; then
+ while read PATCH_DTLS
+ do
+ TEMP_QUEUE_DTLS=`echo $PATCH_DTLS | awk '{print "<tr><td><a href=\"http://issues.apache.org/jira/browse/"$1"\">"$1"</a></td><td>"$2" "$3" "$4" "$5" UTC</td></tr>"}'`
+ echo $TEMP_QUEUE_DTLS >> $QUEUE_HTML_FILE
+ done < "$PATCH_QUEUE"
+else
+ echo "<tr><td>empty</td><td>-</td></tr>" >> $QUEUE_HTML_FILE
+fi
+
echo "</table>" >> $QUEUE_HTML_FILE
-echo "<hr>" >> $QUEUE_HTML_FILE
+echo "<hr style='height:2px;border-width:0;color:red;background-color:blue'>" >> $QUEUE_HTML_FILE
echo "This file last updated at: `date`" >>$QUEUE_HTML_FILE
echo "</html>" >> $QUEUE_HTML_FILE
-
Modified: hadoop/core/nightly/processHadoopPatchEmail.sh
URL: http://svn.apache.org/viewvc/hadoop/core/nightly/processHadoopPatchEmail.sh?rev=748037&r1=748036&r2=748037&view=diff
==============================================================================
--- hadoop/core/nightly/processHadoopPatchEmail.sh (original)
+++ hadoop/core/nightly/processHadoopPatchEmail.sh Thu Feb 26 06:34:09 2009
@@ -1,6 +1,6 @@
#!/bin/bash
-set -x
+#set -x
### The Jira project name. Examples: HADOOP or RIVER or LUCENE
PROJECT=$1
@@ -8,8 +8,9 @@
### writable by this process.
QUEUE_DIR=$2
-GREP=/usr/sfw/bin/ggrep
+GREP=/bin/grep
LOG=$QUEUE_DIR/log.txt
+PATCH_QUEUE=$QUEUE_DIR/patch_queue.txt
### Scan email
while read line
@@ -25,17 +26,20 @@
fi
done
-### If this email indicates a new patch, start a build
-if [[ -n $patch && ! -d $QUEUE_DIR/$defect ]] ; then
- echo "$defect is being processed at `date`" >> $LOG
- mkdir $QUEUE_DIR/$defect
-
- ### Write the defect number to a file so buildTest.sh
- ### knows which patch to test.
- echo $defect > $QUEUE_DIR/$defect/defectNum
-
- ### Since this script is run by the 'daemon' user by sendmail,
- ### make sure everything it creates is group writable
- chmod -R a+w $QUEUE_DIR/$defect
+if [[ -n $patch && -n $defect ]] ; then
+ while read line
+ do
+ #### To check if defect already in patch queue
+ if [[ `echo $line | grep -c $defect ` == 1 ]] ; then
+ duplicate=true
+ break;
+ fi
+ done < $PATCH_QUEUE
+ ### Append the defect # to the patch queue if defect # not in patch queue already
+ if [[ -z $duplicate ]]; then
+ echo "$defect is being processed at `date`"
+ echo $defect `date` >> $PATCH_QUEUE
+ chmod -R a+w $QUEUE_DIR
+ fi
fi
exit 0