]> sourceware.org Git - lvm2.git/commitdiff
test: Use append for journal maintenance instead of rename.
authorPetr Rockai <prockai@redhat.com>
Sat, 28 Jun 2014 09:15:13 +0000 (11:15 +0200)
committerPetr Rockai <prockai@redhat.com>
Thu, 5 Feb 2015 12:47:18 +0000 (13:47 +0100)
test/lib/journal.h
test/lib/runner.cpp

index 020afe3c46d0be7503e3832d4c847d35bf0187b5..4335f71430106adc0fa80aca3e44b88370454058 100644 (file)
@@ -61,9 +61,21 @@ struct Journal {
        }
 
        typedef std::map< std::string, R > Status;
-       Status status;
+       Status status, written;
 
-       std::string location_tmp, location;
+       std::string location, list;
+
+       void append( std::string path ) {
+               std::ofstream of( path.c_str(), std::fstream::app );
+               Status::iterator writ;
+               for ( Status::iterator i = status.begin(); i != status.end(); ++i ) {
+                       writ = written.find( i->first );
+                       if ( writ == written.end() || writ->second != i->second )
+                               of << i->first << " " << i->second << std::endl;
+               }
+               written = status;
+               of.close();
+       }
 
        void write( std::string path ) {
                std::ofstream of( path.c_str() );
@@ -73,9 +85,10 @@ struct Journal {
        }
 
        void sync() {
-               write( location_tmp );
-               fsync_name( location_tmp );
-               rename( location_tmp.c_str(), location.c_str() );
+               append( location );
+               fsync_name( location );
+               write ( list );
+               fsync_name( list );
        }
 
        void started( std::string n ) {
@@ -122,20 +135,11 @@ struct Journal {
                std::copy( It( ifs ), It(), std::inserter( status, status.begin() ) );
        }
 
-       void read() {
-               struct stat64 stat;
-               if ( ::stat64( location.c_str(), &stat ) == 0 )
-                       read( location );
-               /* on CIFS, rename might fail halfway through, with journal
-                * already gone but journal.tmp not yet replacing it... in that
-                * case, pick up journal.tmp */
-               else if ( ::stat64( location_tmp.c_str(), &stat ) == 0 )
-                       read( location_tmp );
-       }
+       void read() { read( location ); }
 
        Journal( std::string dir )
                : location( dir + "/journal" ),
-                 location_tmp( dir + "/journal.tmp" )
+                 list( dir + "/list" )
        {}
 };
 
index f4da315fde60ddbd899aa5a37e3d9c3ed13f7d4e..027f216e708138851e75b249aaad6a6ce7469420 100644 (file)
@@ -382,6 +382,8 @@ struct Main {
 
                if ( options.cont )
                        journal.read();
+               else
+                       ::unlink( journal.location.c_str() );
        }
 
        void run() {
@@ -406,8 +408,6 @@ struct Main {
                }
 
                journal.banner();
-               journal.write( options.outdir + "/list" );
-               fsync_name( options.outdir + "/list" );
                if ( die || fatal_signal )
                        exit( 1 );
        }
This page took 0.040365 seconds and 5 git commands to generate.