apache / incubator-kie-drools

Drools is a rule engine, DMN engine and complex event processing (CEP) engine for Java.
http://www.drools.org
5.85k stars 2.49k forks source link

Possible deadlock with KieRepositoryImpl$KieModuleRepo and KieRepositoryScannerImpl #5974

Closed tkobayas closed 2 months ago

tkobayas commented 4 months ago

Deadlock like this:

"Thread-A":
        at org.kie.scanner.KieRepositoryScannerImpl.getArtifactVersion(KieRepositoryScannerImpl.java:121)
        - waiting to lock <0x0000000711e6db08> (a org.kie.scanner.KieRepositoryScannerImpl)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo.load(KieRepositoryImpl.java:442)
        - locked <0x000000070287ac40> (a org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo.load(KieRepositoryImpl.java:426)
        - locked <0x000000070287ac40> (a org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:128) // KieScannerHolder.kieScanner is used

        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:170)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:218)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:214)
        at org.kie.workbench.common.services.backend.builder.core.Builder.build(Builder.java:213)
        ...

"Thread-B":
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo.load(KieRepositoryImpl.java:426)
        - waiting to lock <0x000000070287ac40> (a org.drools.compiler.kie.builder.impl.KieRepositoryImpl$KieModuleRepo)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:128)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:115)
        at org.kie.scanner.KieRepositoryScannerImpl.addDependencies(KieRepositoryScannerImpl.java:151)
        at org.kie.scanner.KieRepositoryScannerImpl.buildArtifact(KieRepositoryScannerImpl.java:144)
        at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:117)
        at org.kie.scanner.KieRepositoryScannerImpl.loadArtifact(KieRepositoryScannerImpl.java:112)
        - locked <0x0000000711e6db08> (a org.kie.scanner.KieRepositoryScannerImpl)
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.loadKieModuleFromMavenRepo(KieRepositoryImpl.java:192) // KieScannerHolder.kieScanner is used
        at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:138)

        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.init(KieBuilderImpl.java:170)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:218)
        at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:214)
tkobayas commented 2 months ago

Fixed by https://github.com/apache/incubator-kie-drools/pull/6006