Author: davsclaus Date: Mon Nov 16 16:50:08 2009 New Revision: 880842 URL: http://svn.apache.org/viewvc?rev=880842&view=rev Log: CAMEL-2165: Improved preWriteCheck on ftp to send a NOOP to check if connection works. And forces a reconnect if it dont.
Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileOperations.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java?rev=880842&r1=880841&r2=880842&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/FtpOperations.java Mon Nov 16 16:50:08 2009 @@ -424,6 +424,14 @@ } } + public boolean sendNoop() throws GenericFileOperationFailedException { + try { + return client.sendNoOp(); + } catch (IOException e) { + throw new GenericFileOperationFailedException(client.getReplyCode(), client.getReplyString(), e.getMessage(), e); + } + } + private boolean buildDirectoryChunks(String dirName) throws IOException { final StringBuilder sb = new StringBuilder(dirName.length()); final String[] dirs = dirName.split("/|\\\\"); Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java?rev=880842&r1=880841&r2=880842&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileConsumer.java Mon Nov 16 16:50:08 2009 @@ -33,6 +33,10 @@ this.setPollStrategy(new RemoteFilePollingConsumerPollStrategy()); } + protected RemoteFileOperations getOperations() { + return (RemoteFileOperations) operations; + } + protected boolean prePollCheck() throws Exception { connectIfNecessary(); if (!loggedIn) { @@ -52,12 +56,12 @@ protected void disconnect() { // disconnect when stopping try { - if (((RemoteFileOperations) operations).isConnected()) { + if (getOperations().isConnected()) { loggedIn = false; if (log.isDebugEnabled()) { log.debug("Disconnecting from: " + remoteServer()); } - ((RemoteFileOperations) operations).disconnect(); + getOperations().disconnect(); } } catch (GenericFileOperationFailedException e) { // ignore just log a warning @@ -66,11 +70,11 @@ } protected void connectIfNecessary() throws IOException { - if (!((RemoteFileOperations) operations).isConnected() || !loggedIn) { + if (!loggedIn) { if (log.isDebugEnabled()) { log.debug("Not connected/logged in, connecting to: " + remoteServer()); } - loggedIn = ((RemoteFileOperations) operations).connect((RemoteFileConfiguration) endpoint.getConfiguration()); + loggedIn = getOperations().connect((RemoteFileConfiguration) endpoint.getConfiguration()); if (loggedIn) { log.info("Connected and logged in to: " + remoteServer()); } Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileOperations.java?rev=880842&r1=880841&r2=880842&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileOperations.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileOperations.java Mon Nov 16 16:50:08 2009 @@ -19,7 +19,6 @@ import org.apache.camel.component.file.GenericFileOperationFailedException; import org.apache.camel.component.file.GenericFileOperations; - /** * Remote file operations based on some backing framework */ @@ -28,7 +27,7 @@ /** * Connects to the remote server * - * @param configuration configuraiton + * @param configuration configuration * @return true if connected * @throws GenericFileOperationFailedException can be thrown */ @@ -43,10 +42,18 @@ boolean isConnected() throws GenericFileOperationFailedException; /** - * Discconects from the remote server + * Disconnects from the remote server * * @throws GenericFileOperationFailedException can be thrown */ void disconnect() throws GenericFileOperationFailedException; + /** + * Sends a noop command to the remote server + * + * @throws GenericFileOperationFailedException can be thrown + * @return <tt>true</tt> if the noop was a success, <tt>false</tt> otherwise + */ + boolean sendNoop() throws GenericFileOperationFailedException; + } Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java?rev=880842&r1=880841&r2=880842&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/RemoteFileProducer.java Mon Nov 16 16:50:08 2009 @@ -90,6 +90,33 @@ @Override protected void preWriteCheck() throws Exception { + // before writing send a noop to see if the connection is alive and works + boolean noop = false; + try { + connectIfNecessary(); + if (loggedIn) { + noop = getOperations().sendNoop(); + } + } catch (Exception e) { + log.error(e); + noop = false; + } + if (log.isDebugEnabled()) { + log.debug("preWriteCheck send noop success: " + noop); + } + + // if not alive then force a disconnect so we reconnect again + if (!noop) { + try { + if (log.isDebugEnabled()) { + log.debug("preWriteCheck forcing a disconnect as noop failed"); + } + disconnect(); + } catch (IOException e) { + // ignore for now + } + } + connectIfNecessary(); if (!loggedIn) { // must be logged in to be able to upload the file @@ -117,7 +144,7 @@ } protected void connectIfNecessary() throws IOException { - if (!(getOperations()).isConnected() || !loggedIn) { + if (!loggedIn) { if (log.isDebugEnabled()) { log.debug("Not already connected/logged in. Connecting to: " + getEndpoint()); } Modified: camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java?rev=880842&r1=880841&r2=880842&view=diff ============================================================================== --- camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java (original) +++ camel/trunk/components/camel-ftp/src/main/java/org/apache/camel/component/file/remote/SftpOperations.java Mon Nov 16 16:50:08 2009 @@ -461,6 +461,10 @@ } catch (SftpException e) { throw new GenericFileOperationFailedException(e.getMessage(), e); } - } + } + public boolean sendNoop() throws GenericFileOperationFailedException { + // is not implemented + return true; + } } \ No newline at end of file