]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
adding
authorwessels <>
Sat, 12 Oct 1996 01:53:09 +0000 (01:53 +0000)
committerwessels <>
Sat, 12 Oct 1996 01:53:09 +0000 (01:53 +0000)
scripts/upgrade-1.0-store.pl [new file with mode: 0755]

diff --git a/scripts/upgrade-1.0-store.pl b/scripts/upgrade-1.0-store.pl
new file mode 100755 (executable)
index 0000000..7682ab3
--- /dev/null
@@ -0,0 +1,143 @@
+#!/usr/local/bin/perl
+
+# $Id: upgrade-1.0-store.pl,v 1.1 1996/10/11 19:53:09 wessels Exp $
+
+select(STDERR); $|=1;
+select(STDOUT); $|=1;
+
+$USAGE="$0: swaplog cachedir1 cachedir2 ...\n";
+
+$dry_run = 0;
+
+$swaplog = shift || die $USAGE;
+(@cachedirs = @ARGV) || die $USAGE;
+$ncache_dirs = $#cachedirs + 1;
+
+$OLD_SWAP_DIRECTORIES = 100;
+$NEW_SWAP_DIRECTORIES_L1 = 16;
+$NEW_SWAP_DIRECTORIES_L2 = 256;
+
+$EEXIST = 17;          # check your /usr/include/errno.h
+
+print <<EOF;
+This script converts Squid 1.0 cache directories to the Squid 1.1
+format.  The first step is to create the new directory structure.
+The second step is to link the swapfiles from the old directories
+into the new directories.  After this script runs you must manually
+remove the old directories.
+
+Filesystem operations are slow, so this script may take a while.
+Your cache should NOT be running while this script runs.
+
+Are you ready to proceed?
+EOF
+
+$ans = <STDIN>;
+
+exit(1) unless ($ans =~ /^y$/ || $ans =~ /^yes$/);
+
+# make new directories
+foreach $c (@cachedirs) {
+       $cn = "$c.new";
+       &my_mkdir ($cn);
+       foreach $d1 (0..($NEW_SWAP_DIRECTORIES_L1-1)) {
+               $p1 = sprintf "$cn/%02X", $d1;
+               &my_mkdir ($p1);
+               foreach $d2 (0..($NEW_SWAP_DIRECTORIES_L2-1)) {
+                       $p2 = sprintf "$p1/%02X", $d2;
+                       &my_mkdir ($p2);
+               }
+       }
+}
+
+$newlog = "$swaplog.1.1";
+open (newlog, ">$newlog") || die "$newlog: $!\n";
+select(newlog); $|=1; select(STDOUT);
+open (swaplog) || die "$swaplog: $!\n";
+$count = 0;
+while (<swaplog>) {
+       chop;
+       ($file,$url,$expires,$timestamp,$size) = split;
+       @F = split('/', $file);
+       $oldfileno = pop @F;
+       $oldpath = &old_fileno_to_path($oldfileno);
+       unless (@S = stat($oldpath)) {
+               print "$oldpath: $!\n";
+               next;
+       }
+       unless ($S[7] == $size) {
+               print "$oldpath: Wrong Size.\n";
+               next;
+       }
+       $newpath = &new_fileno_to_path($oldfileno);
+       next unless &my_link($oldpath,$newpath);
+       printf newlog "%08x %08x %08x %08x %9d %s\n",
+               $oldfileno,
+               $timestamp,
+               $expires,
+               $timestamp,     # lastmod
+               $size,
+               $url;
+       $count++;
+}
+
+
+print <<EOF;
+Done converting.
+
+$count files were linked to the new directories.
+
+At this point you need to manually run these commands:
+EOF
+
+foreach $c (@cachedirs) {
+    print "    /bin/mv $c $c.old; /bin/mv $c.new $c\n";
+}
+
+print <<EOF;
+    /bin/mv $swaplog $swaplog.old; /bin/mv $newlog $swaplog\n";
+
+And then start up Squid version 1.1.
+EOF
+exit(0);
+
+
+
+
+
+sub old_fileno_to_path {
+       local($fn) = @_;
+       sprintf "%s/%02d/%d",
+               $cachedirs[$fn % $ncache_dirs],
+               ($fn / $ncache_dirs) % $OLD_SWAP_DIRECTORIES,
+               $fn;
+}
+
+sub new_fileno_to_path {
+       local($fn) = @_;
+       sprintf "%s.new/%02X/%02X/%08X",
+               $cachedirs[$fn % $ncache_dirs],
+               ($fn / $ncache_dirs) % $NEW_SWAP_DIRECTORIES_L1,
+               ($fn / $ncache_dirs) / $NEW_SWAP_DIRECTORIES_L1 % $NEW_SWAP_DIRECTORIES_L2,
+               $fn;
+}
+
+sub my_mkdir {
+       local($p) = @_;
+       print "Making $p...\n";
+       return if ($dry_run);
+       unless (mkdir ($p, 0755)) {
+               return 1 if ($! == $EEXIST);
+               die "$p: $!\n";
+       }
+}
+
+sub my_link {
+       local($f,$t) = @_;
+       print "$f --> $t\n";
+       return 1 if ($dry_run);
+       unlink($t);
+       $rc = link ($f,$t);
+       warn "$t: $!\n" unless ($rc);
+       $rc;
+}