[ 
https://issues.apache.org/jira/browse/DERBY-2921?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12518573
 ] 

Rick Hillegas commented on DERBY-2921:
--------------------------------------

Thanks for looking into this issue, Narayanan. Some more discussion follows.

The machine issue has to do with the machine that compiles the Derby release, 
not the machine which runs Derby in production. The serialVersionUUID can 
change from release to release even if there are no changes to replication. 
This depends on who steps up to be release manager and what environment they 
use to build the release. Of course, hard-coding the serialVersionUUID patches 
around this problem.

However, hard-coding the serialVersionUUID will not solve the larger issue of 
how replication will behave in a mixed-release environment. Between releases, 
we may need to make changes to the structure of the ReplicationMessage or the 
log record. In my experience, version upgrade needs to be designed into the 
first release of a feature. It is generally a disaster when you try to retrofit 
upgrade into version 2 of a product.

But there are much larger issues here than serialization. For the sake of 
framing this issue, I introduce the following definition:

ReplicationClosure -- This is the  set of all Derby instances which are linked 
by replication. You compute the ReplicationClosure by starting with one of the 
systems, then add all systems that it replicates to and from. Then you repeat 
for each of those added systems, etc..

1) Are we requiring that all Derby instances in a ReplicationClosure be at the 
same rev level?

2) If not, what happens when one system in the ReplicationClosure is upgraded 
to a new rev of Derby independently of the others?

3) On the other hand, if the answer to (1) is "yes", then what is our plan for 
propagating Derby (and application) upgrades across the ReplicationClosure?

Consider the following problem: A 10.5 master replicates to a 10.5 slave. Later 
on, the 10.5 master is hard-upgraded to 10.6. Quite likely, hard-upgrade will 
do transactional work which must be replayed at the slave. But now, what is the 
state of the slave? It has a 10.5 version of Derby on its classpath, but the 
actual tables think they are at rev level 10.6. Fail-over is not going to work 
well.

I suspect that where you want to end up is that all systems in the 
ReplicationClosure must be at the same Derby rev level. You need to have some 
plan for propagating new Derby releases across the ReplicationClosure. Maybe 
the answer is this: Replication fails if the master and slave are at different 
Derby rev levels and it is the System Administrator's responsibility to upgrade 
all Derby installations in the ReplicationClosure at the same time. The 
functional spec needs to spell out what the behavior is. Then I can reason 
about whether this patch fits into the spec'd model.

Thanks.



> Replication: Add a network service that connects the master and slave Derby 
> instances
> -------------------------------------------------------------------------------------
>
>                 Key: DERBY-2921
>                 URL: https://issues.apache.org/jira/browse/DERBY-2921
>             Project: Derby
>          Issue Type: Sub-task
>          Components: Services
>    Affects Versions: 10.4.0.0
>            Reporter: Jørgen Løland
>            Assignee: V.Narayanan
>         Attachments: Replication_Network_v1.diff, Replication_Network_v1.stat
>
>
> A network connection is required between the master and slave Derby instances 
> of a replicated database. The connection will be used to send many kinds of 
> messages, including:
> * log records
> * the database (when replication is started)
> * master -> slave commands (like "stop replication")

-- 
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