find optimal backup level if none is specified
authorHeiko Schlittermann (CTQ.kx.schlittermann.de) <hs@schlittermann.de>
Mon, 02 May 2011 14:40:54 +0200
changeset 68 73e32571b22f
parent 67 4dd23211874a
child 80 1958c7ab13f1
child 85 f6a277e9bda8
find optimal backup level if none is specified
bin/ftbackup
--- a/bin/ftbackup	Mon May 02 14:28:18 2011 +0200
+++ b/bin/ftbackup	Mon May 02 14:40:54 2011 +0200
@@ -26,7 +26,7 @@
 my $HOSTNAME = hostname;
 my $NOW      = time();
 
-my $opt_level     = 7;
+my $opt_level     = undef;
 my $opt_today     = strftime("%F", localtime $NOW);
 my @opt_debug     = ();
 my $opt_verbose   = 0;
@@ -589,25 +589,25 @@
 
 
     foreach my $dev (@devs) {
-        if (defined $opt_level) {
-            $dev->{level} = $opt_level;
-        }
-        elsif (!$dev->{last}
+        if (!$dev->{last}
             or not $dev->{last}[0]
             or $NOW - $dev->{last}[0] > ($cycle * 86_400))
         {
             $dev->{level} = 0;
         }
-        else { $dev->{level} = 0 }
-
-        # now we'll see if the level really saves space compared
-        # with the next lower level
-        my @estimates;
-        while ((my $l = $dev->{level}) > 0) {
-            $estimates[$l]     //= get_estimate($dev, $l);
-            $estimates[$l - 1] //= get_estimate($dev, $l - 1);
-	    last if ($estimates[$l - 1] - $estimates[$l]) / $estimates[$l - 1] >= 0.10;
-            --$dev->{level};
+	elsif (defined $opt_level) {
+	    $dev->{level} = $opt_level
+	}
+	else {
+	    my @estimates;
+	    for (my $l = 0; $l < 9; ++$l) {
+		$estimates[$l]    //= get_estimate($dev, $l);
+		$estimates[$l + 1] //= get_estimate($dev, $l + 1);
+		if (($estimates[$l] - $estimates[$l + 1]) / $estimates[$l] < 0.1) {
+		    $dev->{level} = $l;
+		    last;
+		}
+	    }
         }
 	warn "% $dev->{dev} will use level $dev->{level}\n";
     }