ArielGlenn has uploaded a new change for review. https://gerrit.wikimedia.org/r/302706
Change subject: If a prereq job is missing, run it instead of giving up ...................................................................... If a prereq job is missing, run it instead of giving up [WIP utterly untested] Bug: T141981 Change-Id: I278e0e504be2c387fecf02cab07a365dd1f2b6f2 --- M xmldumps-backup/dumps/runner.py 1 file changed, 54 insertions(+), 35 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/operations/dumps refs/changes/06/302706/1 diff --git a/xmldumps-backup/dumps/runner.py b/xmldumps-backup/dumps/runner.py index 6d45fdf..eb21266 100644 --- a/xmldumps-backup/dumps/runner.py +++ b/xmldumps-backup/dumps/runner.py @@ -703,6 +703,49 @@ self.failurehandler.report_failure() self.failurehandler.failure_count += 1 + def do_run_item(self, item): + prereq_job = None + + Maintenance.exit_if_in_maintenance_mode( + "In maintenance mode, exiting dump of %s at step %s" + % (self.db_name, item.name())) + if item.to_run(): + item.start() + self.indexhtml.update_index_html() + self.statushtml.update_status_file() + + self.dumpjobdata.do_before_job(self.dump_item_list.dump_items) + + try: + item.dump(self) + except Exception, ex: + exc_type, exc_value, exc_traceback = sys.exc_info() + if self.verbose: + sys.stderr.write(repr(traceback.format_exception( + exc_type, exc_value, exc_traceback))) + else: + if exc_type.__name__ == 'BackupPrereqError': + error_message = str(ex) + self.debug(error_message) + if error_message.startswith("Required job "): + prereq_job = error_message.split(" ")[2] + else: + self.debug("*** exception! " + str(ex)) + if exc_type.__name__ != 'BackupPrereqError': + item.set_status("failed") + + if item.status() == "done": + self.dumpjobdata.do_after_job(item) + elif item.status() == "waiting" or item.status() == "skipped": + # don't update the checksum files for this item. + return prereq_job + else: + # Here for example status is "failed". But maybe also + # "in-progress", if an item chooses to override dump(...) and + # forgets to set the status. This is a failure as well. + self.run_handle_failure() + return prereq_job + def run(self): if self.job_requested: if not self.dump_item_list.old_runinfo_retrieved and self.wiki.exists_perdump_index(): @@ -753,41 +796,17 @@ self.dumpjobdata.do_before_dump() for item in self.dump_item_list.dump_items: - Maintenance.exit_if_in_maintenance_mode( - "In maintenance mode, exiting dump of %s at step %s" - % (self.db_name, item.name())) - if item.to_run(): - item.start() - self.indexhtml.update_index_html() - self.statushtml.update_status_file() - - self.dumpjobdata.do_before_job(self.dump_item_list.dump_items) - - try: - item.dump(self) - except Exception, ex: - exc_type, exc_value, exc_traceback = sys.exc_info() - if self.verbose: - sys.stderr.write(repr(traceback.format_exception( - exc_type, exc_value, exc_traceback))) - else: - if exc_type.__name__ == 'BackupPrereqError': - self.debug(str(ex)) - else: - self.debug("*** exception! " + str(ex)) - if exc_type.__name__ != 'BackupPrereqError': - item.set_status("failed") - - if item.status() == "done": - self.dumpjobdata.do_after_job(item) - elif item.status() == "waiting" or item.status() == "skipped": - # don't update the checksum files for this item. - continue - else: - # Here for example status is "failed". But maybe also - # "in-progress", if an item chooses to override dump(...) and - # forgets to set the status. This is a failure as well. - self.run_handle_failure() + prereq_job = self.do_run_item(item) + max_prereqs = 0 + # we have the lock so we might as well run the prereq job now. + # there may be a string of prereqs not met, + # i.e. articlesrecombine -> articles -> stubs + # so we're willing to walk back up the list up to five items, + # assume there's something really broken if it takes more than that + while prereq_job is not None and max_prereqs < 5: + new_item = self.dump_item_list.find_item_by_name(prereq_job) + prereq_job = self.do_run_item(new_item) + max_prereqs = max_prereqs + 1 # special case if self.job_requested == "createdirs": -- To view, visit https://gerrit.wikimedia.org/r/302706 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I278e0e504be2c387fecf02cab07a365dd1f2b6f2 Gerrit-PatchSet: 1 Gerrit-Project: operations/dumps Gerrit-Branch: master Gerrit-Owner: ArielGlenn <ar...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits