Skip to content

Commit

Permalink
fix(QTDI-1188): change return content
Browse files Browse the repository at this point in the history
  • Loading branch information
undx committed Feb 12, 2025
1 parent bc7ec95 commit cc49f45
Show file tree
Hide file tree
Showing 6 changed files with 65 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.core.Response;

import org.eclipse.microprofile.openapi.annotations.Operation;
import org.eclipse.microprofile.openapi.annotations.responses.APIResponse;
Expand All @@ -29,6 +30,6 @@ public interface CacheResource {
@GET
@Path("clear")
@Operation(operationId = "clearCaches", description = "Clear all caches.")
@APIResponse(responseCode = "204", description = "Clear all caches.")
void clearCaches();
@APIResponse(responseCode = "200", description = "Cleared caches.")
Response clearCaches();
}
Original file line number Diff line number Diff line change
Expand Up @@ -235,17 +235,7 @@ private CompletionStage<Void> checkPlugins() {
if (!reload) {
return null;
}
// undeploy plugins
log.info("Un-deploying plugins...");
manager().getContainer().findAll().forEach(container -> container.close());
// redeploy plugins
log.info("Re-deploying plugins...");
deployPlugins();
log.info("Plugins deployed.");
// reset connectors' version
synchronizeConnectors();
// reset caches
cacheResolver.clearCaches();
redeployPlugins();

return null;
}
Expand Down Expand Up @@ -355,6 +345,20 @@ public synchronized void undeploy(final String pluginGAV) {
synchronizeConnectors();
}

public void redeployPlugins() {
// undeploy plugins
log.info("Un-deploying plugins...");
manager().getContainer().findAll().forEach(container -> container.close());

Check warning on line 351 in component-server-parent/component-server/src/main/java/org/talend/sdk/component/server/service/ComponentManagerService.java

View check run for this annotation

sonar-eks / Component Runtime Sonarqube Results

component-server-parent/component-server/src/main/java/org/talend/sdk/component/server/service/ComponentManagerService.java#L351

Replace this lambda with method reference 'Container::close'.
// redeploy plugins
log.info("Re-deploying plugins...");
deployPlugins();
log.info("Plugins deployed.");
// reset connectors' version
synchronizeConnectors();
// reset caches
cacheResolver.cleanupCaches();
}

public Date findLastUpdated() {
return lastUpdated;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
package org.talend.sdk.component.server.service.jcache;

import static java.util.Optional.ofNullable;
import static javax.ws.rs.core.MediaType.TEXT_PLAIN_TYPE;

import java.lang.annotation.Annotation;
import java.util.concurrent.TimeUnit;
Expand All @@ -32,13 +33,17 @@
import javax.cache.configuration.Configuration;
import javax.enterprise.context.ApplicationScoped;
import javax.inject.Inject;
import javax.ws.rs.core.Response;

import org.apache.geronimo.jcache.simple.cdi.CacheResolverImpl;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.talend.sdk.component.api.meta.Documentation;
import org.talend.sdk.component.server.api.CacheResource;
import org.talend.sdk.component.server.front.ComponentResourceImpl;
import org.talend.sdk.component.server.front.ConfigurationTypeResourceImpl;
import org.talend.sdk.component.server.front.EnvironmentResourceImpl;
import org.talend.sdk.component.server.front.model.Environment;
import org.talend.sdk.component.server.service.ComponentManagerService;
import org.talend.sdk.components.vault.jcache.CacheConfigurationFactory;
import org.talend.sdk.components.vault.jcache.CacheSizeManager;

Expand All @@ -59,9 +64,18 @@ public class FrontCacheResolver implements CacheResolverFactory, CacheResource {
@ConfigProperty(name = "talend.vault.cache.jcache.refresh.period", defaultValue = "30000")
private Long refreshPeriod;

@Inject
private ComponentManagerService service;

@Inject
EnvironmentResourceImpl env;

@Inject
ComponentResourceImpl components;

@Inject
ConfigurationTypeResourceImpl resources;

private long lastUpdated;

private volatile boolean running = true;
Expand Down Expand Up @@ -112,26 +126,39 @@ private void updateIfNeeded() {
final Environment environment = env.get();
// assumes time are synch-ed but not a high assumption
if (lastUpdated < environment.getLastUpdated().getTime()) {
clearCaches();
cleanupCaches();
lastUpdated = System.currentTimeMillis();
}
}

@Override
public void clearCaches() {
/**
* Clear all soft caches
*/
public void cleanupCaches() {
StreamSupport
.stream(cacheManager.getCacheNames().spliterator(), false)
.filter(name -> name.startsWith("org.talend.sdk.component.server.front."))
.peek(c -> log.info("[clearCaches] clear cache {}.", c))
.forEach(r -> cacheManager.getCache(r).clear());
components.clearCache(null);
resources.clearCache(null);
}

@Override
public Response clearCaches() {
final long clearedCacheCount = countActiveCaches();
service.redeployPlugins();
return Response
.ok(clearedCacheCount, TEXT_PLAIN_TYPE)
.build();
}

/**
* mainly used for testing purpose.
*
* @return active caches count
*/
public long countActiveCaches() {
public Long countActiveCaches() {
return StreamSupport
.stream(cacheManager.getCacheNames().spliterator(), false)
.filter(name -> name.startsWith("org.talend.sdk.component.server.front."))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import org.apache.meecrowave.junit5.MonoMeecrowaveConfig;
import org.junit.jupiter.api.Test;
import org.talend.sdk.component.server.service.ComponentManagerService;
import org.talend.sdk.component.server.test.ComponentClient;

@MonoMeecrowaveConfig
Expand All @@ -38,20 +39,30 @@ class FrontCacheResolverTest {
@Inject
private FrontCacheResolver cacheResolver;

@Inject
private ComponentManagerService service;

@Test
void clearCaches() {
cacheResolver.clearCaches();
void cleanupCaches() {
cacheResolver.cleanupCaches();
assertEquals(0, cacheResolver.countActiveCaches());
client.fetchIndex();
assertEquals(1, cacheResolver.countActiveCaches());
client.fetchConfigTypeNodes();
assertEquals(2, cacheResolver.countActiveCaches());
}

@Test
void clearCaches() {
final int connectors = service.getConnectors().getPluginsList().size();
final Response resp = base
.path("cache/clear")
.request(APPLICATION_JSON_TYPE)
.get();
assertEquals(204, resp.getStatus());
assertEquals(200, resp.getStatus());
assertEquals(0, resp.readEntity(Integer.class));
assertEquals(0, cacheResolver.countActiveCaches());
assertEquals(connectors, service.getConnectors().getPluginsList().size());
}

}
Loading

0 comments on commit cc49f45

Please sign in to comment.