From 183605fb34ddb815222724c8bf17afb538668f99 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 16:44:17 +0530 Subject: [PATCH 1/9] chore: Add cleanup and update stage for tenant at the server restart --- .../server/configurations/TenantConfig.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java new file mode 100644 index 000000000000..6d6fbe289809 --- /dev/null +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -0,0 +1,35 @@ +package com.appsmith.server.configurations; + +import com.appsmith.server.helpers.CollectionUtils; +import com.appsmith.server.repositories.CacheableRepositoryHelper; +import com.appsmith.server.services.TenantService; +import lombok.RequiredArgsConstructor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import static com.appsmith.external.models.BaseDomain.policySetToMap; + +@Configuration +@RequiredArgsConstructor +public class TenantConfig { + + private final TenantService tenantService; + private final CacheableRepositoryHelper cacheableRepositoryHelper; + + // Bean to cleanup the cache and update the default tenant policies on every server restart. This will make sure + // cache will be updated if we update the tenant via migrations. + @Bean + public void cleanupAndUpdateRefreshDefaultTenantPolicies() { + tenantService + .getDefaultTenantId() + .flatMap(cacheableRepositoryHelper::evictCachedTenant) + .then(tenantService.getDefaultTenant()) + .flatMap(tenant -> { + if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { + tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); + } + return tenantService.save(tenant); + }) + .subscribe(); + } +} From 142d9880a6d7d26d9c935a6f69932155ba9b6da2 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 16:50:08 +0530 Subject: [PATCH 2/9] chore: Add the reactive call in bean creation --- .../appsmith/server/configurations/TenantConfig.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 6d6fbe289809..eb6036e3d591 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -6,6 +6,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import reactor.core.publisher.Mono; import static com.appsmith.external.models.BaseDomain.policySetToMap; @@ -19,17 +20,18 @@ public class TenantConfig { // Bean to cleanup the cache and update the default tenant policies on every server restart. This will make sure // cache will be updated if we update the tenant via migrations. @Bean - public void cleanupAndUpdateRefreshDefaultTenantPolicies() { - tenantService + public Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { + return tenantService .getDefaultTenantId() .flatMap(cacheableRepositoryHelper::evictCachedTenant) .then(tenantService.getDefaultTenant()) .flatMap(tenant -> { if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); + return tenantService.save(tenant); } - return tenantService.save(tenant); + return Mono.just(tenant); }) - .subscribe(); + .then(); } } From f7f51842fe0a4149665047684c452244bb9657d7 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 16:52:02 +0530 Subject: [PATCH 3/9] chore: Revert mono call --- .../com/appsmith/server/configurations/TenantConfig.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index eb6036e3d591..2d000dd5f0a8 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -20,8 +20,8 @@ public class TenantConfig { // Bean to cleanup the cache and update the default tenant policies on every server restart. This will make sure // cache will be updated if we update the tenant via migrations. @Bean - public Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { - return tenantService + public void cleanupAndUpdateRefreshDefaultTenantPolicies() { + tenantService .getDefaultTenantId() .flatMap(cacheableRepositoryHelper::evictCachedTenant) .then(tenantService.getDefaultTenant()) @@ -32,6 +32,6 @@ public Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { } return Mono.just(tenant); }) - .then(); + .subscribe(); } } From 2b365f506d46ec86f26e7a01d3e45cea56859078 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 17:31:48 +0530 Subject: [PATCH 4/9] chore: Add event listener --- .../server/configurations/TenantConfig.java | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 2d000dd5f0a8..8e5dc9f34ec1 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -1,10 +1,12 @@ package com.appsmith.server.configurations; +import com.appsmith.server.domains.Tenant; import com.appsmith.server.helpers.CollectionUtils; -import com.appsmith.server.repositories.CacheableRepositoryHelper; import com.appsmith.server.services.TenantService; import lombok.RequiredArgsConstructor; -import org.springframework.context.annotation.Bean; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.event.ApplicationStartedEvent; +import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Configuration; import reactor.core.publisher.Mono; @@ -12,26 +14,26 @@ @Configuration @RequiredArgsConstructor -public class TenantConfig { +@Slf4j +public class TenantConfig implements ApplicationListener { private final TenantService tenantService; - private final CacheableRepositoryHelper cacheableRepositoryHelper; - // Bean to cleanup the cache and update the default tenant policies on every server restart. This will make sure - // cache will be updated if we update the tenant via migrations. - @Bean - public void cleanupAndUpdateRefreshDefaultTenantPolicies() { - tenantService - .getDefaultTenantId() - .flatMap(cacheableRepositoryHelper::evictCachedTenant) - .then(tenantService.getDefaultTenant()) - .flatMap(tenant -> { - if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { - tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); - return tenantService.save(tenant); - } - return Mono.just(tenant); - }) - .subscribe(); + // Method to cleanup the cache and update the default tenant policies if the policyMap is empty. This will make sure + // cache will be updated if we update the tenant via startup DB migrations. + public Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { + log.debug("Cleaning up and updating default tenant policies on server startup"); + return tenantService.getDefaultTenant().flatMap(tenant -> { + if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { + tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); + return tenantService.save(tenant); + } + return Mono.just(tenant); + }); + } + + @Override + public void onApplicationEvent(ApplicationStartedEvent event) { + cleanupAndUpdateRefreshDefaultTenantPolicies().block(); } } From a475a803877f2336004cdf2844e575d4b619a4d0 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 17:34:09 +0530 Subject: [PATCH 5/9] chore: Make method private --- .../java/com/appsmith/server/configurations/TenantConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 8e5dc9f34ec1..e243da08885c 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -21,7 +21,7 @@ public class TenantConfig implements ApplicationListener cleanupAndUpdateRefreshDefaultTenantPolicies() { + private Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { log.debug("Cleaning up and updating default tenant policies on server startup"); return tenantService.getDefaultTenant().flatMap(tenant -> { if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { From 110f514f759057ddae14c8b10a534f710283f5b1 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 17:42:41 +0530 Subject: [PATCH 6/9] fix: Testcases for consolidatedAPI --- .../com/appsmith/server/configurations/TenantConfig.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index e243da08885c..1571fc9a048b 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -2,7 +2,7 @@ import com.appsmith.server.domains.Tenant; import com.appsmith.server.helpers.CollectionUtils; -import com.appsmith.server.services.TenantService; +import com.appsmith.server.repositories.TenantRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.boot.context.event.ApplicationStartedEvent; @@ -17,16 +17,16 @@ @Slf4j public class TenantConfig implements ApplicationListener { - private final TenantService tenantService; + private final TenantRepository tenantRepository; // Method to cleanup the cache and update the default tenant policies if the policyMap is empty. This will make sure // cache will be updated if we update the tenant via startup DB migrations. private Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { log.debug("Cleaning up and updating default tenant policies on server startup"); - return tenantService.getDefaultTenant().flatMap(tenant -> { + return tenantRepository.findBySlug("default").flatMap(tenant -> { if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); - return tenantService.save(tenant); + return this.tenantRepository.save(tenant); } return Mono.just(tenant); }); From 36534dd60742426bea8c5a6136031cfaba99944a Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 17:59:46 +0530 Subject: [PATCH 7/9] chore: Add cache eviction step --- .../com/appsmith/server/configurations/TenantConfig.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 1571fc9a048b..847dd6bba953 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -2,6 +2,7 @@ import com.appsmith.server.domains.Tenant; import com.appsmith.server.helpers.CollectionUtils; +import com.appsmith.server.repositories.CacheableRepositoryHelper; import com.appsmith.server.repositories.TenantRepository; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -18,6 +19,7 @@ public class TenantConfig implements ApplicationListener { private final TenantRepository tenantRepository; + private final CacheableRepositoryHelper cachableRepositoryHelper; // Method to cleanup the cache and update the default tenant policies if the policyMap is empty. This will make sure // cache will be updated if we update the tenant via startup DB migrations. @@ -26,7 +28,9 @@ private Mono cleanupAndUpdateRefreshDefaultTenantPolicies() { return tenantRepository.findBySlug("default").flatMap(tenant -> { if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); - return this.tenantRepository.save(tenant); + return cachableRepositoryHelper + .evictCachedTenant(tenant.getId()) + .then(tenantRepository.save(tenant)); } return Mono.just(tenant); }); From fc4058a38b11a1482ed82b9692c0b1c7d95dc3d2 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 18:03:04 +0530 Subject: [PATCH 8/9] chore: Add comment --- .../java/com/appsmith/server/configurations/TenantConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 847dd6bba953..8c7c0c3ed21f 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -23,6 +23,7 @@ public class TenantConfig implements ApplicationListener cleanupAndUpdateRefreshDefaultTenantPolicies() { log.debug("Cleaning up and updating default tenant policies on server startup"); return tenantRepository.findBySlug("default").flatMap(tenant -> { From e288cfe1084bdbf2104a656bf60eb9c24708fe77 Mon Sep 17 00:00:00 2001 From: Abhijeet Date: Tue, 20 Aug 2024 18:11:05 +0530 Subject: [PATCH 9/9] chore: Update with constant --- .../java/com/appsmith/server/configurations/TenantConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java index 8c7c0c3ed21f..544430ca03ca 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/configurations/TenantConfig.java @@ -1,5 +1,6 @@ package com.appsmith.server.configurations; +import com.appsmith.server.constants.FieldName; import com.appsmith.server.domains.Tenant; import com.appsmith.server.helpers.CollectionUtils; import com.appsmith.server.repositories.CacheableRepositoryHelper; @@ -26,7 +27,7 @@ public class TenantConfig implements ApplicationListener cleanupAndUpdateRefreshDefaultTenantPolicies() { log.debug("Cleaning up and updating default tenant policies on server startup"); - return tenantRepository.findBySlug("default").flatMap(tenant -> { + return tenantRepository.findBySlug(FieldName.DEFAULT).flatMap(tenant -> { if (CollectionUtils.isNullOrEmpty(tenant.getPolicyMap())) { tenant.setPolicyMap(policySetToMap(tenant.getPolicies())); return cachableRepositoryHelper