RED-9736: Valid file formats cache will not scale with persistence-service

* add redis caching for valid file formats
This commit is contained in:
maverickstuder 2024-08-07 14:59:32 +02:00
parent 3af71f2760
commit 4016a26c2c
2 changed files with 23 additions and 26 deletions

View File

@ -21,6 +21,7 @@ public class PersistenceServiceExternalApiCacheConfiguration {
public static final String RATE_LIMITER_CACHE = "buckets"; public static final String RATE_LIMITER_CACHE = "buckets";
public static final String ACL_CACHE = "acl"; public static final String ACL_CACHE = "acl";
public static final String OTT_CACHE = "ott"; public static final String OTT_CACHE = "ott";
public static final String VALID_FILE_FORMATS_CACHE = "validFileFormats";
@Bean @Bean
@ -49,7 +50,8 @@ public class PersistenceServiceExternalApiCacheConfiguration {
RedisCacheConfiguration.defaultCacheConfig() RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(1)) .entryTtl(Duration.ofMinutes(1))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer()))) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new JdkSerializationRedisSerializer())))
.withCacheConfiguration(OTT_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10))); .withCacheConfiguration(OTT_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(10)))
.withCacheConfiguration(VALID_FILE_FORMATS_CACHE, RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofMinutes(60)).disableCachingNullValues());
} }
} }

View File

@ -1,13 +1,17 @@
package com.iqser.red.service.persistence.management.v1.processor.service; package com.iqser.red.service.persistence.management.v1.processor.service;
import static com.iqser.red.service.persistence.management.v1.processor.service.LicenseUtilityService.*; import static com.iqser.red.service.persistence.management.v1.processor.cache.PersistenceServiceExternalApiCacheConfiguration.VALID_FILE_FORMATS_CACHE;
import static com.iqser.red.service.persistence.management.v1.processor.service.LicenseUtilityService.ALL_FILE_FORMATS;
import static com.iqser.red.service.persistence.management.v1.processor.service.LicenseUtilityService.FILE_FORMATS_EXCLUDING_MS_OFFICE;
import static com.iqser.red.service.persistence.management.v1.processor.service.LicenseUtilityService.LICENSE_OBJECT_ID;
import static com.iqser.red.service.persistence.management.v1.processor.service.LicenseUtilityService.SUPPORT_MS_OFFICE_FORMATS_FEATURE;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.Feature; import com.iqser.red.service.persistence.service.v1.api.shared.model.license.Feature;
@ -28,8 +32,6 @@ public class FileFormatValidationService {
final LicenseUtilityService licenseUtilityService; final LicenseUtilityService licenseUtilityService;
static Map<String, List<String>> validFileFormatsCache = new HashMap<>();
public List<String> getAllFileFormats() { public List<String> getAllFileFormats() {
@ -37,14 +39,11 @@ public class FileFormatValidationService {
} }
@Cacheable(value = VALID_FILE_FORMATS_CACHE, key = "#tenantId")
public List<String> getValidFileFormatsForTenant(String tenantId) { public List<String> getValidFileFormatsForTenant(String tenantId) {
boolean supportMSOfficeFormats = false; boolean supportMSOfficeFormats = false;
if (validFileFormatsCache.containsKey(tenantId)) {
return validFileFormatsCache.get(tenantId);
} else {
Optional<License> optionalLicense = getActiveLicense(tenantId); Optional<License> optionalLicense = getActiveLicense(tenantId);
if (optionalLicense.isPresent()) { if (optionalLicense.isPresent()) {
Optional<Feature> optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures() Optional<Feature> optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures()
@ -54,18 +53,14 @@ public class FileFormatValidationService {
supportMSOfficeFormats = optionalSupportMSOfficeFormatsFeature.isPresent() ? (Boolean) optionalSupportMSOfficeFormatsFeature.get().getValue() : false; supportMSOfficeFormats = optionalSupportMSOfficeFormatsFeature.isPresent() ? (Boolean) optionalSupportMSOfficeFormatsFeature.get().getValue() : false;
} }
List<String> validFileFormats = supportMSOfficeFormats ? ALL_FILE_FORMATS : FILE_FORMATS_EXCLUDING_MS_OFFICE;
validFileFormatsCache.put(tenantId, validFileFormats); return supportMSOfficeFormats ? ALL_FILE_FORMATS : FILE_FORMATS_EXCLUDING_MS_OFFICE;
return validFileFormats;
}
} }
@CacheEvict(value = VALID_FILE_FORMATS_CACHE, key = "#tenantId")
public void evictValidFileFormatsForTenant(String tenantId) { public void evictValidFileFormatsForTenant(String tenantId) {
// empty
validFileFormatsCache.remove(tenantId);
} }