diff options
author | Holger Levsen <holger@layer-acht.org> | 2015-03-27 20:21:58 +0100 |
---|---|---|
committer | Holger Levsen <holger@layer-acht.org> | 2015-03-27 20:21:58 +0100 |
commit | 675367e1fd73f2a117e459753a7db4d30277f59d (patch) | |
tree | ab01a848006875ba218cc8a68f755e343fc707bc | |
parent | 3a85240bac445214e103be50be6c3c36313b284f (diff) | |
download | jenkins.debian.net-675367e1fd73f2a117e459753a7db4d30277f59d.tar.xz |
reproducible: use transaction to reliable prevent race conditions
-rwxr-xr-x | bin/reproducible_build.sh | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/bin/reproducible_build.sh b/bin/reproducible_build.sh index 9c743916..2b9c5d8d 100755 --- a/bin/reproducible_build.sh +++ b/bin/reproducible_build.sh @@ -182,8 +182,12 @@ else START=$(date +'%s') DURATION=0 # mark build attempt - sqlite3 -init $INIT ${PACKAGES_DB} "REPLACE INTO schedule (package_id, date_scheduled, date_build_started) VALUES ('$SRCPKGID', '$SCHEDULED_DATE', '$DATE');" - + RESULT=$(sqlite3 -init $INIT ${PACKAGES_DB} "BEGIN IMMEDIATE TRANSACTION; SELECT package_id, date_build_started FROM schedule WHERE package_id = '$SRCPKGID' AND date_build_started = ''; REPLACE INTO schedule (package_id, date_scheduled, date_build_started) VALUES ('$SRCPKGID', '$SCHEDULED_DATE', '$DATE'); ROLLBACK TRANSACTION;") + if [ -z "$RESULT" ] ; then + echo "Package build has just been started by another job, aborting." + echo "Warning, package ${SRCPACKAGE} in ${SUITE} on ${ARCH} is probably already building elsewhere, exiting. Please check $BUILD_URL and https://reproducible.debian.net/$SUITE/$ARCH/${SRCPACKAGE} for a different BUILD_URL..." | mail -s "race condition prevented" qa-jenkins-scm@lists.alioth.debian.org + exit 0 + fi RBUILDLOG=/var/lib/jenkins/userContent/rbuild/${SUITE}/${ARCH}/${SRCPACKAGE}_None.rbuild.log echo "Starting to build ${SRCPACKAGE}/${SUITE} on $DATE" | tee ${RBUILDLOG} echo "The jenkins build log is/was available at $BUILD_URL/console" | tee -a ${RBUILDLOG} |