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

Merged
maverick.studer merged 1 commits from RED-9376 into master 2024-08-08 09:24:39 +02:00
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 ACL_CACHE = "acl";
public static final String OTT_CACHE = "ott";
public static final String VALID_FILE_FORMATS_CACHE = "validFileFormats";
@Bean
@ -49,7 +50,8 @@ public class PersistenceServiceExternalApiCacheConfiguration {
RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(1))
.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;
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.Map;
import java.util.Objects;
import java.util.Optional;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.service.v1.api.shared.model.license.Feature;
@ -28,8 +32,6 @@ public class FileFormatValidationService {
final LicenseUtilityService licenseUtilityService;
static Map<String, List<String>> validFileFormatsCache = new HashMap<>();
public List<String> getAllFileFormats() {
@ -37,35 +39,28 @@ public class FileFormatValidationService {
}
@Cacheable(value = VALID_FILE_FORMATS_CACHE, key = "#tenantId")
public List<String> getValidFileFormatsForTenant(String tenantId) {
boolean supportMSOfficeFormats = false;
if (validFileFormatsCache.containsKey(tenantId)) {
return validFileFormatsCache.get(tenantId);
Optional<License> optionalLicense = getActiveLicense(tenantId);
if (optionalLicense.isPresent()) {
Optional<Feature> optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures()
.stream()
.filter(f -> f.getName().equals(SUPPORT_MS_OFFICE_FORMATS_FEATURE))
.findFirst();
} else {
Optional<License> optionalLicense = getActiveLicense(tenantId);
if (optionalLicense.isPresent()) {
Optional<Feature> optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures()
.stream()
.filter(f -> f.getName().equals(SUPPORT_MS_OFFICE_FORMATS_FEATURE))
.findFirst();
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 validFileFormats;
supportMSOfficeFormats = optionalSupportMSOfficeFormatsFeature.isPresent() ? (Boolean) optionalSupportMSOfficeFormatsFeature.get().getValue() : false;
}
return supportMSOfficeFormats ? ALL_FILE_FORMATS : FILE_FORMATS_EXCLUDING_MS_OFFICE;
}
@CacheEvict(value = VALID_FILE_FORMATS_CACHE, key = "#tenantId")
public void evictValidFileFormatsForTenant(String tenantId) {
validFileFormatsCache.remove(tenantId);
// empty
}