]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 1453126 - Bugzilla::Bloomfilter should encourage preserving the input files for...
authorDylan William Hardison <dylan@hardison.net>
Tue, 10 Apr 2018 21:35:23 +0000 (17:35 -0400)
committerGitHub <noreply@github.com>
Tue, 10 Apr 2018 21:35:23 +0000 (17:35 -0400)
.circleci/config.yml
Bugzilla/Bloomfilter.pm
Dockerfile
Makefile.PL
scripts/bloomfilter-populate.pl

index 1283d573b35e83be98cb934846d417d48cce44c0..64e6c583134ed4c530952a6b970f51288c758487 100644 (file)
@@ -7,7 +7,7 @@ version: 2
 
 defaults:
   bmo_slim_image: &bmo_slim_image
-    image: mozillabteam/bmo-slim:20180330.1
+    image: mozillabteam/bmo-slim:20180410.1
     user: app
 
   mysql_image: &mysql_image
index 0d329b2ead1811c61bb17d4594f5a70010ac9e5e..ba1d6d6c35e270ef62c9db8d15045dfc6085865b 100644 (file)
@@ -13,7 +13,8 @@ use warnings;
 
 use Bugzilla::Constants;
 use Algorithm::BloomFilter;
-use File::Temp qw(tempfile);
+use File::Slurper qw(write_binary read_binary read_lines);
+use File::Spec::Functions qw(catfile);
 
 sub _new_bloom_filter {
     my ($n) = @_;
@@ -24,44 +25,37 @@ sub _new_bloom_filter {
 }
 
 sub _filename {
-    my ($name) = @_;
+    my ($name, $type) = @_;
 
     my $datadir = bz_locations->{datadir};
-    return sprintf("%s/%s.bloom", $datadir, $name);
+
+    return catfile($datadir, "$name.$type");
 }
 
 sub populate {
-    my ($class, $name, $items) = @_;
+    my ($class, $name) = @_;
     my $memcached = Bugzilla->memcached;
+    my @items     = read_lines(_filename($name, 'list'));
+    my $filter    = _new_bloom_filter(@items + 0);
 
-    my $filter = _new_bloom_filter(@$items + 0);
-    foreach my $item (@$items) {
-        $filter->add($item);
-    }
-
-    my ($fh, $filename) = tempfile( "${name}XXXXXX", DIR => bz_locations->{datadir}, UNLINK => 0);
-    binmode $fh, ':bytes';
-    print $fh $filter->serialize;
-    close $fh;
-    rename($filename, _filename($name)) or die "failed to rename $filename: $!";
+    $filter->add($_) foreach @items;
+    write_binary(_filename($name, 'bloom'), $filter->serialize);
     $memcached->clear_bloomfilter({name => $name});
 }
 
 sub lookup {
     my ($class, $name) = @_;
     my $memcached   = Bugzilla->memcached;
-    my $filename    = _filename($name);
+    my $filename    = _filename($name, 'bloom');
     my $filter_data = $memcached->get_bloomfilter( { name => $name } );
 
     if (!$filter_data && -f $filename) {
-        open my $fh, '<:bytes', $filename;
-        local $/ = undef;
-        $filter_data = <$fh>;
-        close $fh;
+        $filter_data = read_binary($filename);
         $memcached->set_bloomfilter({ name => $name, filter => $filter_data });
     }
 
-    return Algorithm::BloomFilter->deserialize($filter_data);
+    return Algorithm::BloomFilter->deserialize($filter_data) if $filter_data;
+    return undef;
 }
 
 1;
index 6aa2f264657fe38e998405a8f93c46a3bf491f1f..0e7bb7acd9aaabf775133c2a02417fa79cb25cd4 100644 (file)
@@ -1,4 +1,4 @@
-FROM mozillabteam/bmo-slim:20180330.1
+FROM mozillabteam/bmo-slim:20180410.1
 
 ARG CI
 ARG CIRCLE_SHA1
index 9f56cd487893eafadbac2e86f2eb8f2c175371e4..4cea5b066509d7182dfa305560cb7738276792d4 100755 (executable)
@@ -48,6 +48,7 @@ my %requires = (
     'Email::MIME'              => '1.904',
     'Email::Send'              => '1.911',
     'File::Slurp'              => '9999.13',
+    'File::Slurper'            => '0.012',
     'Future'                   => '0.34',
     'HTML::Escape'             => '1.10',
     'IPC::System::Simple'      => 0,
index c591a61b31ac44a886cdca35738e7030e8bc0f38..780e98bd055bc85319c1533cd3e02d96ff6acb21 100755 (executable)
@@ -14,8 +14,6 @@ use Bugzilla::Bloomfilter;
 # set Bugzilla usage mode to USAGE_MODE_CMDLINE
 Bugzilla->usage_mode(USAGE_MODE_CMDLINE);
 
-my $name = shift @ARGV or die "usage: $0 \$name < list\n";
-my @lines = <STDIN>;
-chomp @lines;
-Bugzilla::Bloomfilter->populate($name, \@lines);
+my $name = shift @ARGV or die "usage: $0 \$name\n";
+Bugzilla::Bloomfilter->populate($name);