[tor-commits] [rbm/master] Bug 40004: Improve cache in project_config
gk at torproject.org
gk at torproject.org
Wed Sep 16 19:24:14 UTC 2020
commit a32239ddb1f465115cb4a8bb9f4b853c149506f3
Author: Nicolas Vigier <boklm at torproject.org>
Date: Mon Sep 14 15:40:10 2020 +0200
Bug 40004: Improve cache in project_config
---
lib/RBM.pm | 18 +++++++-----------
1 file changed, 7 insertions(+), 11 deletions(-)
diff --git a/lib/RBM.pm b/lib/RBM.pm
index 6277de4..825502a 100644
--- a/lib/RBM.pm
+++ b/lib/RBM.pm
@@ -206,19 +206,16 @@ sub confkey_str {
sub project_config {
my ($project, $name, $options) = @_;
- CORE::state $cache;
+ CORE::state %config_cache;
my $res;
my $error_if_undef = $options->{error_if_undef};
- my $cache_save = $cache;
- if ($options) {
- $options = {%$options, error_if_undef => 0};
- my %ignore_options = map { $_ => 1 } qw(error_if_undef step);
- $cache = {} if grep { !$ignore_options{$_} } keys %$options;
- }
+ $options = {%$options, error_if_undef => 0} if $options;
+ my $cache_id = pp($config->{run})
+ . pp({ %{$config->{opt}}, $options ? %$options : () });
my $name_str = ref $name eq 'ARRAY' ? join '/', @$name : $name;
my $step = $config->{step};
- if (exists $cache->{$project}{$step}{$name_str}) {
- $res = $cache->{$project}{$step}{$name_str};
+ if (exists $config_cache{$project}{$step}{$name_str}{$cache_id}) {
+ $res = $config_cache{$project}{$step}{$name_str}{$cache_id};
goto FINISH;
}
$name = [ split '/', $name ] unless ref $name eq 'ARRAY';
@@ -233,10 +230,9 @@ sub project_config {
$res = process_template($project, $res,
confkey_str($name) eq 'output_dir' ? '.' : undef);
}
- $cache->{$project}{$step}{$name_str} = $res;
+ $config_cache{$project}{$step}{$name_str}{$cache_id} = $res;
$config->{opt} = $opt_save;
FINISH:
- $cache = $cache_save;
if (!defined($res) && $error_if_undef) {
my $msg = $error_if_undef eq '1' ?
"Option " . confkey_str($name) . " is undefined"
More information about the tor-commits
mailing list