From bf1267babf5e4eb34d1b397e2b7ae03c0d0d7f54 Mon Sep 17 00:00:00 2001 From: Erich Eckner Date: Thu, 13 Sep 2018 12:37:23 +0200 Subject: bin/get-assignment: delete all but one toolchain build-assignment if any toolchain build-assignment is to be built --- bin/get-assignment | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 81 insertions(+), 6 deletions(-) (limited to 'bin/get-assignment') diff --git a/bin/get-assignment b/bin/get-assignment index f9913a4..0df5693 100755 --- a/bin/get-assignment +++ b/bin/get-assignment @@ -147,8 +147,6 @@ if [ -n "${currently_building}" ]; then hand_out_assignment "${currently_building}" fi -# TODO: currently, toolchain packages ARE HANDED OUT IN PARALLEL - THIS SHOULD NOT BE! - # a package with [all dependencies met or which is part of a loop] # and which is currently not being built, ordered by: # 1: we requested it @@ -159,7 +157,7 @@ fi next_building=$( # shellcheck disable=SC2016 { - for suffix in '' '_copy'; do + for suffix in '' '_2' '_3' '_4'; do printf 'CREATE TEMPORARY TABLE `considered_build_assignments%s` (' \ "${suffix}" printf '`id` BIGINT,' @@ -195,7 +193,7 @@ next_building=$( printf ' AND `architectures`.`name` = from_base64("%s");\n' \ "${arch}" - printf 'INSERT IGNORE INTO `considered_build_assignments_copy` (`id`)' + printf 'INSERT IGNORE INTO `considered_build_assignments_2` (`id`)' printf ' SELECT `considered_build_assignments`.`id`' printf ' FROM `considered_build_assignments`;\n' @@ -210,13 +208,90 @@ next_building=$( printf 'SELECT 1 FROM `toolchain_order`' printf ' WHERE `toolchain_order`.`pkgbase`=`package_sources`.`pkgbase`' printf ') AND EXISTS (' - printf 'SELECT 1 FROM `considered_build_assignments_copy`' + printf 'SELECT 1 FROM `considered_build_assignments_2`' + printf ' JOIN `build_assignments`' + printf ' ON `build_assignments`.`id`=`considered_build_assignments_2`.`id`' + mysql_join_build_assignments_package_sources + printf ' JOIN `toolchain_order`' + printf ' ON `toolchain_order`.`pkgbase`=`package_sources`.`pkgbase`' + printf ');\n' + + printf 'DELETE `considered_build_assignments_2`' + printf ' FROM `considered_build_assignments_2`;\n' + for suffix in '_2' '_3' '_4'; do + printf 'INSERT IGNORE INTO `considered_build_assignments%s` (`id`)' \ + "${suffix}" + printf ' SELECT `considered_build_assignments`.`id`' + printf ' FROM `considered_build_assignments`;\n' + done + + # delete all but one package from considered list iff any toolchain + # package is on that list + # the order is: + # - does not exist blocked before exists blocked + # - unbuilt before built + # - exists unblocked before does not exist unblocked + printf 'DELETE `considered_build_assignments`' + printf ' FROM `considered_build_assignments`' + printf ' WHERE EXISTS (' + printf 'SELECT 1 FROM `considered_build_assignments_2`' printf ' JOIN `build_assignments`' - printf ' ON `build_assignments`.`id`=`considered_build_assignments_copy`.`id`' + printf ' ON `build_assignments`.`id`=`considered_build_assignments_2`.`id`' mysql_join_build_assignments_package_sources printf ' JOIN `toolchain_order`' printf ' ON `toolchain_order`.`pkgbase`=`package_sources`.`pkgbase`' printf ');\n' + printf 'INSERT IGNORE INTO `considered_build_assignments` (`id`)' + printf 'SELECT `considered_build_assignments_2`.`id`' + printf ' FROM `considered_build_assignments_2`' + printf ' JOIN `build_assignments`' + printf ' ON `build_assignments`.`id`=`considered_build_assignments_2`.`id`' + mysql_join_build_assignments_package_sources + printf ' ORDER BY' + # does it exist toolchain-blocked? + printf ' EXISTS (' + printf 'SELECT 1' + printf ' FROM `toolchain_order` AS `late`' + printf ' JOIN `toolchain_order` AS `early`' + printf ' ON `late`.`pkgbase`!=`early`.`pkgbase`' + printf ' AND `late`.`number`>`early`.`number`' + printf ' JOIN `package_sources` AS `e_ps`' + printf ' ON `e_ps`.`pkgbase`=`early`.`pkgbase`' + mysql_join_package_sources_build_assignments 'e_ps' 'e_ba' + printf ' JOIN `considered_build_assignments_3` AS `e_cba`' + printf ' ON `e_cba`.`id`=`e_ba`.`id`' + printf ' WHERE `late`.`pkgbase`=`package_sources`.`pkgbase`' + printf '),' + printf ' `tc_q`.`exists_blocked`,' + # does it exist built? + printf ' EXISTS (' + printf 'SELECT 1' + printf ' FROM `binary_packages_in_repositories`' + mysql_join_binary_packages_in_repositories_repositories + printf ' AND `repositories`.`is_on_master_mirror`' + mysql_join_repositories_architectures + printf ' AND `architectures`.`name`=from_base64("%s")' \ + "${arch}" + printf ' WHERE `binary_packages`.`build_assignment`=`build_assignments`.`id`' + printf '),' + # does it exist not toolchain-blocked? + printf ' EXISTS (' + printf 'SELECT 1' + printf ' FROM `toolchain_order` AS `late`' + printf ' WHERE NOT EXISTS (' + printf 'SELECT 1' + printf ' FROM `toolchain_order` AS `early`' + printf ' JOIN `package_sources` AS `e_ps`' + printf ' ON `e_ps`.`pkgbase`=`early`.`pkgbase`' + mysql_join_package_sources_build_assignments 'e_ps' 'e_ba' + printf ' JOIN `considered_build_assignments_4` AS `e_cba`' + printf ' ON `e_ba`.`id`=`e_cba`.`id`' + printf ' WHERE `late`.`pkgbase`!=`early`.`pkgbase`' + printf ' AND `late`.`number`>`early`.`number`' + printf ')' + printf ' AND `late`.`pkgbase`=`package_sources`.`pkgbase`' + printf ') DESC' + printf ' LIMIT 1;\n' # delete all currently building packages from considered list printf 'DELETE `considered_build_assignments`' -- cgit v1.2.3