[ 
https://issues.apache.org/jira/browse/DERBY-2977?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jørgen Løland updated DERBY-2977:
---------------------------------

    Attachment: repli_logbuffer_v2.diff
                repli_logbuffer_v2.stat

Version 2 of the proof of concept code showed a problem with the way log is 
appended to the repliation buffer. Currently, LogToFile#appendLogRecord is used 
to write log to the replication master log buffer. However, the LogAccessFile 
class that wraps write operations to log file also write checksums. We need 
these checksums at the slave because without them, the log instants on the 
slave and master will differ, in turn making recovery impossible (undo 
operations refer to a specific instant, which will not be correct).

The attached patch, repli_logbuffer_v2.*, changes this erroneous behavior. With 
this patch, log is appended to the repliation log buffer in LogAccessFile, not 
LogToFile like now. The patch modifies the following files:

M      
java/engine/org/apache/derby/impl/services/replication/buffer/LogBufferElement.java
M      
java/engine/org/apache/derby/impl/services/replication/buffer/ReplicationLogBuffer.java

The buffer now accepts chunks of log records from LogAccessFile#writeToLog 
(i.e., appended to replication buffer in the same method that writes the log to 
disk) instead of single log records from LogToFile#appendLogRecord

M      
java/engine/org/apache/derby/impl/services/replication/slave/ReplicationLogScan.java

Modified the slave-side log parser to read the new chunk of log record format

M      
java/engine/org/apache/derby/impl/services/replication/master/MasterController.java
M      
java/engine/org/apache/derby/iapi/services/replication/master/MasterFactory.java

Modified appendLog signature to accept log from LogAccessFile instead of from 
LogToFile

M      java/engine/org/apache/derby/impl/store/raw/log/LogAccessFile.java

Can be set inReplicationMasterMode, in which log is appended to MasterFactory 

M      java/engine/org/apache/derby/impl/store/raw/log/LogToFile.java

Removed the code that appends log to replication log buffer, and tells 
LogAccessFile to go into replication master mode when needed.

Allsuites and derbyall completed without error

> Replication: Add a ReplicationMaster controller that will manage replication 
> on the master side
> -----------------------------------------------------------------------------------------------
>
>                 Key: DERBY-2977
>                 URL: https://issues.apache.org/jira/browse/DERBY-2977
>             Project: Derby
>          Issue Type: Sub-task
>          Components: Services
>    Affects Versions: 10.4.0.0
>            Reporter: Jørgen Løland
>            Assignee: Jørgen Løland
>         Attachments: derby_2977_1.diff, derby_2977_1.stat, 
> derby_2977_1b.diff, derby_2977_1b.stat, derby_2977_1c.diff, 
> derby_2977_1c.stat, repli_logbuffer_v2.diff, repli_logbuffer_v2.stat
>
>
> The replication master role includes many tasks:
> * set up a network connection to the slave
> * sending the database to the slave before starting replication
> * make sure that log records are appended to the network buffer, and that the 
> log is later sent to the slave
> * etc
> This issue is for adding a controller that will start/stop/initiate all 
> services needed for the replication master role.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to