From 7a246b1dacfc630c12a752463e5e17fbc0a8640b Mon Sep 17 00:00:00 2001 From: Harsha Kethineni <harshakethineni@flywheel.io> Date: Tue, 6 Jun 2017 09:43:00 -0500 Subject: [PATCH] modified process cursor to take optional params deleted redundant closures --- bin/database.py | 96 +++++++++++-------------------------------------- 1 file changed, 20 insertions(+), 76 deletions(-) diff --git a/bin/database.py b/bin/database.py index f02dc9ed..e34e3bd0 100755 --- a/bin/database.py +++ b/bin/database.py @@ -58,7 +58,7 @@ def getMonotonicTime(): # http://stackoverflow.com/a/7424304 return os.times()[4] -def process_cursor(cursor, closure): +def process_cursor(cursor, closure, context = None): """ Given an iterable (say, a mongo cursor) and a closure, call that closure in parallel over the iterable. Call order is undefined. Currently launches N python process workers, where N is the number of vcpu cores. @@ -110,7 +110,10 @@ def process_cursor(cursor, closure): if 100 * (cursor_index / cursor_size) >= next_percent: logging.info('{} percent complete ...'.format(next_percent)) next_percent = next_percent + percent_increment - result = closure(document) + if optional_param == None: + result = closure(document) + else: + result = closure(document, context) cursor_index = cursor_index + 1 if result != True: failed = True @@ -1054,91 +1057,32 @@ def upgrade_to_29(): users = config.db.users.find({}) process_cursor(users, upgrade_to_29_closure) -def upgrade_to_30_closure_session_analysis(session): - analyses = session.get('analyses', None) +def upgrade_to_30_closure_analysis(coll_item, coll): + analyses = coll_item.get('analyses', None) if analyses is not None: for analysis_ in analyses: files = analysis_.get('files', []) for file_ in files: if 'created' not in file_: - file_['created'] = analysis_.get('created', datetime.datetime.utcnow()) - result = config.db.sessions.update_one({'_id': session['_id']}, {'$set': {'analyses': analyses}}) + file_['created'] = analysis_.get('created', datetime.datetime(1970, 1, 1)) + result = coll.update_one({'_id': coll_item['_id']}, {'$set': {'analyses': analyses}}) if result.modified_count == 1: return True else: return "File timestamp creation failed for:" + str(session) + '/analyses' + str(analysis_) + '/files' + str(file_) -def upgrade_to_30_closure_collection_analysis(collection): - analyses = collection.get('analyses', None) - - if analyses is not None: - for analysis_ in analyses: - files = analysis_.get('files', []) - for file_ in files: - if 'created' not in file_: - file_['created'] = analysis_.get('created', datetime.datetime.utcnow()) - result = config.db.collections.update_one({'_id': collection['_id']}, {'$set': {'analyses': analyses}}) - if result.modified_count == 1: - return True - else: - return "File timestamp creation failed for:" + 'str(collection)' + '/analyses' + 'str(analysis_)' + '/files' + 'str(file_)' - -def upgrade_to_30_closure_sessions(session): - session_files = session.get('files', []) - for sfile_ in session_files: - if 'created' not in sfile_: - sfile_['created'] = session.get('created', datetime.datetime.utcnow()) - result = config.db.sessions.update_one({'_id': session['_id']}, {'$set': {'files': session_files}}) - if result.modified_count == 1: - return True - else: - return "File timestamp creation failed for:" + str(session) + '/files' + str(file_) - -def upgrade_to_30_closure_collections(collection): - collection_files = collection.get('files', []) - for sfile_ in collection_files: - if 'created' not in sfile_: - sfile_['created'] = collection.get('created', datetime.datetime.utcnow()) - result = config.db.collections.update_one({'_id': collection['_id']}, {'$set': {'files': collection_files}}) - if result.modified_count == 1: - return True - else: - return "File timestamp creation failed for:" + str(collection) + '/files' + str(file_) - -def upgrade_to_30_closure_projects(project): - files = project.get('files', []) - for file_ in files: - if 'created' not in file_: - file_['created'] = project.get('created', datetime.datetime.utcnow()) - result = config.db.projects.update_one({'_id': project['_id']}, {'$set': {'files': files}}) - if result.modified_count == 1: - return True - else: - return "File timestamp creation failed for:" + str(project) + '/files' + str(file_) - -def upgrade_to_30_closure_acquisitions(acquisition): - files = acquisition.get('files', []) +def upgrade_to_30_closure_coll(coll_item, coll): + files = coll_item.get('files', []) for file_ in files: if 'created' not in file_: - file_['created'] = acquisition.get('created', datetime.datetime.utcnow()) - result = config.db.acquisitions.update_one({'_id': acquisition['_id']}, {'$set': {'files': files}}) + file_['created'] = coll_item.get('created', datetime.datetime(1970, 1, 1)) + result = coll.update_one({'_id': coll_item['_id']}, {'$set': {'files': files}}) if result.modified_count == 1: return True else: - return "File timestamp creation failed for:" + str(acquisition) + '/files' + str(file_) + return "File timestamp creation failed for:" + str(session) + '/files' + str(file_) -def upgrade_to_30_test(coll_item): - analyses = coll_item.get('analyses', None) - if analyses is not None: - for a_index, analysis_ in enumerate(coll_item['analyses']): - files = coll_item['analyses'][a_index].get('files') - if files is not None: - created_count = 0 - for file_ in files: - if 'created' not in file_: - logging.info(coll_item + ', ' + analysis_ + ', ' + file_ + ' has no created timestamp') - return True def upgrade_to_30(): """ @@ -1156,23 +1100,23 @@ def upgrade_to_30(): cursor = config.db.collections.find({'analyses': {'$exists': True}, 'analyses.files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_collection_analysis) + process_cursor(cursor, upgrade_to_30_closure_analysis, config.db.collections) cursor = config.db.sessions.find({'analyses': {'$exists': True}, 'analyses.files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_session_analysis) + process_cursor(cursor, upgrade_to_30_closure_analysis, config.db.sessions) cursor = config.db.sessions.find({'files': {'$exists': True}, 'files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_sessions) + process_cursor(cursor, upgrade_to_30_closure_coll, config.db.sessions) cursor = config.db.collections.find({'files': {'$exists': True}, 'files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_collections) + process_cursor(cursor, upgrade_to_30_closure_coll, config.db.collections) cursor = config.db.acquisitions.find({'files': {'$exists': True}, 'files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_acquisitions) + process_cursor(cursor, upgrade_to_30_closure_coll, config.db.acquisitions) cursor = config.db.projects.find({'files': {'$exists': True}, 'files.created': {'$exists': False}}) - process_cursor(cursor, upgrade_to_30_closure_projects) + process_cursor(cursor, upgrade_to_30_closure_coll, config.db.projects) def upgrade_schema(): -- GitLab