Skip to content

Commit aa7f00d

Browse files
authored
Merge pull request #678 from furlongm/errata-speedups
speed up errata processing
2 parents ec881bb + 697ffb2 commit aa7f00d

File tree

2 files changed

+31
-12
lines changed

2 files changed

+31
-12
lines changed

errata/utils.py

Lines changed: 27 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@
1414
# You should have received a copy of the GNU General Public License
1515
# along with Patchman. If not, see <http://www.gnu.org/licenses/>
1616

17+
import concurrent.futures
18+
19+
from django.db import connections
20+
1721
from util import tz_aware_datetime
1822
from errata.models import Erratum
1923
from packages.models import PackageUpdate
@@ -61,24 +65,37 @@ def mark_errata_security_updates():
6165
""" For each set of erratum packages, modify any PackageUpdate that
6266
should be marked as a security update.
6367
"""
68+
connections.close_all()
6469
elen = Erratum.objects.count()
65-
pbar_start.send(sender=None, ptext=f'Scanning {elen} Errata', plen=elen)
66-
for i, e in enumerate(Erratum.objects.all()):
67-
pbar_update.send(sender=None, index=i + 1)
68-
e.scan_for_security_updates()
70+
pbar_start.send(sender=None, ptext=f'Scanning {elen} Errata for security updates', plen=elen)
71+
i = 0
72+
with concurrent.futures.ProcessPoolExecutor(max_workers=25) as executor:
73+
futures = [executor.submit(e.scan_for_security_updates) for e in Erratum.objects.all()]
74+
for future in concurrent.futures.as_completed(futures):
75+
pbar_update.send(sender=None, index=i + 1)
76+
i += 1
6977

7078

7179
def scan_package_updates_for_affected_packages():
7280
""" Scan PackageUpdates for packages affected by errata
7381
"""
74-
for pu in PackageUpdate.objects.all():
82+
plen = PackageUpdate.objects.count()
83+
pbar_start.send(sender=None, ptext=f'Scanning {plen} Updates for affected packages', plen=plen)
84+
for i, pu in enumerate(PackageUpdate.objects.all()):
85+
pbar_update.send(sender=None, index=i + 1)
7586
for e in pu.newpackage.provides_fix_in_erratum.all():
7687
e.affected_packages.add(pu.oldpackage)
7788

7889

79-
def add_errata_affected_packages():
90+
def enrich_errata():
91+
""" Enrich Errata with data from osv.dev
92+
"""
93+
connections.close_all()
8094
elen = Erratum.objects.count()
81-
pbar_start.send(sender=None, ptext=f'Adding affected packages to {elen} Errata', plen=elen)
82-
for i, e in enumerate(Erratum.objects.all()):
83-
pbar_update.send(sender=None, index=i + 1)
84-
e.fetch_osv_dev_data()
95+
pbar_start.send(sender=None, ptext=f'Adding osv.dev data to {elen} Errata', plen=elen)
96+
i = 0
97+
with concurrent.futures.ProcessPoolExecutor(max_workers=25) as executor:
98+
futures = [executor.submit(e.fetch_osv_dev_data) for e in Erratum.objects.all()]
99+
for future in concurrent.futures.as_completed(futures):
100+
pbar_update.send(sender=None, index=i + 1)
101+
i += 1

sbin/patchman

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,8 @@ from django.conf import settings # noqa
3030
django_setup()
3131

3232
from arch.utils import clean_architectures
33-
from errata.utils import mark_errata_security_updates, add_errata_affected_packages
33+
from errata.utils import mark_errata_security_updates, enrich_errata, \
34+
scan_package_updates_for_affected_packages
3435
from errata.tasks import update_errata
3536
from hosts.models import Host
3637
from modules.utils import clean_modules
@@ -522,8 +523,9 @@ def process_args(args):
522523
showhelp = False
523524
if args.update_errata:
524525
update_errata(args.erratum_type, args.force, args.repo)
526+
scan_package_updates_for_affected_packages()
525527
mark_errata_security_updates()
526-
add_errata_affected_packages()
528+
enrich_errata()
527529
showhelp = False
528530
if args.update_cves:
529531
update_cves(args.cve, args.fetch_nist_data)

0 commit comments

Comments
 (0)