[nagiosplug] tests: only write cache file if it changed
Nagios Plugin Development
nagios-plugins at users.sourceforge.net
Wed Sep 18 11:30:25 CEST 2013
Module: nagiosplug
Branch: master
Commit: 843bbfb75adf888b1cb0ee3b0dc8f98d70ff6dda
Author: Sven Nierlein <Sven.Nierlein at consol.de>
Committer: Sven Nierlein <sven at consol.de>
Date: Wed Sep 18 11:03:00 2013 +0200
URL: http://nagiosplug.git.sf.net/git/gitweb.cgi?p=nagiosplug/nagiosplug;a=commit;h=843bbfb
tests: only write cache file if it changed
Tests sometimes fila when running multiple parallel tests using the
same cache file because it is written everytime a test parameter
is read. Since there is no locking, this might fail from time to time.
---
NPTest.pm | 36 +++++++++++++++++++-----------------
1 files changed, 19 insertions(+), 17 deletions(-)
diff --git a/NPTest.pm b/NPTest.pm
index 0713b5e..9b85617 100644
--- a/NPTest.pm
+++ b/NPTest.pm
@@ -422,6 +422,7 @@ sub LoadCache
{
return if exists( $CACHE{'_cache_loaded_'} );
+ my $fileContents = "";
if ( -f $CACHEFILENAME )
{
my( $fileHandle ) = new IO::File;
@@ -432,44 +433,45 @@ sub LoadCache
return;
}
- my( $fileContents ) = join( "\n", <$fileHandle> );
-
+ $fileContents = join("", <$fileHandle>);
$fileHandle->close();
+ chomp($fileContents);
my( $contentsRef ) = eval $fileContents;
%CACHE = %{$contentsRef};
}
- $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_original_cache'} = $fileContents;
}
sub SaveCache
{
delete $CACHE{'_cache_loaded_'};
+ my $oldFileContents = delete $CACHE{'_original_cache'};
- my( $fileHandle ) = new IO::File;
-
- if ( ! $fileHandle->open( "> ${CACHEFILENAME}" ) )
- {
- print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
- return;
- }
-
- my( $dataDumper ) = new Data::Dumper( [ \%CACHE ] );
-
+ my($dataDumper) = new Data::Dumper([\%CACHE]);
$dataDumper->Terse(1);
$dataDumper->Sortkeys(1);
-
my $data = $dataDumper->Dump();
$data =~ s/^\s+/ /gmx; # make sure all systems use same amount of whitespace
$data =~ s/^\s+}/}/gmx;
- print $fileHandle $data;
+ chomp($data);
- $fileHandle->close();
+ if($oldFileContents ne $data) {
+ my($fileHandle) = new IO::File;
+ if (!$fileHandle->open( "> ${CACHEFILENAME}")) {
+ print STDERR "NPTest::LoadCache() : Problem saving ${CACHEFILENAME} : $!\n";
+ return;
+ }
+ print $fileHandle $data;
+ $fileHandle->close();
+ }
- $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_cache_loaded_'} = 1;
+ $CACHE{'_original_cache'} = $data;
}
#
More information about the Commits
mailing list