From 503e546b2b0c9dba505a4e7940f257d41ad95f67 Mon Sep 17 00:00:00 2001 From: Wojtek Kosior Date: Thu, 25 Aug 2022 12:43:29 +0200 Subject: [proxy] properly flag failed package installations in sqlite db --- src/hydrilla/proxy/state_impl/base.py | 37 +++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'src/hydrilla/proxy/state_impl/base.py') diff --git a/src/hydrilla/proxy/state_impl/base.py b/src/hydrilla/proxy/state_impl/base.py index 25fd4c5..a889e71 100644 --- a/src/hydrilla/proxy/state_impl/base.py +++ b/src/hydrilla/proxy/state_impl/base.py @@ -78,6 +78,34 @@ class PolicyTree(pattern_tree.PatternTree[policies.PolicyFactory]): return policy_tree +def mark_failed_file_installs( + cursor: sqlite3.Cursor, + file_sha256: str, + repo_id: int +) -> None: + cursor.execute( + ''' + WITH failed_items AS ( + SELECT DISTINCT + item_version_id + FROM + files AS f + JOIN file_uses AS fu USING (file_id) + JOIN item_versions_extra AS ive USING (item_version_id) + WHERE + f.sha256 = ? AND f.data IS NULL AND ive.repo_id = ? + ) + UPDATE + item_versions + SET + installed = 'F' + WHERE + item_version_id IN failed_items; + ''', + (file_sha256, repo_id) + ) + + PayloadsData = t.Mapping[st.PayloadRef, st.PayloadData] # mypy needs to be corrected: @@ -123,6 +151,15 @@ class HaketiloStateWithFields(st.HaketiloState): if start_transaction: self.current_cursor.execute('ROLLBACK TRANSACTION;') raise + except st.FileInstallationError as ex: + if start_transaction: + assert self.current_cursor is not None + mark_failed_file_installs( + cursor = self.current_cursor, + file_sha256 = ex.sha256, + repo_id = int(ex.repo_id) + ) + raise finally: self.current_cursor = None -- cgit v1.2.3