Merge ~mdeslaur/ubuntu-cve-tracker:more_cvelib_caching into ubuntu-cve-tracker:master

Proposed by Marc Deslauriers
Status: Merged
Merged at revision: 342eea342e33ced00a9ae5f9cdf27d07da0278c0
Proposed branch: ~mdeslaur/ubuntu-cve-tracker:more_cvelib_caching
Merge into: ubuntu-cve-tracker:master
Diff against target: 44 lines (+5/-1)
1 file modified
scripts/cve_lib.py (+5/-1)
Reviewer Review Type Date Requested Status
Alex Murray Approve
Review via email: mp+462345@code.launchpad.net

Commit message

commit 7b18c2bd59198d9eefe61dc0ce2a6b57b661f582
Author: Marc Deslauriers <email address hidden>
Date: Wed Mar 13 13:35:25 2024 -0400

    cve_lib.py: add more caching to small static cve_lib functions

Description of the change

This brings down ubuntu-table runtime, which is used by cve_need_retire and other things:

BEFORE:
$ time ./scripts/cve_need_retire

real 2m7.587s
user 2m6.066s
sys 0m1.522s

AFTER:
$ time ./scripts/cve_need_retire

real 0m46.135s
user 0m44.484s
sys 0m1.652s

To post a comment you must log in.
Revision history for this message
Alex Murray (alexmurray) wrote :

LGTM (I wonder if whether we should change some of our internal data structures to be sets rather than lists to help with the performance of testing presence etc?)

review: Approve
Revision history for this message
Marc Deslauriers (mdeslaur) wrote :

Yeah, that would definitely improve performance...we tend to just use lists by default when adding new features, but sets would be better in a lot of cases. I'll take a closer look at cve_lib when I get a minute.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/scripts/cve_lib.py b/scripts/cve_lib.py
2index 91aa59c..49694fb 100755
3--- a/scripts/cve_lib.py
4+++ b/scripts/cve_lib.py
5@@ -2756,13 +2756,14 @@ def split_overlay_ppa_from_release(rel):
6
7 return rel.split('/')
8
9-
10+@lru_cache(maxsize=None)
11 def is_active_release(rel):
12 return rel not in eol_releases
13
14
15 # takes a standard release name
16 # XXX should perhaps adjust that
17+@lru_cache(maxsize=None)
18 def is_active_esm_release(rel, component='main'):
19 if not is_active_release(rel) or \
20 component == 'universe' or component == 'multiverse':
21@@ -2771,6 +2772,7 @@ def is_active_esm_release(rel, component='main'):
22 return esm_rel not in eol_releases
23 return False
24
25+@lru_cache(maxsize=None)
26 def get_active_releases_with_esm():
27 """Return Ubuntu releases with, at least, one active ESM release."""
28 active_esm_releases = []
29@@ -2788,6 +2790,7 @@ def get_active_releases_with_esm():
30
31 return active_esm_releases
32
33+@lru_cache(maxsize=None)
34 def get_active_esm_releases():
35 """Return all active ESM releases."""
36 active_esm_releases = []
37@@ -2799,6 +2802,7 @@ def get_active_esm_releases():
38 return set(active_esm_releases)
39
40 # Defaults to main for historical reasons
41+@lru_cache(maxsize=None)
42 def get_esm_name(rel, component='main'):
43 if rel in esm_releases:
44 return rel + '/esm'

Subscribers

People subscribed via source and target branches