diff options
author | cpettet <rush@wikimedia.org> | 2014-10-30 17:39:26 -0500 |
---|---|---|
committer | cpettet <rush@wikimedia.org> | 2014-11-03 11:39:01 -0600 |
commit | 3dbd2f926443c7f3e9e102e8a8b6f22f441c346b (patch) | |
tree | fe9824dbaa18579e4197c0865b92b040e1c389b0 /rt_update_tasks.py | |
parent | 33aa89d8e59498cf7158601b516b6b234d0addfa (diff) |
cleanup and dealing with rt dependencies
Diffstat (limited to 'rt_update_tasks.py')
-rwxr-xr-x | rt_update_tasks.py | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/rt_update_tasks.py b/rt_update_tasks.py new file mode 100755 index 0000000..47921d4 --- /dev/null +++ b/rt_update_tasks.py @@ -0,0 +1,126 @@ +#!/usr/bin/env python +import sys +import time +import json +import multiprocessing +from wmfphablib import phabdb +from wmfphablib import log +from wmfphablib import vlog +from wmfphablib import errorlog as elog +from wmfphablib import now +from wmfphablib import return_bug_list +from wmfphablib import rtlib +from wmfphablib import ipriority +from wmfphablib import config + + +def update(bugid): + + pmig = phabdb.phdb(db=config.rtmigrate_db) + + epriority = pmig.sql_x("SELECT priority \ + from task_relations \ + where id = %s", bugid) + + if epriority and epriority[0] == ipriority['update_success']: + log('skipping %s as blockers already updated' % (bugid,)) + return True + + query = "SELECT header FROM rt_meta WHERE id = %s" + header = pmig.sql_x(query, (bugid,)) + if not header: + elog('no header found for %s' % (bugid,)) + return False + + def extref(ticket): + refid = phabdb.reference_ticket("%s%s" % (rtlib.prepend, ticket)) + if not refid: + return '' + return refid[0] + + blocker_ref = extref(bugid) + tinfo = json.loads(header[0][0]) + + if 'blocks' not in tinfo['links']: + log("%s doesn't block anything" % (str(bugid),)) + return True + + for b in tinfo['links']['blocks']: + blocked_ref = extref(b) + log("%s is blocking %s" % (blocker_ref, + blocked_ref)) + if blocked_ref: + log(phabdb.set_blocked_task(blocker_ref, + blocked_ref)) + else: + log('%s is missing blocker %s' % (blocked_ref, + blocker_ref)) + + blocks = phabdb.get_tasks_blocked(blocker_ref) + vlog('%s is blocking %s' % (blocker_ref, str(blocks))) + current = pmig.sql_x("SELECT * \ + from task_relations \ + WHERE id = %s", bugid) + if current: + pmig.sql_x("UPDATE task_relations \ + SET priority=%s, blocks=%s, modified=%s \ + WHERE id = %s", + (ipriority['update_success'], + json.dumps(blocks), + now(), bugid)) + else: + sql = "INSERT INTO task_relations \ + (id, priority, blocks, modified) \ + VALUES (%s, %s, %s, %s)" + pmig.sql_x(sql, (bugid, ipriority['update_success'], + json.dumps(blocks), now())) + pmig.close() + return True + + +def run_update(bugid, tries=1): + if tries == 0: + pmig = phabdb.phdb(db=config.rtmigrate_db) + current = pmig.sql_x("SELECT * from \ + task_relations \ + where id = %s", bugid) + if current: + pmig.sql_x("UPDATE task_relations \ + SET priority=%s, \ + blocks=%s, \ + modified=%s \ + WHERE id = %s", + (ipriority['creation_failed'], + json.dumps([]), now(), bugid)) + else: + sql = "INSERT INTO task_relations \ + (id, priority, blocks, modified) \ + VALUES (%s, %s, %s, %s)" + pmig.sql_x(sql, (bugid, + ipriority['creation_failed'], + json.dumps([]), + now())) + pmig.close() + elog('final fail to update %s' % (bugid,)) + return False + try: + return update(bugid) + except Exception as e: + import traceback + tries -= 1 + time.sleep(5) + traceback.print_exc(file=sys.stdout) + elog('failed to update %s' % (bugid,)) + return run_update(bugid, tries=tries) + +def main(): + bugs = return_bug_list() + from multiprocessing import Pool + pool = Pool(processes=int(config.bz_updatemulti)) + _ = pool.map(run_update, bugs) + complete = len(filter(bool, _)) + failed = len(_) - complete + print '%s completed %s, failed %s' % (sys.argv[0], complete, failed) + +if __name__ == '__main__': + main() |