[
http://issues.apache.org/jira/browse/DERBY-298?page=comments#action_12361808 ]
Suresh Thalamati commented on DERBY-298:
----------------------------------------
Øystein ,
I reviewed the latest patch, it looks good. But I could not understand why
you would need the following check ?
FileLogge.java :
+ long end = redoScan.getLogRecordEnd();
+ if (end != LogCounter.INVALID_LOG_INSTANT
If end is LogCounter.INVALID_LOG_INSTANT then logEnd is also likely to be
LogCounter.INVALID_LOG_INSTANT right ?
+ && (LogCounter.getLogFileNumber(logEnd)
+ < LogCounter.getLogFileNumber(end))) {
+ logEnd = end;
+ }
In what secnario condition will be false ? If end is
LogCounter.INVALID_LOG_INSTANT then logEnd is also likely to be
Another minor thing I notices is test files copyrigth notices have wrong file
names :
RecoveryAfterBackup.java:
Derby - Class org.apache.derbyTesting.functionTests.store.LogChecksumSetup
RecoveryAfterBackupSetup.java:
Derby - Class org.apache.derbyTesting.functionTests.store.LogChecksumSetup
Thanks
-suresh
> rollforward will not work correctly if the system happens to crash
> immediately 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: Øystein Grøvlen
> Priority: Minor
> Attachments: derby-298.diff, derby-298a.diff
>
> If the system crashes after a rollforward backup; last log file
> is empty(say log2.dat). On next crash-recovery system ignores the empty log
> file and starts writing to the previous log(say log1.dat),
> even thought there was successfule log file switch before the crash.
> The reason I belive it is done this way to avoid special
> handling of crashes during the log switch process.
> Problem is on rollfroward restore from a backup log1.dat will get
> overwritten
> from the copy in the backup, so any transaction that got added to log1.dat
> after the backup was taken will be lost.
>
> One possible solution that comes to my mind to solve this problem is
> 1) check if an empty a log file exist after a redo crash-recovery , if
> the log archive mode is enabled.
> 2) If it exists , delete and do log file switch again
>
> Repro:
> connect 'jdbc:derby:wombat;create=true';
> 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=extinout/mybackup/wombat';
> select count(*) from t1 ; -- THIS WILL GIVE INCORRECT VALUES
--
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