From 4ddc017d3a4df4bf38e8c1cd0e6dc05a31fc81f6 Mon Sep 17 00:00:00 2001 From: Michael Scherer Date: Mar 31 2020 09:08:14 +0000 Subject: Use a much less memory hungry lambda Since [msg for msg in query.all() if msg.msg['new'] is 1] is constructing a gigantic list in memory with all decoded json message, we are hitting memory limit on a regular basis. I suspect something changed on fedmsg side recently that did start to make the msg take a lot more memory since fedbadge crash every 10 to 15 minutes each time a build is made. Increasing memory is not enough, since that consume more than 20G (I did test that). So the simplest solution is to not build a list to count the items, but just count them with sum. The same pattern should be applied to others rules. --- diff --git a/rules/koji-if-you-build-it-01.yml b/rules/koji-if-you-build-it-01.yml index 7695313..51710a7 100644 --- a/rules/koji-if-you-build-it-01.yml +++ b/rules/koji-if-you-build-it-01.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 1 diff --git a/rules/koji-if-you-build-it-02.yml b/rules/koji-if-you-build-it-02.yml index aec7cab..a7f592e 100644 --- a/rules/koji-if-you-build-it-02.yml +++ b/rules/koji-if-you-build-it-02.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 10 diff --git a/rules/koji-if-you-build-it-03.yml b/rules/koji-if-you-build-it-03.yml index 1441337..70002d7 100644 --- a/rules/koji-if-you-build-it-03.yml +++ b/rules/koji-if-you-build-it-03.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 50 diff --git a/rules/koji-if-you-build-it-04.yml b/rules/koji-if-you-build-it-04.yml index 06088ea..45efaf3 100644 --- a/rules/koji-if-you-build-it-04.yml +++ b/rules/koji-if-you-build-it-04.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 250 diff --git a/rules/koji-if-you-build-it-05.yml b/rules/koji-if-you-build-it-05.yml index 503276c..445bf5c 100644 --- a/rules/koji-if-you-build-it-05.yml +++ b/rules/koji-if-you-build-it-05.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 1000 diff --git a/rules/koji-its-over-9000.yml b/rules/koji-its-over-9000.yml index ad2bd6d..d99ee53 100644 --- a/rules/koji-its-over-9000.yml +++ b/rules/koji-its-over-9000.yml @@ -23,7 +23,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 9001 diff --git a/rules/koji-the-tower-of-babel.yml b/rules/koji-the-tower-of-babel.yml index 02deffd..c448bef 100644 --- a/rules/koji-the-tower-of-babel.yml +++ b/rules/koji-the-tower-of-babel.yml @@ -23,7 +23,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 1]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 1) condition: greater than or equal to: 10000 diff --git a/rules/koji-what-goes-up-01.yml b/rules/koji-what-goes-up-01.yml index b61cfae..10071c3 100644 --- a/rules/koji-what-goes-up-01.yml +++ b/rules/koji-what-goes-up-01.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 3]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 3) condition: greater than or equal to: 1 diff --git a/rules/koji-what-goes-up-02.yml b/rules/koji-what-goes-up-02.yml index 3191a7e..ab11147 100644 --- a/rules/koji-what-goes-up-02.yml +++ b/rules/koji-what-goes-up-02.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 3]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 3) condition: greater than or equal to: 5 diff --git a/rules/koji-what-goes-up-03.yml b/rules/koji-what-goes-up-03.yml index 2e482ae..5aee68e 100644 --- a/rules/koji-what-goes-up-03.yml +++ b/rules/koji-what-goes-up-03.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 3]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 3) condition: greater than or equal to: 20 diff --git a/rules/koji-what-goes-up-04.yml b/rules/koji-what-goes-up-04.yml index 8d13500..c40b088 100644 --- a/rules/koji-what-goes-up-04.yml +++ b/rules/koji-what-goes-up-04.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 3]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 3) condition: greater than or equal to: 100 diff --git a/rules/koji-what-goes-up-05.yml b/rules/koji-what-goes-up-05.yml index eff5075..7f17e0e 100644 --- a/rules/koji-what-goes-up-05.yml +++ b/rules/koji-what-goes-up-05.yml @@ -31,7 +31,7 @@ criteria: - "%(msg.owner)s" # The user that was created. rows_per_page: 9999999 operation: - lambda: len([msg for msg in query.all() if msg.msg['new'] is 3]) + lambda: sum(1 for msg in query.all() if msg.msg['new'] is 3) condition: greater than or equal to: 250