Bug 876337 - Please fix FileUtils.move (Code enclosed)
Summary: Please fix FileUtils.move (Code enclosed)
Keywords:
Status: ON_QA
Alias: None
Product: JBoss Enterprise SOA Platform 5
Classification: JBoss
Component: JBossESB
Version: 5.3.0 GA
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
: ---
Assignee: tcunning
QA Contact:
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2012-11-13 21:20 UTC by Rick Wagner
Modified: 2018-11-29 21:02 UTC (History)
3 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
FileUtil.renameTo(..) returns true even if it fails to rename the file. As a result, when a file that is locked by another process is picked up by the SOA platform, and the rename fails, an error is logged even though the file is processed successfully on the next attempt (when the lock is gone).
Clone Of:
Environment:
Last Closed:
Type: Bug
Embargoed:


Attachments (Terms of Use)
Includes fixes. (8.88 KB, application/octet-stream)
2012-11-14 15:55 UTC, Rick Wagner
no flags Details


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker JBESB-3882 0 Major Closed FileUtils.renameTo should return false 2018-03-26 14:47:40 UTC

Description Rick Wagner 2012-11-13 21:20:11 UTC
when a file that is locked by another process is picked up by the SOA platform, and the rename fails, we get a error logg eventhough the file is processed successfully on the next attempt (when the lock is gone).
----
2012-05-31 08:43:56,694 DEBUG [org.jboss.soa.esb.util.FileUtil] (ESBScheduler:AnalytixImport.esb_Worker-0)   Unable to perform local rename of file 'c:\ipl\itg_kemlabsvar\inbox\D5V843AV.xml' to 'c:\ipl\itg_kemlabsvar\inbox\9f5d7a61-a564-483a-bea6-054331c640d0.D5V843AV.xml.9f5d7a61-a564-483a-bea6-054331c640d0'. Unable to move file.
2012-05-31 08:43:56,695 ERROR [org.jboss.soa.esb.listeners.gateway.AbstractFileGateway] (ESBScheduler:AnalytixImport.esb_Worker-0)   Composer <org.jboss.soa.esb.listeners.gateway.LocalFileMessageComposer> Failed.
org.jboss.soa.esb.listeners.message.MessageDeliverException: Invalid File payload.  File 'c:\ipl\itg_kemlabsvar\inbox\D5V843AV.xml.lck' doesn't exist.
----

The call chain here seems to be 
1) AbstractFileGateway.onSchedule()
2) AbstractFileGateway.setFileWorking(fileIn);
3) FileGatewayListener.renameFile(from,to);
4) FileUtil.renameTo(from, to)

The problem is that FileUtil.renameTo(..) returns true even if it fails to rename the file (in the step where it renames a localfile to a filename that includes the UUID).
This in turn makes setFileWorking(..) return a non-null value and AbstractFileGateway will go ahead and try to process the non-existing file.

Comment 1 Rick Wagner 2012-11-13 21:21:53 UTC
Change set:

333,334c333
<         this.establishDeployedContentList(this.deploymentDir);
<         scan(true, deploymentOperations);
---
>             scan(true, deploymentOperations);

Comment 2 Rick Wagner 2012-11-14 15:55:08 UTC
Created attachment 644973 [details]
Includes fixes.

Attached file includes fixes.

Comment 3 Rick Wagner 2012-11-14 15:56:24 UTC
(In reply to comment #1)
> Change set:
> 
> 333,334c333
> <         this.establishDeployedContentList(this.deploymentDir);
> <         scan(true, deploymentOperations);
> ---
> >             scan(true, deploymentOperations);


---------------------------------------------------------------------------------

Please disregard comment 1.  The real changeset is below.

Thanks,

Rick


]0;rick@rwagner01:~/Junk/a/b[?1034h[rick@rwagner01 b]$ diff *old* *new*
113,114c113,114
<                 LOGGER.debug("Unable to perform local rename of file '" + from.getAbsolutePath() + "' to '" + fromLocalRename.getAbsolutePath() + "'.  Unable to move file.");
<                 return true;
---
>             LOGGER.debug("Unable to perform local rename of file '" + from.getAbsolutePath() + "' to '" + fromLocalRename.getAbsolutePath() + "'.  Unable to move file.");
>             return false;
120c120
<             return true;
---
>             return false;
131c131
<             return true;
---
>             return false;
209,213c209,213
<                     try
<                     {
<                             fos.close();
<                     }
<                     catch (final IOException ioe) {} // ignore
---
>                 try
>                 {
>                     fos.close();
>                 }
>                 catch (final IOException ioe) {} // ignore
220c220
<                     fis.close();
---
>                 fis.close();
238c238
<         while( (reader.read(chars)) > -1){
---
>         while( (reader.read(chars)) > -1) {

Comment 4 Rick Wagner 2012-11-14 15:57:38 UTC
This BZ originated after fix BZ 829876 (on SOA-P 5.1).

Comment 5 David Boeren 2012-11-26 19:41:33 UTC
The easiest way to test this I think is to write a test that opens a file in append mode (the goal is to have a file lock).

Then, while the file is open in append mode, call FileUtils.move() on it.

Comment 6 JBoss JIRA Server 2012-11-29 18:58:47 UTC
Tom Cunningham <tcunning> updated the status of jira JBESB-3882 to Resolved

Comment 7 JBoss JIRA Server 2012-11-29 18:59:02 UTC
Tom Cunningham <tcunning> updated the status of jira JBESB-3882 to Closed

Comment 8 tcunning 2012-11-29 19:01:15 UTC
Reproduced this on Windows using David B's suggestion (see FileUtilUnitTest.test_renameTo).


Note You need to log in before you can comment on or make changes to this bug.