version 1.540, 2004/09/09 08:26:46
|
version 1.541, 2004/09/15 20:08:34
|
Line 821 sub getsection {
|
Line 821 sub getsection {
|
} |
} |
|
|
|
|
my $disk_caching_disabled=1; |
my $disk_caching_disabled=0; |
|
|
sub devalidate_cache { |
sub devalidate_cache { |
my ($cache,$id,$name) = @_; |
my ($cache,$id,$name) = @_; |
delete $$cache{$id.'.time'}; |
delete $$cache{$id.'.time'}; |
delete $$cache{$id}; |
delete $$cache{$id}; |
if ($disk_caching_disabled) { return; } |
if (1 || $disk_caching_disabled) { return; } |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
open(DB,"$filename.lock"); |
if (!-e $filename) { return; } |
|
open(DB,">$filename.lock"); |
flock(DB,LOCK_EX); |
flock(DB,LOCK_EX); |
my %hash; |
my %hash; |
if (tie(%hash,'GDBM_File',$filename,&GDBM_WRCREAT(),0640)) { |
if (tie(%hash,'GDBM_File',$filename,&GDBM_WRCREAT(),0640)) { |
Line 881 sub do_cache {
|
Line 882 sub do_cache {
|
$$cache{$id}; |
$$cache{$id}; |
} |
} |
|
|
|
my %do_save_item; |
|
my %do_save; |
sub save_cache_item { |
sub save_cache_item { |
my ($cache,$name,$id)=@_; |
my ($cache,$name,$id)=@_; |
if ($disk_caching_disabled) { return; } |
if ($disk_caching_disabled) { return; } |
my $starttime=&Time::HiRes::time(); |
$do_save{$name}=$cache; |
# &logthis("Saving :$name:$id"); |
if (!exists($do_save_item{$name})) { $do_save_item{$name}={} } |
my %hash; |
$do_save_item{$name}->{$id}=1; |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
return; |
open(DB,"$filename.lock"); |
} |
flock(DB,LOCK_EX); |
|
if (tie(%hash,'GDBM_File',$filename,&GDBM_WRCREAT(),0640)) { |
sub save_cache { |
eval <<'EVALBLOCK'; |
if ($disk_caching_disabled) { return; } |
$hash{$id.'.time'}=$$cache{$id.'.time'}; |
my ($cache,$name,$id); |
$hash{$id}=freeze({'item'=>$$cache{$id}}); |
foreach $name (keys(%do_save)) { |
|
$cache=$do_save{$name}; |
|
|
|
my $starttime=&Time::HiRes::time(); |
|
&logthis("Saving :$name:"); |
|
my %hash; |
|
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
|
open(DB,">$filename.lock"); |
|
flock(DB,LOCK_EX); |
|
if (tie(%hash,'GDBM_File',$filename,&GDBM_WRCREAT(),0640)) { |
|
foreach $id (keys(%{ $do_save_item{$name} })) { |
|
eval <<'EVALBLOCK'; |
|
$hash{$id.'.time'}=$$cache{$id.'.time'}; |
|
$hash{$id}=freeze({'item'=>$$cache{$id}}); |
EVALBLOCK |
EVALBLOCK |
if ($@) { |
if ($@) { |
&logthis("<font color='red'>save_cache blew up :$@:$name</font>"); |
&logthis("<font color='red'>save_cache blew up :$@:$name</font>"); |
unlink($filename); |
unlink($filename); |
} |
last; |
} else { |
} |
if (-e $filename) { |
} |
&logthis("Unable to tie hash (save cache item): $name ($!)"); |
} else { |
unlink($filename); |
if (-e $filename) { |
|
&logthis("Unable to tie hash (save cache): $name ($!)"); |
|
unlink($filename); |
|
} |
} |
} |
|
untie(%hash); |
|
flock(DB,LOCK_UN); |
|
close(DB); |
|
&logthis("save_cache $name took ".(&Time::HiRes::time()-$starttime)); |
} |
} |
untie(%hash); |
undef(%do_save); |
flock(DB,LOCK_UN); |
undef(%do_save_item); |
close(DB); |
|
# &logthis("save_cache_item $name took ".(&Time::HiRes::time()-$starttime)); |
|
} |
} |
|
|
sub load_cache_item { |
sub load_cache_item { |
Line 918 sub load_cache_item {
|
Line 940 sub load_cache_item {
|
# &logthis("Before Loading $name for $id size is ".scalar(%$cache)); |
# &logthis("Before Loading $name for $id size is ".scalar(%$cache)); |
my %hash; |
my %hash; |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
my $filename=$perlvar{'lonDaemons'}.'/tmp/lonnet_internal_cache_'.$name.".db"; |
open(DB,"$filename.lock"); |
if (!-e $filename) { return; } |
|
open(DB,">$filename.lock"); |
flock(DB,LOCK_SH); |
flock(DB,LOCK_SH); |
if (tie(%hash,'GDBM_File',$filename,&GDBM_READER(),0640)) { |
if (tie(%hash,'GDBM_File',$filename,&GDBM_READER(),0640)) { |
eval <<'EVALBLOCK'; |
eval <<'EVALBLOCK'; |