Many thanks for confirming this.
Andrew Lawrenson.
-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Sent: 16 September 2008 13:00
To: Derby Discussion
Subject: Re: Stopping & (Re)Starting Slave within replication
Hi Andrew,
Replication should not fail like this; it is definitely a bug. I filed a new
jira issue for it:
https://issues.apache.org/jira/browse/DERBY-3878
I think you'll have to shutdown the slave Derby instance before restarting
replication until this bug has been fixed.
Thanks for providing the necessary details.
--
Jørgen Løland
Andrew Lawrenson wrote:
> dHi,
>
> I'm using Derby replication successfully (with v 10.4.1.3, on Solaris
> x86, Java 1.5, 32 bit), but what I'm now trying to do is to automate
> synchronisation between two servers (both of which are running embedded with
> applications).
>
> One scenario I'm trying to cope with is where the master database has
> been restarted, to stop & re-synchronize the slave database.
>
> After the master has stopped, I'm successfully stopping the replication
> on the slave by passing the stopSlave=true attribute, and getting back a
> XRE42 SQL State to indicate this success.
>
> However, after this has stopped, it would appear that derby is still
> listening on the slave port (verified using netstat), so if after re-copying
> the database from the master, I try & restart the slave (using
> startSlave=true), I'm getting an exception due to the port already being in
> use:
>
>
> 2008-09-15 16:54:56,842 ERROR MYAPP.DB - Cannot start slave synchronization
> on 'MYDB'
> java.sql.SQLException: Failed to start database 'MYDB', see the next
> exception for details.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.Util.newEmbedSQLException(Unknown
> Source)
> at org.apache.derby.impl.jdbc.Util.seeNextException(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.bootDatabase(Unknown
> Source)
> at org.apache.derby.impl.jdbc.EmbedConnection.<init>(Unknown Source)
> at org.apache.derby.impl.jdbc.EmbedConnection30.<init>(Unknown Source)
> at org.apache.derby.jdbc.Driver30.getNewEmbedConnection(Unknown
> Source)
> at org.apache.derby.jdbc.InternalDriver.connect(Unknown Source)
> at org.apache.derby.jdbc.AutoloadedDriver.connect(Unknown Source)
> at java.sql.DriverManager.getConnection(DriverManager.java:525)
> at java.sql.DriverManager.getConnection(DriverManager.java:171)
> at
> com.coppereye.myapp.derby.DerbyServer.getEmbeddedConnection(DerbyServer.java:912)
> at
> com.coppereye.myapp.derby.DerbyServer.access$400(DerbyServer.java:55)
> at
> com.coppereye.myapp.derby.DerbyServer$2.run(DerbyServer.java:1327)
> Caused by: java.sql.SQLException: Could not establish a connection to the
> peer of the replicated database 'MYDB' on address 'testbox:6959'.
> at
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
> at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown
> Source)
> ... 11 more
> Caused by: ERROR XRE04: Could not establish a connection to the peer of the
> replicated database 'MYDB' on address 'testbox:6959'.
> at org.apache.derby.iapi.error.StandardException.newException(Unknown
> Source)
> at
> org.apache.derby.impl.store.replication.slave.SlaveController.setupConnection(Unknown
> Source)
> at
> org.apache.derby.impl.store.replication.slave.SlaveController.startSlave(Unknown
> Source)
> at org.apache.derby.impl.store.raw.RawStore.boot(Unknown Source)
> at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown
> Source)
> at
> org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
> at
> org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown
> Source)
> at org.apache.derby.impl.store.access.RAMAccessManager.boot(Unknown
> Source)
> at org.apache.derby.impl.services.monitor.BaseMonitor.boot(Unknown
> Source)
> at
> org.apache.derby.impl.services.monitor.TopService.bootModule(Unknown Source)
> at
> org.apache.derby.impl.services.monitor.BaseMonitor.startModule(Unknown Source)
> at
> org.apache.derby.iapi.services.monitor.Monitor.bootServiceModule(Unknown
> Source)
> at org.apache.derby.impl.db.BasicDatabase.bootStore(Unknown Source)
> at org.apache.derby.impl.db.BasicDatabase.boot(Unknown Source)
> at org.apache.derby.impl.db.SlaveDatabase.bootBasicDatabase(Unknown
> Source)
> at org.apache.derby.impl.db.SlaveDatabase.access$000(Unknown Source)
> at
> org.apache.derby.impl.db.SlaveDatabase$SlaveDatabaseBootThread.run(Unknown
> Source)
> at java.lang.Thread.run(Thread.java:595)
> Caused by: java.security.PrivilegedActionException: java.net.BindException:
> Address already in use
> at java.security.AccessController.doPrivileged(Native Method)
> at
> org.apache.derby.impl.store.replication.net.ReplicationMessageReceive.createServerSocket(Unknown
> Source)
> at
> org.apache.derby.impl.store.replication.net.ReplicationMessageReceive.initConnection(Unknown
> Source)
> ... 18 more
> Caused by: java.net.BindException: Address already in use
> at java.net.PlainSocketImpl.socketBind(Native Method)
> at java.net.PlainSocketImpl.bind(PlainSocketImpl.java:359)
> at java.net.ServerSocket.bind(ServerSocket.java:319)
> at java.net.ServerSocket.<init>(ServerSocket.java:185)
> at
> javax.net.DefaultServerSocketFactory.createServerSocket(ServerSocketFactory.java:169)
> at
> org.apache.derby.impl.store.replication.net.ReplicationMessageReceive$2.run(Unknown
> Source)
> ... 21 more
>
>
> Is this something that ought to work? - or in this scenario would I need to
> restart derby completely?
>
>
> many thanks in advance for any advice.
>
> Andrew Lawrenson
>
>