[
https://issues.apache.org/jira/browse/DERBY-3382?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12578502#action_12578502
]
Øystein Grøvlen commented on DERBY-3382:
----------------------------------------
Thanks for the test, Jørgen. Test case looks good, but I have a few
comments on the modifications to the framework:
1. I suggest renaming slaveConnException to startSlaveException to
indicate that it is specific to startSlave command.
2. slaveConnException should be set to null before starting the slave
in order to make it possible to start the slave more than once in
the same test.
3. Are you sure it is a good idea to use the connection obtained when
starting the master for further operations on the master. Would it
not be more general if it was a separate connection? Anyhow, if
ReplicationRun is to provide the capability to use an existing
connection, I think getMasterConnection needs to be able to open a
new connection should no one exist. (An alternative would be to
see if it was possible to let ReplicationRun extend
BaseJDBCTestCase and use its connection handling for connecting to
the master database.)
4. Why do you need to copy the code from
BaseJDBCTestCase#assertSQLState? That method is static so you
should be able to use it as it is.
5. assertSQLStateSlaveConn: Javadoc should state that it will wait for
some time for start slave command to complete. Instead of "Slave
connection attempt hangs ...", I would prefer "Attempt to start
slave hangs ...", or something like that.
6. If I run the replication suite with this patch from an empty
directory, it fails. This does not happen without the patch:
> java junit.textui.TestRunner -noloading
> org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationSuite
> ..java.io.IOException: Cannot run program
> "/usr/local/java/jdk1.6.0_01/jre/lib/../bin/java" (in directory
> "/export/tmp/oysteing/derby-repl/testing_repl/export/tmp/oysteing/derby-repl/testing_repl/db_master"):
> error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun$4.run(ReplicationRun.java:2250)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:53)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more
java.lang.Exception: DRDA_NoIO.S:Could not connect to Derby Network Server on
host 127.0.0.1, port 1527: Connection refused
at
org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(NetworkServerControlImpl.java:3173)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(NetworkServerControlImpl.java:1855)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.setUpSocket(NetworkServerControlImpl.java:2497)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.ping(NetworkServerControlImpl.java:1138)
at
org.apache.derby.drda.NetworkServerControl.ping(NetworkServerControl.java:395)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.ping(ReplicationRun.java:2600)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.pingServer(ReplicationRun.java:2587)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.startServer(ReplicationRun.java:2264)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun_Local.testLogFilesSynched(ReplicationRun_Local.java:182)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at
org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:101)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.extensions.TestSetup.run(TestSetup.java:25)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.textui.TestRunner.doRun(TestRunner.java:121)
at junit.textui.TestRunner.start(TestRunner.java:185)
at junit.textui.TestRunner.main(TestRunner.java:143)
java.io.IOException: Cannot run program
"/usr/local/java/jdk1.6.0_01/jre/lib/../bin/java" (in directory
"/export/tmp/oysteing/derby-repl/testing_repl/export/tmp/oysteing/derby-repl/testing_repl/db_slave"):
error=2, No such file or directory at
java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
at java.lang.Runtime.exec(Runtime.java:593)
at java.lang.Runtime.exec(Runtime.java:431)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun$4.run(ReplicationRun.java:2250)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.io.IOException: error=2, No such file or directory
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:53)
at java.lang.ProcessImpl.start(ProcessImpl.java:65)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
... 4 more
java.lang.Exception: DRDA_NoIO.S:Could not connect to Derby Network Server on
host 127.0.0.1, port 4527: Connection refused
at
org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessageWork(NetworkServerControlImpl.java:3173)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.consolePropertyMessage(NetworkServerControlImpl.java:1855)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.setUpSocket(NetworkServerControlImpl.java:2497)
at
org.apache.derby.impl.drda.NetworkServerControlImpl.ping(NetworkServerControlImpl.java:1138)
at
org.apache.derby.drda.NetworkServerControl.ping(NetworkServerControl.java:395)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.ping(ReplicationRun.java:2600)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.pingServer(ReplicationRun.java:2587)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun.startServer(ReplicationRun.java:2264)
at
org.apache.derbyTesting.functionTests.tests.replicationTests.ReplicationRun_Local.testLogFilesSynched(ReplicationRun_Local.java:188)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at
org.apache.derbyTesting.junit.BaseTestCase.runBare(BaseTestCase.java:101)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.extensions.TestDecorator.basicRun(TestDecorator.java:24)
at junit.extensions.TestSetup$1.protect(TestSetup.java:21)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.extensions.TestSetup.run(TestSetup.java:25)
at junit.framework.TestSuite.runTest(TestSuite.java:230)
at junit.framework.TestSuite.run(TestSuite.java:225)
at junit.textui.TestRunner.doRun(TestRunner.java:121)
at junit.textui.TestRunner.start(TestRunner.java:185)
at junit.textui.TestRunner.main(TestRunner.java:143)
E.^C
>
> Replication: Slave must inform master if DBs are out of sync.
> -------------------------------------------------------------
>
> Key: DERBY-3382
> URL: https://issues.apache.org/jira/browse/DERBY-3382
> Project: Derby
> Issue Type: Bug
> Components: Replication
> Affects Versions: 10.4.0.0
> Reporter: Øystein Grøvlen
> Assignee: Jørgen Løland
> Fix For: 10.4.0.0
>
> Attachments: derby-3382-1a.diff, derby-3382-1a.stat,
> derby-3382-1b.diff, derby-3382-1b.stat, derby-3382-test-1a.diff,
> derby-3382-test-1a.stat
>
>
> If I copy the database to the slave before booting the master, slave will be
> out of sync with the master since new log records are created during booting.
> The slave will then stop replication, but the master will not be notified.
> If I then try to stop or failover the master the master will hang.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.