diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Tenant.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Tenant.java index 962048a7ec79..2790bc63f175 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Tenant.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/Tenant.java @@ -10,15 +10,13 @@ import org.springframework.data.annotation.Transient; import org.springframework.data.mongodb.core.mapping.Document; -import java.io.Serializable; - @Getter @Setter @ToString @NoArgsConstructor @Document @FieldNameConstants -public class Tenant extends BaseDomain implements Serializable { +public class Tenant extends BaseDomain { @Unique String slug; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/TenantConfiguration.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/TenantConfiguration.java index 1496e345a9d2..e4b293b814a7 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/TenantConfiguration.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/TenantConfiguration.java @@ -4,8 +4,6 @@ import lombok.Data; import lombok.EqualsAndHashCode; -import java.io.Serializable; - @Data @EqualsAndHashCode(callSuper = true) -public class TenantConfiguration extends TenantConfigurationCE implements Serializable {} +public class TenantConfiguration extends TenantConfigurationCE {} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ce/TenantConfigurationCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ce/TenantConfigurationCE.java index c92f20a87cb5..ad8c610c41f5 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ce/TenantConfigurationCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/domains/ce/TenantConfigurationCE.java @@ -10,13 +10,12 @@ import lombok.Data; import org.apache.commons.lang3.ObjectUtils; -import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.Map; @Data -public class TenantConfigurationCE implements Serializable { +public class TenantConfigurationCE { private String googleMapsKey; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCE.java index 8bf2c469b9aa..b86255051243 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCE.java @@ -1,6 +1,5 @@ package com.appsmith.server.repositories.ce; -import com.appsmith.server.domains.Tenant; import com.appsmith.server.domains.User; import reactor.core.publisher.Mono; @@ -19,8 +18,4 @@ public interface CacheableRepositoryHelperCE { Mono getDefaultTenantId(); Mono getInstanceAdminPermissionGroupId(); - - Mono fetchDefaultTenant(String tenantId); - - Mono evictCachedTenant(String tenantId); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java index 9db94b33ccf5..1415d880d9cc 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/CacheableRepositoryHelperCEImpl.java @@ -6,7 +6,6 @@ import com.appsmith.server.domains.Config; import com.appsmith.server.domains.PermissionGroup; import com.appsmith.server.domains.Tenant; -import com.appsmith.server.domains.TenantConfiguration; import com.appsmith.server.domains.User; import com.appsmith.server.domains.Workspace; import com.appsmith.server.exceptions.AppsmithError; @@ -167,33 +166,4 @@ public Mono getInstanceAdminPermissionGroupId() { .doOnSuccess(permissionGroupId -> inMemoryCacheableRepositoryHelper.setInstanceAdminPermissionGroupId(permissionGroupId)); } - - /** - * Returns the default tenant from the cache if present. - * If not present in cache, then it fetches the default tenant from the database and adds to redis. - * @param tenantId - * @return - */ - @Cache(cacheName = "tenant", key = "{#tenantId}") - @Override - public Mono fetchDefaultTenant(String tenantId) { - BridgeQuery defaultTenantCriteria = Bridge.equal(Tenant.Fields.slug, FieldName.DEFAULT); - BridgeQuery notDeletedCriteria = notDeleted(); - BridgeQuery andCriteria = Bridge.and(defaultTenantCriteria, notDeletedCriteria); - Query query = new Query(); - query.addCriteria(andCriteria); - - return mongoOperations.findOne(query, Tenant.class).map(tenant -> { - if (tenant.getTenantConfiguration() == null) { - tenant.setTenantConfiguration(new TenantConfiguration()); - } - return tenant; - }); - } - - @CacheEvict(cacheName = "tenant", key = "{#tenantId}") - @Override - public Mono evictCachedTenant(String tenantId) { - return Mono.empty().then(); - } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/TenantRepositoryCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/TenantRepositoryCE.java index 7cad8f0f12a4..5f6cbe099db7 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/TenantRepositoryCE.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/repositories/ce/TenantRepositoryCE.java @@ -5,7 +5,6 @@ import reactor.core.publisher.Mono; public interface TenantRepositoryCE extends BaseRepository, CustomTenantRepositoryCE { - // Use tenantService.getDefaultTenant() instead of this method as it is cached to redis. - @Deprecated(forRemoval = true) + Mono findBySlug(String slug); } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java index 874f46f2f34a..ba038be16b12 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/TenantServiceImpl.java @@ -1,7 +1,6 @@ package com.appsmith.server.services; import com.appsmith.server.helpers.FeatureFlagMigrationHelper; -import com.appsmith.server.repositories.CacheableRepositoryHelper; import com.appsmith.server.repositories.TenantRepository; import com.appsmith.server.services.ce.TenantServiceCEImpl; import com.appsmith.server.solutions.EnvManager; @@ -20,15 +19,7 @@ public TenantServiceImpl( AnalyticsService analyticsService, ConfigService configService, @Lazy EnvManager envManager, - FeatureFlagMigrationHelper featureFlagMigrationHelper, - CacheableRepositoryHelper cacheableRepositoryHelper) { - super( - validator, - repository, - analyticsService, - configService, - envManager, - featureFlagMigrationHelper, - cacheableRepositoryHelper); + FeatureFlagMigrationHelper featureFlagMigrationHelper) { + super(validator, repository, analyticsService, configService, envManager, featureFlagMigrationHelper); } } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CacheableFeatureFlagHelperCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CacheableFeatureFlagHelperCEImpl.java index b773e6c6b548..08742ad940f4 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CacheableFeatureFlagHelperCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/CacheableFeatureFlagHelperCEImpl.java @@ -45,6 +45,7 @@ @Slf4j @RequiredArgsConstructor public class CacheableFeatureFlagHelperCEImpl implements CacheableFeatureFlagHelperCE { + private final TenantRepository tenantRepository; private final ConfigService configService; private final CloudServicesConfig cloudServicesConfig; diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java index 9656023e773e..c40c0f27e843 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/TenantServiceCEImpl.java @@ -12,7 +12,6 @@ import com.appsmith.server.exceptions.AppsmithException; import com.appsmith.server.helpers.CollectionUtils; import com.appsmith.server.helpers.FeatureFlagMigrationHelper; -import com.appsmith.server.repositories.CacheableRepositoryHelper; import com.appsmith.server.repositories.TenantRepository; import com.appsmith.server.services.AnalyticsService; import com.appsmith.server.services.BaseService; @@ -40,21 +39,17 @@ public class TenantServiceCEImpl extends BaseService getDefaultTenantId() { if (StringUtils.hasLength(tenantId)) { return Mono.just(tenantId); } + return repository.findBySlug(FieldName.DEFAULT).map(Tenant::getId).map(tenantId -> { // Set the cache value before returning. this.tenantId = tenantId; @@ -73,7 +69,6 @@ public Mono getDefaultTenantId() { @Override public Mono updateTenantConfiguration(String tenantId, TenantConfiguration tenantConfiguration) { - Mono evictTenantCache = cacheableRepositoryHelper.evictCachedTenant(tenantId); return repository .findById(tenantId, MANAGE_TENANT) .switchIfEmpty(Mono.error( @@ -94,7 +89,6 @@ public Mono updateTenantConfiguration(String tenantId, TenantConfigurati return Mono.empty(); }); } - return envMono.then(Mono.zip(Mono.just(oldtenantConfiguration), Mono.just(tenant))); }) .flatMap(tuple2 -> { @@ -102,15 +96,7 @@ public Mono updateTenantConfiguration(String tenantId, TenantConfigurati TenantConfiguration oldConfig = tuple2.getT1(); AppsmithBeanUtils.copyNestedNonNullProperties(tenantConfiguration, oldConfig); tenant.setTenantConfiguration(oldConfig); - Mono updatedTenantMono = repository - .updateById(tenantId, tenant, MANAGE_TENANT) - .cache(); - // Firstly updating the Tenant object in the database and then evicting the cache. - // returning the updatedTenant, notice the updatedTenantMono is cached using .cache() - // hence it will not be evaluated again - return updatedTenantMono - .then(Mono.defer(() -> evictTenantCache)) - .then(updatedTenantMono); + return repository.updateById(tenantId, tenant, MANAGE_TENANT); }); } @@ -165,9 +151,16 @@ public Mono getTenantConfiguration() { @Override public Mono getDefaultTenant() { - // Fetching Tenant from redis cache - return getDefaultTenantId() - .flatMap(tenantId -> cacheableRepositoryHelper.fetchDefaultTenant(tenantId)) + // Get the default tenant object from the DB and then populate the relevant user permissions in that + // We are doing this differently because `findBySlug` is a Mongo JPA query and not a custom Appsmith query + return repository + .findBySlug(FieldName.DEFAULT) + .map(tenant -> { + if (tenant.getTenantConfiguration() == null) { + tenant.setTenantConfiguration(new TenantConfiguration()); + } + return tenant; + }) .flatMap(tenant -> repository.setUserPermissionsInObject(tenant).switchIfEmpty(Mono.just(tenant))); } @@ -199,12 +192,9 @@ protected Mono getClientPertinentTenant(Tenant dbTenant, Tenant clientTe return Mono.just(clientTenant); } - // This function is used to save the tenant object in the database and evict the cache @Override public Mono save(Tenant tenant) { - Mono evictTenantCache = cacheableRepositoryHelper.evictCachedTenant(tenantId); - Mono savedTenantMono = repository.save(tenant).cache(); - return savedTenantMono.then(Mono.defer(() -> evictTenantCache)).then(savedTenantMono); + return repository.save(tenant); } /** @@ -252,19 +242,6 @@ public Mono retrieveById(String id) { return repository.findById(id); } - /** - * This function updates the tenant object in the database and evicts the cache - * @param tenantId - * @param tenant - * @return - */ - @Override - public Mono update(String tenantId, Tenant tenant) { - Mono evictTenantCache = cacheableRepositoryHelper.evictCachedTenant(tenantId); - Mono updatedTenantMono = super.update(tenantId, tenant).cache(); - return updatedTenantMono.then(Mono.defer(() -> evictTenantCache)).then(updatedTenantMono); - } - /** * This function checks if the tenant needs to be restarted and restarts after the feature flag migrations are * executed. diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/TenantServiceCETest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/TenantServiceCETest.java index bca2dcf205a5..4710801319ff 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/TenantServiceCETest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/ce/TenantServiceCETest.java @@ -88,14 +88,12 @@ public void setup() throws IOException { @AfterEach public void cleanup() { - Tenant updatedTenant = new Tenant(); - updatedTenant.setTenantConfiguration(originalTenantConfiguration); tenantService - .getDefaultTenantId() - .flatMap(tenantId -> tenantService.update(tenantId, updatedTenant)) - .doOnError(error -> { - System.err.println("Error during cleanup: " + error.getMessage()); - }) + .getDefaultTenant() + .flatMap(tenant -> tenantRepository.updateAndReturn( + tenant.getId(), + Bridge.update().set(Tenant.Fields.tenantConfiguration, originalTenantConfiguration), + Optional.empty())) .block(); }