db-derby-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mi...@apache.org
Subject svn commit: r430396 - /db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
Date Thu, 10 Aug 2006 14:38:34 GMT
Author: mikem
Date: Thu Aug 10 07:38:33 2006
New Revision: 430396

URL: http://svn.apache.org/viewvc?rev=430396&view=rev

This problem was caused because the backup of the database did not get all
the log records describing the changes to the data files that it got.
The problem is that the online backup reads page "through" the cache, rather 
than from disk so it is picking up "dirty" pages where the associated log 
records have not yet been flushed to disk. 
The backup of the log file on the other hand goes directly from disk and thus 
sometimes in this concurrent test misses some of the log records in the 
unflushed part of the log file. The fix is to flush the log file up to the
end at the end of the backup process after the data files have been copied
and before we copy the last of the log files to the backup.


Modified: db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java
URL: http://svn.apache.org/viewvc/db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java?rev=430396&r1=430395&r2=430396&view=diff
--- db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java (original)
+++ db/derby/code/trunk/java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java Thu
Aug 10 07:38:33 2006
@@ -4713,6 +4713,15 @@
 	public void endLogBackup(File toDir) throws StandardException
 		long lastLogFileToBackup;
+        // Make sure all log records are synced to disk.  The online backup
+        // copied data "through" the cache, so may have picked up dirty pages
+        // which have not yet synced the associated log records to disk. 
+        // Without this force, the backup may end up with page versions 
+        // in the backup without their associated log records.
+        flush(logFileNumber, endPosition);
 		if (logArchived)
 			// when the log is being archived for roll-forward recovery

View raw message