[ https://issues.apache.org/jira/browse/DERBY-3064?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12538513 ]
Knut Anders Hatlen commented on DERBY-3064: ------------------------------------------- > I have overcome this by doing > > failedChunk = (mesg==null) ? failedChunk : mesg; I think this would be clearer if written as if (mesg != null} { failedChunk = mesg; } Then it's clearer that nothing happens if mesg==null. > I have interrupted the log shipper thread and consequently removed > the stopShipping check from the run() method. I instead have > introduced a while(true) loop. I have however retained the > stopShipping check inorder to ensure that a forceFlush call after > stopreplication does not succeed. I don't think you can remove the stopShipping check just because the thread is interrupted. An interrupt does not stop the thread, but blocking I/O operations will fail, and calls to sleep() or wait() throw InterruptedException. As far as I can see, run() still silently ignores InterruptedException, so the loop will just continue. Anyway, I'm not sure we should rely on Thread.interrupt() to stop a thread since it is hard to predict the state of the thread after it has been interrupted. In general, I think wait()/notify() is a better mechanism than sleep()/interrupt(). > b) InterruptedExceptions are normally trapped since they occur when > some code intentionally interrupts the thread. I think the normal way to handle InterruptedException in Derby is catch (InterruptedException ie) { throw StandardException.interrupt(ie); } > I initially thought of reporting IOExceptions here, but IOExceptions > cause setupConnection to return false and a next reconnect is > attempted in half a second. Reporting this failure in log would > cause a IOException to be printed in the log every half a > second. Would'nt this amount to flooding the log? All these > IOEXceptions being registered would contain the same information > stating a socket connection exception. So I was afraid that it would > contain the same information being repeated too many times. If this is always a socket connection exception, could the catch clause be narrowed down to java.net.ConnectException instead of java.io.Exception? Also, should we give up and fail gracefully after a certain number of retries? > Implement the LogShipper that will enable the shipping of Log records from > the master to the slave > -------------------------------------------------------------------------------------------------- > > Key: DERBY-3064 > URL: https://issues.apache.org/jira/browse/DERBY-3064 > Project: Derby > Issue Type: Sub-task > Reporter: V.Narayanan > Assignee: V.Narayanan > Attachments: LogShipperImpl_v1.diff, LogShipperImpl_v1.stat, > LogShipperImpl_v2.diff, LogShipperImpl_v2.stat, LogShipperImpl_v3.diff, > LogShipperImpl_v3.stat, LogShipperImpl_v4.diff, LogShipperImpl_v4.stat, > LogShipperImpl_v5.diff, LogShipperImpl_v5.stat, > LogShipperIntegration_v1.diff, LogShipperIntegration_v1.stat, > LogShipperIntegration_v2.diff, LogShipperIntegration_v2.stat > > -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.