RED-9736: Valid file formats cache will not scale with persistence-service #652
@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -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
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user