Skip to content

Commit

Permalink
Revert DROOLS-7472 enable automatic use of KieModule cache ... (#5317)
Browse files Browse the repository at this point in the history
Reverts "[DROOLS-7472] enable automatic use of KieModule cache in KieRepository (#5317)"

This reverts commit 10ea217.
  • Loading branch information
tarilabs committed Jun 26, 2023
1 parent 8bf88eb commit c5a6b7d
Showing 1 changed file with 37 additions and 61 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,19 @@

package org.drools.compiler.kie.builder.impl;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.NavigableMap;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicReference;

import org.drools.compiler.compiler.io.memory.MemoryFileSystem;
import org.drools.compiler.kproject.models.KieModuleModelImpl;
import org.drools.io.InternalResource;
Expand All @@ -33,20 +46,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.NavigableMap;
import java.util.Set;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicReference;

import static org.drools.compiler.kie.builder.impl.KieBuilderImpl.setDefaultsforEmptyKieModule;
import static org.kie.util.maven.support.ReleaseIdImpl.fromPropertiesStream;

Expand All @@ -66,7 +65,7 @@ public class KieRepositoryImpl

public static final KieRepository INSTANCE = new KieRepositoryImpl();

private final KieModuleRepo kieModuleRepo = new KieModuleRepo();
private final KieModuleRepo kieModuleRepo;

public static void setInternalKieScanner(InternalKieScanner scanner) {
synchronized (KieScannerHolder.class) {
Expand Down Expand Up @@ -95,6 +94,10 @@ private static InternalKieScanner getInternalKieScanner() {
}
}

public KieRepositoryImpl() {
kieModuleRepo = new KieModuleRepo();
}

public void setDefaultGAV(ReleaseId releaseId) {
this.defaultGAV.set(releaseId);
}
Expand Down Expand Up @@ -122,26 +125,20 @@ KieModule getOldKieModule(ReleaseId releaseId) {
}

public KieModule getKieModule(ReleaseId releaseId, PomModel pomModel) {
if (kieModuleRepo.isKnownNotKieModule(releaseId)) {
return null;
}

KieModule kieModule = kieModuleRepo.load( KieScannerHolder.kieScanner, releaseId );
if (kieModule != null) {
return kieModule;
if (kieModule == null) {
log.debug("KieModule Lookup. ReleaseId {} was not in cache, checking classpath",
releaseId.toExternalForm());
kieModule = checkClasspathForKieModule(releaseId);
}

log.debug("KieModule Lookup. ReleaseId {} was not in cache, checking classpath",
releaseId.toExternalForm());
kieModule = checkClasspathForKieModule(releaseId);

if (kieModule == null) {
log.debug("KieModule Lookup. ReleaseId {} was not in cache, checking maven repository",
releaseId.toExternalForm());
kieModule = loadKieModuleFromMavenRepo(releaseId, pomModel);
}

return kieModuleRepo.storeKieModule(releaseId, kieModule);
return kieModule;
}

private KieModule checkClasspathForKieModule(ReleaseId releaseId) {
Expand Down Expand Up @@ -259,7 +256,7 @@ public Collection<KieScannerEventListener> getListeners() {
public KieModule addKieModule(Resource resource, Resource... dependencies) {
log.info("Adding KieModule from resource: " + resource);
KieModule kModule = getKieModule(resource);
if (dependencies != null) {
if (dependencies != null && dependencies.length > 0) {
for (Resource depRes : dependencies) {
InternalKieModule depKModule = (InternalKieModule) getKieModule(depRes);
((InternalKieModule) kModule).addKieDependency(depKModule);
Expand Down Expand Up @@ -328,35 +325,30 @@ public static class KieModuleRepo {
public static int MAX_SIZE_GA_VERSIONS_CACHE // made changeable for test purposes
= Integer.parseInt(System.getProperty(CACHE_VERSIONS_MAX_PROPERTY, "10"));

private final Set<ReleaseId> notKieModules = Collections.newSetFromMap(new LinkedHashMap<>(){
@Override
protected boolean removeEldestEntry(Map.Entry<ReleaseId, Boolean> eldest) {
return size() > 1_000;
}
});

// FIELDS -----------------------------------------------------------------------------------------------------------------

// kieModules evicts based on access-time, not on insertion-time
public final Map<String, NavigableMap<ComparableVersion, KieModule>> kieModules = new LinkedHashMap<>(16, 0.75f, true) {
public final Map<String, NavigableMap<ComparableVersion, KieModule>> kieModules
= new LinkedHashMap<String, NavigableMap<ComparableVersion, KieModule>>(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry( Map.Entry<String, NavigableMap<ComparableVersion, KieModule>> eldest) {
return (size() > MAX_SIZE_GA_CACHE);
}
};

public final LinkedHashMap<ReleaseId, KieModule> oldKieModules = new LinkedHashMap<>() {
public final LinkedHashMap<ReleaseId, KieModule> oldKieModules = new LinkedHashMap<ReleaseId, KieModule>() {
@Override
protected boolean removeEldestEntry( Map.Entry<ReleaseId, KieModule> eldest ) {
return size() > (MAX_SIZE_GA_CACHE*MAX_SIZE_GA_VERSIONS_CACHE);
}
};

};

// METHODS ----------------------------------------------------------------------------------------------------------------

public synchronized KieModule remove(ReleaseId releaseId) {
KieModule removedKieModule = null;
String ga = toArtifactId(releaseId);
String ga = releaseId.getGroupId() + ":" + releaseId.getArtifactId();
ComparableVersion comparableVersion = new ComparableVersion(releaseId.getVersion());

NavigableMap<ComparableVersion, KieModule> artifactMap = kieModules.get(ga);
Expand All @@ -371,24 +363,9 @@ public synchronized KieModule remove(ReleaseId releaseId) {
return removedKieModule;
}

private KieModule storeKieModule(ReleaseId releaseId, KieModule kieModule) {
if (kieModule != null) {
store(kieModule);
} else {
notKieModules.add(releaseId);
}
return kieModule;
}

private boolean isKnownNotKieModule(ReleaseId releaseId) {
return notKieModules.contains(releaseId);
}

public synchronized void store(KieModule kieModule) {
ReleaseId releaseId = kieModule.getReleaseId();
notKieModules.remove(releaseId);

String ga = toArtifactId(releaseId);
String ga = releaseId.getGroupId() + ":" + releaseId.getArtifactId();
ComparableVersion comparableVersion = new ComparableVersion(releaseId.getVersion());

NavigableMap<ComparableVersion, KieModule> artifactMap = kieModules.get(ga);
Expand Down Expand Up @@ -416,11 +393,11 @@ public synchronized void store(KieModule kieModule) {
* @return a {@link NavigableMap} that is "backed" by a {@link LinkedHashMap} to enforce a LRU cache
*/
private NavigableMap<ComparableVersion, KieModule> createNewArtifactMap() {
return new TreeMap<>() {
NavigableMap<ComparableVersion, KieModule> newArtifactMap = new TreeMap<ComparableVersion, KieModule>() {

private final Map<ComparableVersion, KieModule> artifactMap = this;

final LinkedHashMap<ComparableVersion, Object> backingLRUMap = new LinkedHashMap<>(16, 0.75f, true) {
LinkedHashMap<ComparableVersion, Object> backingLRUMap = new LinkedHashMap<ComparableVersion, Object>(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry( Map.Entry<ComparableVersion, Object> eldest ) {
boolean remove = (size() > MAX_SIZE_GA_VERSIONS_CACHE);
Expand All @@ -438,6 +415,7 @@ public KieModule put( ComparableVersion key, KieModule value ) {
}

};
return newArtifactMap;
}

synchronized KieModule loadOldAndRemove(ReleaseId releaseId) {
Expand All @@ -449,7 +427,9 @@ synchronized KieModule load(InternalKieScanner kieScanner, ReleaseId releaseId)
}

synchronized KieModule load(InternalKieScanner kieScanner, ReleaseId releaseId, VersionRange versionRange) {
NavigableMap<ComparableVersion, KieModule> artifactMap = kieModules.get( toArtifactId(releaseId) );
String ga = releaseId.getGroupId() + ":" + releaseId.getArtifactId();

NavigableMap<ComparableVersion, KieModule> artifactMap = kieModules.get(ga);
if ( artifactMap == null || artifactMap.isEmpty() ) {
return null;
}
Expand Down Expand Up @@ -492,10 +472,6 @@ synchronized KieModule load(InternalKieScanner kieScanner, ReleaseId releaseId,

}

private static String toArtifactId(ReleaseId releaseId) {
return releaseId.getGroupId() + ":" + releaseId.getArtifactId();
}

private static class VersionRange {

private String lowerBound;
Expand Down

0 comments on commit c5a6b7d

Please sign in to comment.