Return-Path: Delivered-To: apmail-db-derby-dev-archive@www.apache.org Received: (qmail 61188 invoked from network); 4 Jul 2005 10:26:21 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 4 Jul 2005 10:26:21 -0000 Received: (qmail 13375 invoked by uid 500); 4 Jul 2005 10:26:17 -0000 Delivered-To: apmail-db-derby-dev-archive@db.apache.org Received: (qmail 13258 invoked by uid 500); 4 Jul 2005 10:26:15 -0000 Mailing-List: contact derby-dev-help@db.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: List-Id: Reply-To: "Derby Development" Delivered-To: mailing list derby-dev@db.apache.org Received: (qmail 13229 invoked by uid 99); 4 Jul 2005 10:26:15 -0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests= X-Spam-Check-By: apache.org Received: from [192.87.106.226] (HELO ajax.apache.org) (192.87.106.226) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 04 Jul 2005 03:26:14 -0700 Received: from ajax.apache.org (ajax.apache.org [127.0.0.1]) by ajax.apache.org (Postfix) with ESMTP id BD23F15 for ; Mon, 4 Jul 2005 12:26:11 +0200 (CEST) Message-ID: <226609014.1120472771695.JavaMail.jira@ajax.apache.org> Date: Mon, 4 Jul 2005 12:26:11 +0200 (CEST) From: =?UTF-8?Q?=C3=98ystein_Gr=C3=B8vlen_=28JIRA=29?= To: derby-dev@db.apache.org Subject: [jira] Updated: (DERBY-298) rollforward will not work correctly if the system happens to crash immediately after rollforward backup. In-Reply-To: <1739641137.1116444775718.JavaMail.jira@ajax.apache.org> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N [ http://issues.apache.org/jira/browse/DERBY-298?page=3Dall ] =C3=98ystein Gr=C3=B8vlen updated DERBY-298: ---------------------------------- Attachment: derby-298.diff The attached patch fixes the bug by setting the logEnd after recovery to th= e beginning of the new empty log file instead of the end of the previous fi= le.=20 The patch contains changes to the following files: M java/engine/org/apache/derby/impl/store/raw/log/FileLogger.java - At the end of the redo scan, if the scan stopped in a file succee= ding the file of the last log record, update logEnd to this position. - Change assert to allow logEnd to be in a newer file than that of = the last log record. =20 M java/engine/org/apache/derby/impl/store/raw/log/Scan.java - Introduced new variable newFileStart which will only have a valid= LogInstant value when the scan is at the header of the file. - When a new file is entered, set newFileStart to the first possib= le LogInstant of this file (end of header). - When a log record is encountered, set newFileStart to INVALID_LOG= _INSTANT. - Changed getLogRecordEnd() to return newFileStart if that is valid= (i.e., scan is at the start of a file) - Removed comment about not starting to write to the new empty log = file, since that is not true anymore. A java/testing/org/apache/derbyTesting/functionTests/tests/store/Recov= eryAfterBackup_app.properties - Test properties M java/testing/org/apache/derbyTesting/functionTests/tests/store/copyf= iles.ant - Added new property files A java/testing/org/apache/derbyTesting/functionTests/tests/store/Recov= eryAfterBackupSetup_app.properties - Test properties.=20 - useextdirs=3Dtrue needed so the backup is placed somewhere the ne= xt test can find it. A java/testing/org/apache/derbyTesting/functionTests/tests/store/Recov= eryAfterBackup.java - Test that is supposed to be run after RecoveryAfterBackupSetup.ja= va. - Does recovery, updates the database, shutdowns the database, and = does roll-forward restore. - Checks that updates made after recovery is reflected in the datab= ase after roll-forward restore. A java/testing/org/apache/derbyTesting/functionTests/tests/store/Recov= eryAfterBackupSetup.java - Test that does the preparation for the RecoveryAfterBackup test. - Inserts a few records, makes a backup, and stops without shuttin= g down. M java/testing/org/apache/derbyTesting/functionTests/harness/RunTest.j= ava - For tests where the database is not deleted at the end of the tes= t, do not delete the external directories either. - This is necessary to be able to access the backup in suceeding te= sts. A java/testing/org/apache/derbyTesting/functionTests/master/RecoveryAf= terBackupSetup.out - Test output A java/testing/org/apache/derbyTesting/functionTests/master/RecoveryAf= terBackup.out - Test output MM java/testing/org/apache/derbyTesting/functionTests/suites/storerecov= ery.runall - Added tests to storerecovery suite. - Changed property eol-style. > rollforward will not work correctly if the system happens to crash immed= iately after rollforward backup. > -------------------------------------------------------------------------= -------------------------------- > > Key: DERBY-298 > URL: http://issues.apache.org/jira/browse/DERBY-298 > Project: Derby > Type: Bug > Components: Store > Versions: 10.0.2.1 > Reporter: Suresh Thalamati > Assignee: =C3=98ystein Gr=C3=B8vlen > Priority: Minor > Attachments: derby-298.diff > > If the system crashes after a rollforward backup; last log file=20 > is empty(say log2.dat). On next crash-recovery system ignores the empty = log=20 > file and starts writing to the previous log(say log1.dat), =20 > even thought there was successfule log file switch before the crash. > The reason I belive it is done this way to avoid special=20 > handling of crashes during the log switch process.=20 > Problem is on rollfroward restore from a backup log1.dat will get overwr= itten=20 > from the copy in the backup, so any transaction that got added to log1.da= t > after the backup was taken will be lost.=20 > =20 > One possible solution that comes to my mind to solve this problem is=20 > 1) check if an empty a log file exist after a redo crash-recovery , if= =20 > the log archive mode is enabled. > 2) If it exists , delete and do log file switch again=20 > =20 > Repro: > connect 'jdbc:derby:wombat;create=3Dtrue'; > create table t1(a int ) ; > insert into t1 values(1) ; > insert into t1 values(2) ; > call SYSCS_UTIL.SYSCS_BACKUP_DATABASE_AND_ENABLE_LOG_ARCHIVE_MODE( > 'extinout/mybackup', 0); > --crash (NO LOG RECORDS WENT IN AFTER THE BACKUP). > connect 'jdbc:derby:wombat'; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > insert into t1 select a*2 from t1 ; > select count(*) from t1 ; > --exit from jvm and restore from backup > connect > 'jdbc:derby:wombat;rollForwardRecoveryFrom=3Dextinout/mybackup/wombat'; > select count(*) from t1 ; -- THIS WILL GIVE INCORRECT VALUES --=20 This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira