Richard Eckart de Castilho created RAT-553:
----------------------------------------------

             Summary: NPE with multi-threaded builds
                 Key: RAT-553
                 URL: https://issues.apache.org/jira/browse/RAT-553
             Project: Apache RAT
          Issue Type: Task
    Affects Versions: 0.18
            Reporter: Richard Eckart de Castilho


Hitting this intermittently with `mvn -T <N>` on a multi-module project that 
has `.gitignore` files:

 
{noformat}
NullPointerException: Cannot invoke
"...AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
because the return value of "java.util.SortedMap.get(Object)" is null
at 
AbstractFileProcessorBuilder.build(AbstractFileProcessorBuilder.java:133){noformat}
 

I've also seen what looked like a ConcurrentModificationExcepton in the past 
from the same area — possibly the same bug.

StandardCollection caches one GitIgnoreBuilder instance and hands it to every 
caller. AbstractFileProcessorBuilder.levelBuilders is an instance field that 
build() mutates and clear()s. With parallel module builds, two threads call 
build() on the same singleton and trample each other's map — get(0) returns 
null, or the keySet iteration in createMatcherSetList blows up with a 
ConcurrentModificationExcepton.

The mojo declares threadSafe = true, so Maven happily runs it in parallel — but 
the shared mutable state in the builders means that promise isn't actually true.

(Btw. `HgIgnoreBuilder` seems to have a mutable `state` field that may have the 
same issue.)

I'm seeing this with 0.18. I think 0.16 still worked ok.

Workaround that worked for me — turn off SCM ignore parsing so the racy code 
path isn't hit:

 
{noformat}
<configuration>
<parseSCMIgnoresAsExcludes>false</parseSCMIgnoresAsExcludes>
</configuration>{noformat}
 
----
 
{noformat}
Error:  Failed to execute goal org.apache.rat:apache-rat-plugin:0.18:check 
(default) on project inception-workload: Execution default of goal 
org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null -> [Help 
1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
org.apache.rat:apache-rat-plugin:0.18:check (default) on project 
inception-workload: Execution default of goal 
org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default 
of goal org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
(DefaultBuildPluginManager.java:133)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: java.lang.NullPointerException: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at 
org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder.build
 (AbstractFileProcessorBuilder.java:133)
    at 
org.apache.rat.config.exclusion.ExclusionProcessor.lambda$extractFileProcessors$0
 (ExclusionProcessor.java:232)
    at org.apache.commons.collections4.Transformer.apply (Transformer.java:47)
    at org.apache.commons.collections4.iterators.TransformIterator.transform 
(TransformIterator.java:138)
    at org.apache.commons.collections4.iterators.TransformIterator.next 
(TransformIterator.java:102)
    at java.util.Iterator.forEachRemaining (Iterator.java:133)
    at org.apache.rat.utils.ExtendedIterator.forEachRemaining 
(ExtendedIterator.java:130)
    at org.apache.rat.config.exclusion.ExclusionProcessor.extractFileProcessors 
(ExclusionProcessor.java:234)
    at org.apache.rat.config.exclusion.ExclusionProcessor.getNameMatcher 
(ExclusionProcessor.java:208)
    at org.apache.rat.ReportConfiguration.getDocumentExcluder 
(ReportConfiguration.java:434)
    at org.apache.rat.mp.AbstractRatMojo.getConfiguration 
(AbstractRatMojo.java:546)
    at org.apache.rat.mp.RatCheckMojo.getConfiguration (RatCheckMojo.java:166)
    at org.apache.rat.mp.RatCheckMojo.execute (RatCheckMojo.java:205)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
(DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Error:  Failed to execute goal org.apache.rat:apache-rat-plugin:0.18:check 
(default) on project inception-io-tei: Execution default of goal 
org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null -> [Help 
1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal 
org.apache.rat:apache-rat-plugin:0.18:check (default) on project 
inception-io-tei: Execution default of goal 
org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:333)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default 
of goal org.apache.rat:apache-rat-plugin:0.18:check failed: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
(DefaultBuildPluginManager.java:133)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583)
Caused by: java.lang.NullPointerException: Cannot invoke 
"org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder$LevelBuilder.asMatcherSet()"
 because the return value of "java.util.SortedMap.get(Object)" is null
    at 
org.apache.rat.config.exclusion.fileProcessors.AbstractFileProcessorBuilder.build
 (AbstractFileProcessorBuilder.java:133)
    at 
org.apache.rat.config.exclusion.ExclusionProcessor.lambda$extractFileProcessors$0
 (ExclusionProcessor.java:232)
    at org.apache.commons.collections4.Transformer.apply (Transformer.java:47)
    at org.apache.commons.collections4.iterators.TransformIterator.transform 
(TransformIterator.java:138)
    at org.apache.commons.collections4.iterators.TransformIterator.next 
(TransformIterator.java:102)
    at java.util.Iterator.forEachRemaining (Iterator.java:133)
    at org.apache.rat.utils.ExtendedIterator.forEachRemaining 
(ExtendedIterator.java:130)
    at org.apache.rat.config.exclusion.ExclusionProcessor.extractFileProcessors 
(ExclusionProcessor.java:234)
    at org.apache.rat.config.exclusion.ExclusionProcessor.getNameMatcher 
(ExclusionProcessor.java:208)
    at org.apache.rat.ReportConfiguration.getDocumentExcluder 
(ReportConfiguration.java:434)
    at org.apache.rat.mp.AbstractRatMojo.getConfiguration 
(AbstractRatMojo.java:546)
    at org.apache.rat.mp.RatCheckMojo.getConfiguration (RatCheckMojo.java:166)
    at org.apache.rat.mp.RatCheckMojo.execute (RatCheckMojo.java:205)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo 
(DefaultBuildPluginManager.java:126)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 
(MojoExecutor.java:328)
    at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute 
(MojoExecutor.java:316)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:212)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:174)
    at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 
(MojoExecutor.java:75)
    at org.apache.maven.lifecycle.internal.MojoExecutor$1.run 
(MojoExecutor.java:162)
    at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute 
(DefaultMojosExecutionStrategy.java:39)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute 
(MojoExecutor.java:159)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject 
(LifecycleModuleBuilder.java:105)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:193)
    at 
org.apache.maven.lifecycle.internal.builder.multithreaded.MultiThreadedBuilder$1.call
 (MultiThreadedBuilder.java:180)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.Executors$RunnableAdapter.call (Executors.java:572)
    at java.util.concurrent.FutureTask.run (FutureTask.java:317)
    at java.util.concurrent.ThreadPoolExecutor.runWorker 
(ThreadPoolExecutor.java:1144)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run 
(ThreadPoolExecutor.java:642)
    at java.lang.Thread.run (Thread.java:1583){noformat}
 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to