Vertispan / j2clmavenplugin

Maven plugin to launch new J2CL compilation
https://vertispan.github.io/j2clmavenplugin/
Apache License 2.0
53 stars 26 forks source link

Watch service exception on shutdown #188

Closed niloc132 closed 10 months ago

niloc132 commented 2 years ago

When stopping the JVM that is running the plugin, sometimes a stack trace will be printed. On a mac, this might look like this:

Exception in thread "DiskCacheThread" java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:121)
        at java.base/java.lang.Thread.run(Thread.java:829)

This can affect stopping a j2cl:watch or a successful j2cl:build/j2cl:test as part of a normal mvn package, etc.

This is purely noise in the log and doesn't indicate an actual error, so it can be safely ignored.

jiakuan commented 1 year ago

Although it can be safely ignore, would there be a simple fix to ignore it from the plugin so that no such info printed after a successful build?

jiakuan commented 1 year ago

In a multi-project setup, many of the same stack track will be printed, which is a bit annoying.

niloc132 commented 1 year ago

It probably isn't a very hard fix, but I haven't prioritized it at this time - you're more than welcome to pick it up and contribute a fix?

jiakuan commented 1 year ago

Actually, I've already started looking into this, added a fix and tested locally. It seems working well. Also, the Java version of J2CL Maven Archetypes can be upgraded to 11 according to my test, unless I missed something.

jiakuan commented 4 months ago

I still got lots of this kind of errors after build success. I added logs in DiskCache to see what the thread state was when the exception was thrown:

            State state = livenessThread.getState();
            if(!state.equals(Thread.State.TERMINATED)) {
                 throw new Error("ClosedWatchServiceException thrown, "
                     + "livenessThread state is: " + state, e);
            }

And found it could be RUNNABLE, TIMED_WAITING, BLOCKED:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  15.000 s
[INFO] Finished at: 2024-05-01T19:44:23+08:00
[INFO] ------------------------------------------------------------------------
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: RUNNABLE
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: RUNNABLE
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: TIMED_WAITING
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: BLOCKED
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: RUNNABLE
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: RUNNABLE
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: RUNNABLE
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
Exception in thread "DiskCacheThread" java.lang.Error: ClosedWatchServiceException thrown, livenessThread state is: TIMED_WAITING
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:192)
        at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: java.nio.file.ClosedWatchServiceException
        at io.methvin.watchservice.AbstractWatchService.check(AbstractWatchService.java:94)
        at io.methvin.watchservice.AbstractWatchService.take(AbstractWatchService.java:86)
        at io.methvin.watchservice.MacOSXListeningWatchService.take(MacOSXListeningWatchService.java:38)
        at com.vertispan.j2cl.build.DiskCache.checkForWork(DiskCache.java:147)
        ... 1 more
niloc132 commented 4 months ago

Can you confirm which j2cl-maven-plugin version you are using?

jiakuan commented 4 months ago

I tried the latest 0.22.0 as well as the current main branch. The exception stack I posted was from the current main (0.23-SNAPSHOT).