--- loncom/debugging_tools/db_copy.pl 2006/10/13 18:34:07 1.4 +++ loncom/debugging_tools/db_copy.pl 2012/02/22 17:06:42 1.8 @@ -8,15 +8,31 @@ use GDBM_File; use File::Find; use LONCAPA; use LONCAPA::Configuration; -use Cwd; +use Fcntl qw(:flock); my $dump_db = '/home/httpd/perl/debug/dump_db_static_32'; -my $create_db = '/home/httpd/perl/debug/create_db_dynamic'; +my $create_db = '/home/httpd/perl/debug/create_db_dynamic_64'; if (!-x $dump_db || !-x $create_db) { print("Unable to run needed helper programs\n $dump_db\n $create_db\n."); exit(-1); } + +my $return_code = system("/bin/bash -c '$create_db >& /dev/null'"); +# create_db exits on 1 if no filename to create was specified and is thus +# a successful start and stop of the program +if ($return_code == -1 + || (($return_code >> 8) != 1)) { + $create_db = '/home/httpd/perl/debug/create_db_dynamic_64_so.3'; + printf("booM %d %d!\n",$return_code,($return_code >> 8 )); + $return_code = system("/bin/bash -c '$create_db >& /dev/null'"); + if ($return_code == -1 + || (($return_code >> 8) != 1)) { + printf("booM2 %d %d!\n",$return_code,($return_code >> 8 )); + die("Unable to run need helper program create_db_dynamic_64"); + } +} + my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')}; my $do_locks = 1; @@ -46,6 +62,7 @@ sub count_db { } my $done=0; +my $skip=0; my $starttime; my $last_100_start_time; sub process_db { @@ -54,11 +71,14 @@ sub process_db { my $file = $_; my $dbref =&lock_db($file); #print("attempting $file\n"); - system("$dump_db -f $file|$create_db -f $file.new"); + system("/bin/bash -c '$dump_db -f $file|$create_db -f $file.new'"); # print("finishing $dbref\n"); rename($file,"$file.old"); rename("$file.new","$file"); &unlock_db($dbref); + } else { + #print("skip $_\n"); + $skip++; } $done++; if (!($done %100)) { @@ -66,16 +86,16 @@ sub process_db { my $took = time()-$starttime; my $togo = int(($took/$done) * ($count-$done)); my $total = $togo+$took; - my $per = $took/$done; + my $per = ($done-$skip)?$took/($done-$skip):0; my $last_per = (time()-$last_100_start_time)/100; - printf("%6d in %6d, togo %6d, overall %6d, %.4f (for one), %.4f)\n", - $done,$took,$togo,$total,$per,$last_per); + printf("%6d (%6d) in %6d, togo %6d, overall %6d, %.3f (each), %.3f\n", + $done,$skip,$took,$togo,$total,$per,$last_per); $last_100_start_time = time(); } } sub main { - my $dir = $perlvar{'lonUsersDir'}.'/temp/y/'; + my $dir = $perlvar{'lonUsersDir'}; print("Doing $dir\n"); &find({ no_chdir => 1, wanted => \&count_db, },