From c7aeda7898a3a54b8dd6bd6e1cb72cc43967dbb5 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Wed, 3 Apr 2024 10:37:30 -0400 Subject: [PATCH 1/3] fakehub --no-commit option --- devtools/fakehub | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/devtools/fakehub b/devtools/fakehub index cc475bcf..4c66388b 100755 --- a/devtools/fakehub +++ b/devtools/fakehub @@ -14,7 +14,7 @@ from urllib.parse import quote sys.path.insert(0, os.getcwd()) import koji -from kojihub import auth, kojixmlrpc, kojihub +from kojihub import auth, kojixmlrpc, kojihub, db from koji.context import context import koji.xmlrpcplus @@ -104,6 +104,8 @@ def get_options(): parser.add_option('--user', '-u', help='execute as user') parser.add_option('--exclusive', '-x', action='store_true', help='emulate an exclusive session') + parser.add_option('-n', '--no-commit', action='store_true', + help='skip commit') opts, args = parser.parse_args() # parse request from args @@ -149,10 +151,16 @@ def set_config(environ): environ['koji.hub.ConfigDir'] = lconfigd +def skip_commit(cnx): + print('Skipping commit') + + def main(): options = get_options() if options.pdb: kojixmlrpc.ModXMLRPCRequestHandler.handle_rpc = handle_rpc + if options.no_commit: + db.DBWrapper.commit = skip_commit environ = {} environ['SCRIPT_FILENAME'] = kojixmlrpc.__file__ From d54dedc039d68ca974744568739bff5e77b615c2 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Wed, 3 Apr 2024 10:37:55 -0400 Subject: [PATCH 2/3] sort checksums before inserting --- kojihub/kojihub.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index 88fb94df..6a739e07 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -16117,7 +16117,7 @@ def create_rpm_checksum(rpm_id, sigkey, chsum_dict): f"checksum type {koji.CHECKSUM_TYPES[r['checksum_type']]}.") if chsum_dict: insert = BulkInsertProcessor(table='rpm_checksum') - for func, chsum in chsum_dict.items(): + for func, chsum in sorted(chsum_dict.items()): insert.add_record(rpm_id=rpm_id, sigkey=sigkey, checksum=chsum, checksum_type=koji.CHECKSUM_TYPES[func]) insert.execute() From 1932796ef55776b3264b9b60aa119f69ef3a5635 Mon Sep 17 00:00:00 2001 From: Mike McLean Date: Wed, 17 Apr 2024 09:43:50 -0400 Subject: [PATCH 3/3] use upsert to avoid duplicate inserts --- kojihub/kojihub.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kojihub/kojihub.py b/kojihub/kojihub.py index 6a739e07..4358b33d 100644 --- a/kojihub/kojihub.py +++ b/kojihub/kojihub.py @@ -16116,11 +16116,13 @@ def create_rpm_checksum(rpm_id, sigkey, chsum_dict): f"rpm ID {r['rpm_id']}, sigkey {r['sigkey']} and " f"checksum type {koji.CHECKSUM_TYPES[r['checksum_type']]}.") if chsum_dict: - insert = BulkInsertProcessor(table='rpm_checksum') for func, chsum in sorted(chsum_dict.items()): - insert.add_record(rpm_id=rpm_id, sigkey=sigkey, checksum=chsum, - checksum_type=koji.CHECKSUM_TYPES[func]) - insert.execute() + data = {'rpm_id': rpm_id, + 'sigkey': sigkey, + 'checksum': chsum, + 'checksum_type': koji.CHECKSUM_TYPES[func]} + upsert = UpsertProcessor(table='rpm_checksum', data=data, skip_dup=True) + upsert.execute() def reject_draft(data, is_rpm=False, error=None):