RED-9736: Valid file formats cache will not scale with persistence-service
* add redis caching for valid file formats
This commit is contained in:
parent
3af71f2760
commit
4016a26c2c
@ -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());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,35 +39,28 @@ 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)) {
|
Optional<License> optionalLicense = getActiveLicense(tenantId);
|
||||||
return validFileFormatsCache.get(tenantId);
|
if (optionalLicense.isPresent()) {
|
||||||
|
Optional<Feature> optionalSupportMSOfficeFormatsFeature = optionalLicense.get().getFeatures()
|
||||||
|
.stream()
|
||||||
|
.filter(f -> f.getName().equals(SUPPORT_MS_OFFICE_FORMATS_FEATURE))
|
||||||
|
.findFirst();
|
||||||
|
|
||||||
} else {
|
supportMSOfficeFormats = optionalSupportMSOfficeFormatsFeature.isPresent() ? (Boolean) optionalSupportMSOfficeFormatsFeature.get().getValue() : false;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return supportMSOfficeFormats ? ALL_FILE_FORMATS : FILE_FORMATS_EXCLUDING_MS_OFFICE;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@CacheEvict(value = VALID_FILE_FORMATS_CACHE, key = "#tenantId")
|
||||||
public void evictValidFileFormatsForTenant(String tenantId) {
|
public void evictValidFileFormatsForTenant(String tenantId) {
|
||||||
|
// empty
|
||||||
validFileFormatsCache.remove(tenantId);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user