Details

    • Type: Bug
    • Status: Closed
    • Priority: Blocker
    • Resolution: Fixed
    • Affects Version/s: 2.1
    • Fix Version/s: 2.1
    • Labels:
    • Environment:

      Win64 with Maven 3.0.5 and Java 1.8.0_05

      Description

      When running the unit tests the RAM provider custom tests fails only with Java 8 (build and runtime):

      Tests run: 9, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.019 sec <<< FAILURE! - in org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest
      testSmallFS(org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest)  Time elapsed: 0.012 sec  <<< ERROR!
      java.lang.IllegalArgumentException: Self-suppression not permitted
              at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)
              at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68)
              at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
              at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
              at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114)
              at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
              at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54)
              at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:711)
              at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264)
      
      1. fos.patch
        0.7 kB
        Bernd Eckenfels

        Activity

        Hide
        b.eckenfels Bernd Eckenfels added a comment - - edited

        This seems to be a java8 thing. The test actually expexts an IOException, and in the above stacktrace location it is actually thrown:

        org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)

        But the runtime seems to wrap this in an IlelgalArgumentException. Internez say it is related to try with resource (which can collect suppressed exceptions), however we don't use that (at least not in the VFS code). Maybe its a test test-framework or JUnit problem?

        Show
        b.eckenfels Bernd Eckenfels added a comment - - edited This seems to be a java8 thing. The test actually expexts an IOException, and in the above stacktrace location it is actually thrown: org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277) But the runtime seems to wrap this in an IlelgalArgumentException. Internez say it is related to try with resource (which can collect suppressed exceptions), however we don't use that (at least not in the VFS code). Maybe its a test test-framework or JUnit problem?
        Hide
        b.eckenfels Bernd Eckenfels added a comment - - edited

        The whole stacktrace is more informative, it looks like:

        java.lang.IllegalArgumentException: Self-suppression not permitted
        	at java.lang.Throwable.addSuppressed(Throwable.java:1043)
        	at java.io.FilterOutputStream.close(FilterOutputStream.java:159)
        	at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54)
        	at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:710)
        	at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:483)
        	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
        	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
        	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
        	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
        	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
        	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
        	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
        	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
        	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
        	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
        	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
        	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
        	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
        	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
        	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
        	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
        	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
        	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
        	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
        Caused by: java.io.IOException: FileSystem capacity (10) exceeded.
        	at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277)
        	at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68)
        	at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82)
        	at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140)
        	at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114)
        	at java.io.FilterOutputStream.close(FilterOutputStream.java:158)
        	... 28 more
        
        Show
        b.eckenfels Bernd Eckenfels added a comment - - edited The whole stacktrace is more informative, it looks like: java.lang.IllegalArgumentException: Self-suppression not permitted at java.lang.Throwable.addSuppressed(Throwable.java:1043) at java.io.FilterOutputStream.close(FilterOutputStream.java:159) at org.apache.commons.vfs2.util.MonitorOutputStream.close(MonitorOutputStream.java:54) at org.apache.commons.vfs2.provider.DefaultFileContent$FileContentOutputStream.close(DefaultFileContent.java:710) at org.apache.commons.vfs2.provider.ram.test.CustomRamProviderTest.testSmallFS(CustomRamProviderTest.java:264) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:483) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.io.IOException: FileSystem capacity (10) exceeded. at org.apache.commons.vfs2.provider.ram.RamFileObject.resize(RamFileObject.java:277) at org.apache.commons.vfs2.provider.ram.RamFileOutputStream.write(RamFileOutputStream.java:68) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at org.apache.commons.vfs2.util.MonitorOutputStream.flush(MonitorOutputStream.java:114) at java.io.FilterOutputStream.close(FilterOutputStream.java:158) ... 28 more
        Hide
        b.eckenfels Bernd Eckenfels added a comment -

        The above patch does fix the problem for Java 8 and it also avoids using the unsafe super.close() method. What do you think? (it does not use the suppressed warnings feature as this is Java 5 code).

        Show
        b.eckenfels Bernd Eckenfels added a comment - The above patch does fix the problem for Java 8 and it also avoids using the unsafe super.close() method. What do you think? (it does not use the suppressed warnings feature as this is Java 5 code).
        Hide
        ysb33r Schalk W. Cronjé added a comment -

        It works for me and does not seem do have an adverse affect in my downstream libraries that depend on it.

        Show
        ysb33r Schalk W. Cronjé added a comment - It works for me and does not seem do have an adverse affect in my downstream libraries that depend on it.
        Hide
        b.eckenfels Bernd Eckenfels added a comment -

        Have commited a fix, similiar to the fos.patch.

        http://svn.apache.org/r1636224

        Show
        b.eckenfels Bernd Eckenfels added a comment - Have commited a fix, similiar to the fos.patch. http://svn.apache.org/r1636224
        Hide
        b.eckenfels Bernd Eckenfels added a comment -

        Apache Commons VFS 2.1 has been released. It includes this (total 171) resolved issues.

        Show
        b.eckenfels Bernd Eckenfels added a comment - Apache Commons VFS 2.1 has been released. It includes this (total 171) resolved issues.

          People

          • Assignee:
            b.eckenfels Bernd Eckenfels
            Reporter:
            b.eckenfels Bernd Eckenfels
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved:

              Development