Skip to content

Commit

Permalink
fix(browse-classifications): invalidate reference-data cache for clas…
Browse files Browse the repository at this point in the history
…sification-type event (#536)

Refs: MSEARCH-683
Signed-off-by: psmagin <[email protected]>
  • Loading branch information
psmagin authored Mar 13, 2024
1 parent a51122e commit cd2563c
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.apache.commons.collections4.MapUtils.getString;
import static org.apache.commons.lang3.RegExUtils.replaceAll;
import static org.folio.search.configuration.RetryTemplateConfiguration.KAFKA_RETRY_TEMPLATE_NAME;
import static org.folio.search.configuration.SearchCacheNames.REFERENCE_DATA_CACHE;
import static org.folio.search.domain.dto.ResourceEventType.CREATE;
import static org.folio.search.domain.dto.ResourceEventType.DELETE;
import static org.folio.search.domain.dto.ResourceEventType.REINDEX;
Expand Down Expand Up @@ -33,6 +34,7 @@
import org.folio.search.service.config.ConfigSynchronizationService;
import org.folio.search.utils.KafkaConstants;
import org.folio.spring.service.SystemUserScopedExecutionService;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -163,6 +165,7 @@ public void handleConsortiumInstanceEvents(List<ConsumerRecord<String, Consortiu
groupId = "#{folioKafkaProperties.listener['classification-type'].groupId}",
concurrency = "#{folioKafkaProperties.listener['classification-type'].concurrency}",
topicPattern = "#{folioKafkaProperties.listener['classification-type'].topicPattern}")
@CacheEvict(cacheNames = REFERENCE_DATA_CACHE, allEntries = true)
public void handleClassificationTypeEvents(List<ConsumerRecord<String, ResourceEvent>> consumerRecords) {
log.info("Processing classification-type events from Kafka [number of events: {}]", consumerRecords.size());
var batch = consumerRecords.stream()
Expand Down
17 changes: 17 additions & 0 deletions src/test/java/org/folio/search/controller/ConfigIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import static org.awaitility.Awaitility.await;
import static org.awaitility.Durations.ONE_MINUTE;
import static org.awaitility.Durations.TWO_SECONDS;
import static org.folio.search.configuration.SearchCacheNames.REFERENCE_DATA_CACHE;
import static org.folio.search.domain.dto.TenantConfiguredFeature.SEARCH_ALL_FIELDS;
import static org.folio.search.sample.SampleInstances.getSemanticWebAsMap;
import static org.folio.search.support.base.ApiEndpoints.featureConfigPath;
Expand All @@ -25,6 +26,7 @@

import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import lombok.SneakyThrows;
import org.folio.search.domain.dto.BrowseConfig;
Expand Down Expand Up @@ -291,6 +293,21 @@ void browseConfigs_synchronised_whenDeleteClassificationTypeEventReceived() {
okapi.wireMockServer().removeStub(stub);
}

@Test
void referenceDataCacheInvalidates_whenClassificationTypeEventReceived() {
var cacheKey = "cache-test-key";
var referenceDataCache = Objects.requireNonNull(cacheManager.getCache(REFERENCE_DATA_CACHE));
referenceDataCache.put(cacheKey, UUID.randomUUID());
assertThat(referenceDataCache.get(cacheKey)).isNotNull();

kafkaTemplate.send(inventoryClassificationTopic(), randomId(), new ResourceEvent()
.resourceName(ResourceType.CLASSIFICATION_TYPE.getValue())
);

await().atMost(ONE_MINUTE).pollInterval(TWO_SECONDS)
.untilAsserted(() -> assertThat(referenceDataCache.get(cacheKey)).isNull());
}

@SneakyThrows
private Map<String, Object> getIndexedInstanceById(String id) {
final var searchRequest = new SearchRequest()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ public abstract class BaseIntegrationTest {
protected static KafkaTemplate<String, ResourceEvent> kafkaTemplate;
protected static OkapiConfiguration okapi;
protected static RestHighLevelClient elasticClient;
protected static CacheManager cacheManager;

@RegisterExtension
static OkapiExtension okapiExtension =
Expand All @@ -85,12 +86,14 @@ public abstract class BaseIntegrationTest {
static void setUpDefaultTenant(
@Autowired MockMvc mockMvc,
@Autowired KafkaTemplate<String, ResourceEvent> kafkaTemplate,
@Autowired RestHighLevelClient restHighLevelClient) {
@Autowired RestHighLevelClient restHighLevelClient,
@Autowired CacheManager cacheManager) {
setEnvProperty("folio-test");
BaseIntegrationTest.mockMvc = mockMvc;
BaseIntegrationTest.kafkaTemplate = kafkaTemplate;
BaseIntegrationTest.inventoryApi = new InventoryApi(kafkaTemplate);
BaseIntegrationTest.elasticClient = restHighLevelClient;
BaseIntegrationTest.cacheManager = cacheManager;
}

@BeforeAll
Expand Down

0 comments on commit cd2563c

Please sign in to comment.