add lock protection for download repodata using multi-threads
authoryang.zhang <y0169.zhang@samsung.com>
Mon, 16 May 2016 02:50:56 +0000 (10:50 +0800)
committerSoonKyu Park <sk7.park@samsung.com>
Wed, 15 Jun 2016 05:21:38 +0000 (14:21 +0900)
Change-Id: Ica860fe3d7375ee496f25c4ff5b4b118500173ba

createrepomddeps

index 6f96434..1fe6ea3 100755 (executable)
@@ -87,7 +87,16 @@ for my $url (@ARGV) {
     $dir = "$cachedir/$repoid/";
     $baseurl .= '/' unless $baseurl =~ /\/$/;
     mkpath("${dir}repodata");
-    system($INC[0].'/download', "${dir}repodata", "${baseurl}repodata/repomd.xml");
+    my $lock_file = $dir . 'repodata/down_repomd.lock';
+    open(my $lfh, '>>', $lock_file) or die "Could not open '$lock_file' - $!";
+    flock($lfh, LOCK_EX);
+    if (!-f $dest . '/repomd.xml') {
+      if (system($INC[0].'/download', $dest, $url . "repodata/repomd.xml")) {
+        close($lfh) or die "Could not write '$lock_file' - $!";
+        die("get metadata failed\n");
+      }
+    }
+    close($lfh) or die "Could not write '$lock_file' - $!";
   } else {
     $dir = $url;
   }
@@ -111,6 +120,9 @@ for my $url (@ARGV) {
       utf8::downgrade($u);
     }
     my $cached;
+    my $lock_file = $dir . "repodata/down_primary.lock";
+    open(my $lfh, '>>', $lock_file) or die "Could not open '$lock_file' - $!";
+    flock($lfh, LOCK_EX);
     if (-e $u) {
       $cached = 1;
       $cached = 0 if exists($f->{'size'}) && $f->{'size'} != (-s _);
@@ -126,6 +138,8 @@ for my $url (@ARGV) {
        die("inconsistent repodata in $url\n");
       }
     }
+    close($lfh) or die "Could not write '$lock_file' - $!";
+
     my $fh;
     open($fh, '<', $u) or die "Error opening $u: $!\n";
     if ($u =~ /\.gz$/) {