Hi

when using commons-transations we found an unexpected behavior when the application did not have access rights to delete a file. This is not detected by the FileResourceManager that happily reports the transaction as successfully commited. The file still remains on the file system.

The following test case shows the same behavior, but for keeping a file open:

    public void testFailedDelete() throws Exception {
        LoggerFacade logger = new Log4jLogger(Logger
                .getLogger(FailDeleteTest.class));

        String storeDir = "test-store";
        String workDir = "test-work";
        String testFile = "foo.txt";

        new File(storeDir).mkdirs();
        new File(workDir).mkdirs();

        FileResourceManager resMan = new FileResourceManager(storeDir,
                workDir, false, logger);
        resMan.start();


        File file = new File(storeDir, testFile);

        // hold on to the file
        FileOutputStream fos = new FileOutputStream(file);

        String txId = resMan.generatedUniqueTxId();

        resMan.startTransaction(txId);

        // no try to delete it
        resMan.deleteResource(txId, testFile);

        resMan.commitTransaction(txId);

        // the file will remain even though we successfully
        // commited the delete
        assertTrue(file.exists());
    }

I've tracked this down to the folliowing snippet in FileResourceManager:
               if (removeFile.isFile()) {
                    if (targetFile.exists()) {
                        targetFile.delete();
                    }
                    // indicate, this has been done
                    removeFile.delete();

I think a check that targetFile.delete() actually succeeds would fix this problem. I'll be happy to write up a patch if you agree that this should be fixed.

/niklas

-------
Niklas Gustavsson
http://www.protocol7.com
mailto:[EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to