Skip to content

Commit

Permalink
Add cache for resolved metadata
Browse files Browse the repository at this point in the history
  • Loading branch information
Srdjan-V committed May 17, 2024
1 parent eaea423 commit fde5713
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

import io.github.srdjanv.hotswapgradle.agent.HotswapAgentProvider;
import io.github.srdjanv.hotswapgradle.registry.ICachedJVMRegistry;
import io.github.srdjanv.hotswapgradle.registry.IDcevmMetadataCacheRegistry;
import io.github.srdjanv.hotswapgradle.registry.IKnownDcevmRegistry;
import io.github.srdjanv.hotswapgradle.registry.ILocalJVMRegistry;
import io.github.srdjanv.hotswapgradle.registry.internal.CachedJVMRegistry;
import io.github.srdjanv.hotswapgradle.registry.internal.KnownDcevmRegistry;
import io.github.srdjanv.hotswapgradle.registry.internal.LocalJVMRegistry;
import io.github.srdjanv.hotswapgradle.resolver.internal.DefaultDcevmMetadataCacheRegistry;
import io.github.srdjanv.hotswapgradle.validator.DcevmValidator;
import java.util.Objects;
import org.gradle.api.file.DirectoryProperty;
Expand Down Expand Up @@ -34,12 +36,14 @@ public interface HotSwapParameters extends BuildServiceParameters {

private DcevmValidator dcevmValidator;
private final HotswapAgentProvider downloader;
private final IDcevmMetadataCacheRegistry dcevmMetadataCacheRegistry;
private final IKnownDcevmRegistry knownDCEVMRegistry;
private final ICachedJVMRegistry cashedJVMRegistry;
private final ILocalJVMRegistry localJVMRegistry;

public HotswapGradleService() {
dcevmValidator = DcevmValidator.defaultValidator();
dcevmMetadataCacheRegistry = new DefaultDcevmMetadataCacheRegistry(this);
downloader = new HotswapAgentProvider(this);
knownDCEVMRegistry = new KnownDcevmRegistry(this);
cashedJVMRegistry = new CachedJVMRegistry(this);
Expand All @@ -54,6 +58,10 @@ public DcevmValidator getDcevmValidator() {
return dcevmValidator;
}

public IDcevmMetadataCacheRegistry getDcevmMetadataCacheRegistry() {
return dcevmMetadataCacheRegistry;
}

public HotswapAgentProvider getAgentProvider() {
return downloader;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package io.github.srdjanv.hotswapgradle.registry;

import io.github.srdjanv.hotswapgradle.dcvm.DcevmMetadata;
import io.github.srdjanv.hotswapgradle.resolver.IDcevmMetadataResolver;
import java.nio.file.Path;

public interface IDcevmMetadataCacheRegistry {
DcevmMetadata getResolveMetadata(Path javaHome, IDcevmMetadataResolver resolver);
}
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ public void addToRegistry(DcevmMetadata metadata) {
for (var path : paths) {
var iDcevmMetadata = dcevmMetadataCache.get(path);
if (iDcevmMetadata == null) {
iDcevmMetadata = metadataResolver.resolveDcevmMetadata(path);
iDcevmMetadata = service.getDcevmMetadataCacheRegistry().getResolveMetadata(path, metadataResolver);
if (iDcevmMetadata != null) addToRegistry(iDcevmMetadata);
}
if (iDcevmMetadata != null) dcevmSpec.getDcevmMetadata().set(iDcevmMetadata);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,11 +102,14 @@ public void configureRegistry(Consumer<Map<JavaVersion, List<Action<? super Dcev
var resolvedLauncher = launcherResolver.resolveLauncher(specPair.getRight());
try {
javaLauncher = resolvedLauncher.get();
var metadata = metadataResolver.resolveDcevmMetadata(javaLauncher
.getMetadata()
.getInstallationPath()
.getAsFile()
.toPath());
var metadata = service.getDcevmMetadataCacheRegistry()
.getResolveMetadata(
javaLauncher
.getMetadata()
.getInstallationPath()
.getAsFile()
.toPath(),
metadataResolver);
if (!metadata.getIsDcevmPresent().get()) {
logger.info("Resolved known spec is not an DCEVM, known spec {}", specPair.getRight());
javaLauncher = null;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.github.srdjanv.hotswapgradle.resolver.internal;

import io.github.srdjanv.hotswapgradle.HotswapGradleService;
import io.github.srdjanv.hotswapgradle.dcvm.DcevmMetadata;
import io.github.srdjanv.hotswapgradle.registry.IDcevmMetadataCacheRegistry;
import io.github.srdjanv.hotswapgradle.resolver.IDcevmMetadataResolver;
import java.nio.file.Path;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class DefaultDcevmMetadataCacheRegistry implements IDcevmMetadataCacheRegistry {
private final Map<Path, DcevmMetadata> dcevmMetadataCache = new ConcurrentHashMap<>();
private final HotswapGradleService service;

public DefaultDcevmMetadataCacheRegistry(HotswapGradleService service) {
this.service = service;
}

@Override
public DcevmMetadata getResolveMetadata(Path javaHome, IDcevmMetadataResolver resolver) {
return dcevmMetadataCache.computeIfAbsent(javaHome, resolver::resolveDcevmMetadata);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ public List<DcevmMetadata> getAllDcevmToolchains(IDcevmMetadataResolver metadata
return registry.toolchains().stream()
.filter(tool -> tool.metadata.isValidInstallation())
.filter(tool -> service.getDcevmValidator().validateDcevm(tool.metadata.getJavaHome()))
.map(tool -> metadataResolver.resolveDcevmMetadata(tool.metadata.getJavaHome()))
.map(tool -> service.getDcevmMetadataCacheRegistry()
.getResolveMetadata(tool.metadata.getJavaHome(), metadataResolver))
.collect(Collectors.toList());
}
}

0 comments on commit fde5713

Please sign in to comment.