From 4a21d99fecbdc7e6f6be794cdd1fd2fce99bc822 Mon Sep 17 00:00:00 2001 From: Nidhi Date: Tue, 26 Sep 2023 18:21:33 +0530 Subject: [PATCH] chore: Added checks to only return plugins when new updates are present (#27641) --- .../server/constants/ce/FieldNameCE.java | 2 ++ .../ce/PluginScheduledTaskUtilsCEImpl.java | 4 ++- .../server/services/ConfigServiceImpl.java | 10 ++---- .../services/ce/ConfigServiceCEImpl.java | 15 +-------- .../services/ce/PluginServiceCEImpl.java | 5 +++ .../solutions/PluginScheduledTaskImpl.java | 7 ++-- .../ce/PluginScheduledTaskCEImpl.java | 32 ++++++++++++++++--- 7 files changed, 43 insertions(+), 32 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/FieldNameCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/FieldNameCE.java index 6292e0b310..77e45838a9 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/FieldNameCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/FieldNameCE.java @@ -187,4 +187,6 @@ public class FieldNameCE { public static final String IS_MERGEABLE = "isMergeable"; public static final String FILE_LOCK_DURATION = "fileLockDuration"; + + public static final String REMOTE_PLUGINS = "remotePlugins"; } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/PluginScheduledTaskUtilsCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/PluginScheduledTaskUtilsCEImpl.java index 3bf23bf3f6..6c379e42e4 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/PluginScheduledTaskUtilsCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/helpers/ce/PluginScheduledTaskUtilsCEImpl.java @@ -37,8 +37,10 @@ public class PluginScheduledTaskUtilsCEImpl implements PluginScheduledTaskUtilsC return Mono.empty(); } + String lastUpdatedAtParam = lastUpdatedAt != null ? "&lastUpdatedAt=" + lastUpdatedAt : ""; + return configService.getInstanceId().flatMap(instanceId -> WebClientUtils.create( - baseUrl + "/api/v1/plugins?instanceId=" + instanceId + "&lastUpdatedAt=" + lastUpdatedAt) + baseUrl + "/api/v1/plugins?instanceId=" + instanceId + lastUpdatedAtParam) .get() .exchangeToMono(clientResponse -> clientResponse.bodyToMono(new ParameterizedTypeReference>>() {})) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java index e19ccad98d..5f96581892 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ConfigServiceImpl.java @@ -1,8 +1,6 @@ package com.appsmith.server.services; -import com.appsmith.server.repositories.ApplicationRepository; import com.appsmith.server.repositories.ConfigRepository; -import com.appsmith.server.repositories.DatasourceRepository; import com.appsmith.server.services.ce.ConfigServiceCEImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -11,11 +9,7 @@ import org.springframework.stereotype.Service; @Service public class ConfigServiceImpl extends ConfigServiceCEImpl implements ConfigService { - public ConfigServiceImpl( - ConfigRepository repository, - ApplicationRepository applicationRepository, - DatasourceRepository datasourceRepository) { - - super(repository, applicationRepository, datasourceRepository); + public ConfigServiceImpl(ConfigRepository repository) { + super(repository); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConfigServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConfigServiceCEImpl.java index 92a3f0dfc1..9c0d6d2d63 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConfigServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/ConfigServiceCEImpl.java @@ -6,9 +6,7 @@ import com.appsmith.server.domains.Config; import com.appsmith.server.domains.User; import com.appsmith.server.exceptions.AppsmithError; import com.appsmith.server.exceptions.AppsmithException; -import com.appsmith.server.repositories.ApplicationRepository; import com.appsmith.server.repositories.ConfigRepository; -import com.appsmith.server.repositories.DatasourceRepository; import lombok.extern.slf4j.Slf4j; import net.minidev.json.JSONObject; import reactor.core.publisher.Mono; @@ -17,23 +15,12 @@ import java.util.Map; @Slf4j public class ConfigServiceCEImpl implements ConfigServiceCE { - - private static final String TEMPLATE_WORKSPACE_CONFIG_NAME = "template-workspace"; - - private final ApplicationRepository applicationRepository; - private final DatasourceRepository datasourceRepository; private final ConfigRepository repository; // This is permanently cached through the life of the JVM process as this is not intended to change at runtime ever. private String instanceId = null; - public ConfigServiceCEImpl( - ConfigRepository repository, - ApplicationRepository applicationRepository, - DatasourceRepository datasourceRepository) { - - this.applicationRepository = applicationRepository; - this.datasourceRepository = datasourceRepository; + public ConfigServiceCEImpl(ConfigRepository repository) { this.repository = repository; } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/PluginServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/PluginServiceCEImpl.java index ff3390e385..8756c48f61 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/PluginServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/PluginServiceCEImpl.java @@ -196,6 +196,11 @@ public class PluginServiceCEImpl extends BaseService { // Only perform a DB op if plugins associated to this org have changed if (workspace.getPlugins().containsAll(newWorkspacePlugins)) { diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/PluginScheduledTaskImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/PluginScheduledTaskImpl.java index 73a555b2a2..67ed080bc6 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/PluginScheduledTaskImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/PluginScheduledTaskImpl.java @@ -1,6 +1,7 @@ package com.appsmith.server.solutions; import com.appsmith.server.helpers.PluginScheduledTaskUtils; +import com.appsmith.server.services.ConfigService; import com.appsmith.server.solutions.ce.PluginScheduledTaskCEImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -8,9 +9,7 @@ import org.springframework.stereotype.Component; @Slf4j @Component public class PluginScheduledTaskImpl extends PluginScheduledTaskCEImpl implements PluginScheduledTask { - - public PluginScheduledTaskImpl(PluginScheduledTaskUtils pluginScheduledTaskUtils) { - - super(pluginScheduledTaskUtils); + public PluginScheduledTaskImpl(PluginScheduledTaskUtils pluginScheduledTaskUtils, ConfigService configService) { + super(pluginScheduledTaskUtils, configService); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PluginScheduledTaskCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PluginScheduledTaskCEImpl.java index d699a4c1a7..b0ca1d5858 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PluginScheduledTaskCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/solutions/ce/PluginScheduledTaskCEImpl.java @@ -1,15 +1,21 @@ package com.appsmith.server.solutions.ce; +import com.appsmith.server.constants.FieldName; +import com.appsmith.server.domains.Config; import com.appsmith.server.helpers.PluginScheduledTaskUtils; +import com.appsmith.server.services.ConfigService; import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import net.minidev.json.JSONObject; import org.springframework.scheduling.annotation.Scheduled; import reactor.core.scheduler.Schedulers; import java.time.Instant; +import java.util.Date; +import java.util.Map; /** * This class represents a scheduled task that pings cloud services for any updates in available plugins. @@ -19,18 +25,34 @@ import java.time.Instant; public class PluginScheduledTaskCEImpl implements PluginScheduledTaskCE { private final PluginScheduledTaskUtils pluginScheduledTaskUtils; - - private Instant lastUpdatedAt = null; + private final ConfigService configService; // Number of milliseconds between the start of each scheduled calls to this method. @Scheduled(initialDelay = 30 * 1000 /* 30 seconds */, fixedRate = 2 * 60 * 60 * 1000 /* two hours */) public void updateRemotePlugins() { // Moving the fetch and update remote plugins to helper classes to have custom implementation for business // edition - pluginScheduledTaskUtils - .fetchAndUpdateRemotePlugins(lastUpdatedAt) + configService + .getByName(FieldName.REMOTE_PLUGINS) + .onErrorReturn(new Config()) + .map(config -> { + JSONObject config1 = config.getConfig(); + Instant lastUpdatedAt = null; + + if (config1 != null) { + Object tempUpdatedAt = config1.getOrDefault(FieldName.UPDATED_AT, null); + if (tempUpdatedAt != null) { + lastUpdatedAt = ((Date) tempUpdatedAt).toInstant(); + } + } + return pluginScheduledTaskUtils.fetchAndUpdateRemotePlugins(lastUpdatedAt); + }) // Set new updated time - .doOnSuccess(success -> this.lastUpdatedAt = Instant.now()) + .flatMap(success -> { + Config config = new Config( + new JSONObject(Map.of(FieldName.UPDATED_AT, Instant.now())), FieldName.REMOTE_PLUGINS); + return configService.save(config); + }) .subscribeOn(Schedulers.single()) .subscribe(); }