diff --git a/src/main/java/org/folio/search/integration/KafkaMessageListener.java b/src/main/java/org/folio/search/integration/KafkaMessageListener.java index aa1cb8682..cbda0c025 100644 --- a/src/main/java/org/folio/search/integration/KafkaMessageListener.java +++ b/src/main/java/org/folio/search/integration/KafkaMessageListener.java @@ -30,9 +30,9 @@ import org.folio.search.domain.dto.ResourceEvent; import org.folio.search.model.event.ConsortiumInstanceEvent; import org.folio.search.service.ResourceService; -import org.folio.search.service.TenantScopedExecutionService; 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; @@ -47,7 +47,7 @@ public class KafkaMessageListener { private final ResourceService resourceService; private final FolioMessageBatchProcessor folioMessageBatchProcessor; - private final TenantScopedExecutionService executionService; + private final SystemUserScopedExecutionService executionService; private final ConfigSynchronizationService configSynchronizationService; /** @@ -154,7 +154,7 @@ public void handleConsortiumInstanceEvents(List> entry : batchByTenant.entrySet()) { log.info("Consortium instance tenant [{}]", entry.getKey()); folioMessageBatchProcessor.consumeBatchWithFallback(batch, KAFKA_RETRY_TEMPLATE_NAME, - consortiumInstances -> executionService.executeTenantScoped(entry.getKey(), + consortiumInstances -> executionService.executeSystemUserScoped(entry.getKey(), () -> resourceService.indexConsortiumInstances(consortiumInstances)), KafkaMessageListener::logFailedConsortiumEvent); } @@ -214,7 +214,7 @@ private void indexResources(List batch, Consumer indexConsumer), + executionService.executeSystemUserScoped(entry.getKey(), () -> indexConsumer), KafkaMessageListener::logFailedEvent); } } diff --git a/src/main/java/org/folio/search/service/LanguageConfigService.java b/src/main/java/org/folio/search/service/LanguageConfigService.java index b6427d643..6b36bc879 100644 --- a/src/main/java/org/folio/search/service/LanguageConfigService.java +++ b/src/main/java/org/folio/search/service/LanguageConfigService.java @@ -29,7 +29,6 @@ public class LanguageConfigService { private final LanguageConfigRepository configRepository; private final LocalSearchFieldProvider searchFieldProvider; - private final TenantScopedExecutionService executionService; private final SearchConfigurationProperties searchConfiguration; /** diff --git a/src/main/java/org/folio/search/service/TenantScopedExecutionService.java b/src/main/java/org/folio/search/service/TenantScopedExecutionService.java deleted file mode 100644 index fa26b22df..000000000 --- a/src/main/java/org/folio/search/service/TenantScopedExecutionService.java +++ /dev/null @@ -1,72 +0,0 @@ -package org.folio.search.service; - -import static java.util.Collections.emptyMap; -import static java.util.Collections.singleton; -import static org.apache.commons.lang3.StringUtils.isNotBlank; - -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Callable; -import lombok.extern.log4j.Log4j2; -import org.folio.search.exception.ScopeExecutionException; -import org.folio.spring.DefaultFolioExecutionContext; -import org.folio.spring.FolioExecutionContext; -import org.folio.spring.FolioModuleMetadata; -import org.folio.spring.config.properties.FolioEnvironment; -import org.folio.spring.context.ExecutionContextBuilder; -import org.folio.spring.integration.XOkapiHeaders; -import org.folio.spring.scope.FolioExecutionContextSetter; -import org.folio.spring.service.SystemUserScopedExecutionService; -import org.springframework.context.annotation.Primary; -import org.springframework.stereotype.Component; -import org.springframework.stereotype.Service; - -@Log4j2 -@Service -@Primary -public class TenantScopedExecutionService extends SystemUserScopedExecutionService { - - private final FolioExecutionContext executionContext; - private final TenantScopedExecutionContextBuilder contextBuilder; - - public TenantScopedExecutionService(FolioExecutionContext executionContext, - ExecutionContextBuilder contextBuilder) { - super(executionContext, contextBuilder); - this.executionContext = executionContext; - this.contextBuilder = (TenantScopedExecutionContextBuilder) contextBuilder; - } - - public T executeTenantScoped(String tenantId, Callable action) { - Map> headers = executionContext == null ? emptyMap() : executionContext.getAllHeaders(); - try (var fex = new FolioExecutionContextSetter(contextBuilder.buildContext(tenantId, headers))) { - log.info("Executing tenant scoped action [tenant={}]", tenantId); - return action.call(); - } catch (Exception e) { - log.error("Failed to execute tenant scoped action", e); - throw new ScopeExecutionException(e); - } - } - - @Primary - @Component - protected static class TenantScopedExecutionContextBuilder extends ExecutionContextBuilder { - - private final FolioModuleMetadata moduleMetadata; - - TenantScopedExecutionContextBuilder(FolioEnvironment folioEnvironment, - FolioModuleMetadata moduleMetadata) { - super(folioEnvironment, moduleMetadata); - this.moduleMetadata = moduleMetadata; - } - - public FolioExecutionContext buildContext(String tenantId, Map> headers) { - Map> newHeaders = headers == null ? new HashMap<>() : new HashMap<>(headers); - if (isNotBlank(tenantId)) { - newHeaders.put(XOkapiHeaders.TENANT, singleton(tenantId)); - } - return new DefaultFolioExecutionContext(moduleMetadata, newHeaders); - } - - } -} diff --git a/src/main/java/org/folio/search/service/consortium/ConsortiumTenantExecutor.java b/src/main/java/org/folio/search/service/consortium/ConsortiumTenantExecutor.java index cf64ea3df..ec716fcd3 100644 --- a/src/main/java/org/folio/search/service/consortium/ConsortiumTenantExecutor.java +++ b/src/main/java/org/folio/search/service/consortium/ConsortiumTenantExecutor.java @@ -3,8 +3,8 @@ import java.util.function.Supplier; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; -import org.folio.search.service.TenantScopedExecutionService; import org.folio.spring.FolioExecutionContext; +import org.folio.spring.service.SystemUserScopedExecutionService; import org.springframework.stereotype.Component; @Log4j2 @@ -14,7 +14,7 @@ public class ConsortiumTenantExecutor { private final FolioExecutionContext folioExecutionContext; private final TenantProvider tenantProvider; - private final TenantScopedExecutionService scopedExecutionService; + private final SystemUserScopedExecutionService scopedExecutionService; public T execute(Supplier operation) { var contextTenantId = folioExecutionContext.getTenantId(); diff --git a/src/test/java/org/folio/search/integration/KafkaMessageListenerIT.java b/src/test/java/org/folio/search/integration/KafkaMessageListenerIT.java index d37ac9b8d..f36809fe4 100644 --- a/src/test/java/org/folio/search/integration/KafkaMessageListenerIT.java +++ b/src/test/java/org/folio/search/integration/KafkaMessageListenerIT.java @@ -39,14 +39,13 @@ import org.folio.search.integration.KafkaMessageListenerIT.KafkaListenerTestConfiguration; import org.folio.search.model.event.ConsortiumInstanceEvent; import org.folio.search.service.ResourceService; -import org.folio.search.service.TenantScopedExecutionService; import org.folio.search.service.config.ConfigSynchronizationService; import org.folio.search.service.metadata.LocalFileProvider; import org.folio.search.utils.JsonConverter; import org.folio.spring.DefaultFolioExecutionContext; import org.folio.spring.FolioExecutionContext; import org.folio.spring.FolioModuleMetadata; -import org.folio.spring.config.properties.FolioEnvironment; +import org.folio.spring.service.SystemUserScopedExecutionService; import org.folio.spring.testing.extension.EnableKafka; import org.folio.spring.testing.type.IntegrationTest; import org.folio.spring.tools.kafka.FolioKafkaProperties; @@ -100,7 +99,7 @@ class KafkaMessageListenerIT { @MockBean private ResourceService resourceService; @MockBean - private TenantScopedExecutionService executionService; + private SystemUserScopedExecutionService executionService; @MockBean private ConfigSynchronizationService configSynchronizationService; @@ -119,8 +118,6 @@ static void beforeAll(@Autowired KafkaAdminService kafkaAdminService) { void setUp() { lenient().doAnswer(invocation -> ((Callable) invocation.getArgument(1)).call()) .when(executionService).executeSystemUserScoped(any(), any()); - lenient().doAnswer(invocation -> ((Callable) invocation.getArgument(1)).call()) - .when(executionService).executeTenantScoped(any(), any()); } @Test @@ -274,7 +271,7 @@ private static ResourceEvent authorityEvent(String id) { @Import({ KafkaConfiguration.class, KafkaAutoConfiguration.class, FolioMessageBatchProcessor.class, KafkaAdminService.class, LocalFileProvider.class, JsonConverter.class, JacksonAutoConfiguration.class, - RetryTemplateConfiguration.class, TenantScopedExecutionService.class, FolioEnvironment.class + RetryTemplateConfiguration.class }) static class KafkaListenerTestConfiguration { diff --git a/src/test/java/org/folio/search/integration/KafkaMessageListenerTest.java b/src/test/java/org/folio/search/integration/KafkaMessageListenerTest.java index c43806612..e19a87d6f 100644 --- a/src/test/java/org/folio/search/integration/KafkaMessageListenerTest.java +++ b/src/test/java/org/folio/search/integration/KafkaMessageListenerTest.java @@ -48,9 +48,9 @@ import org.folio.search.model.event.ContributorResourceEvent; import org.folio.search.model.types.ResourceType; import org.folio.search.service.ResourceService; -import org.folio.search.service.TenantScopedExecutionService; import org.folio.search.service.config.ConfigSynchronizationService; import org.folio.search.utils.JsonConverter; +import org.folio.spring.service.SystemUserScopedExecutionService; import org.folio.spring.testing.type.UnitTest; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; @@ -80,14 +80,12 @@ class KafkaMessageListenerTest { @Mock private ConfigSynchronizationService configSynchronizationService; @Mock - private TenantScopedExecutionService executionService; + private SystemUserScopedExecutionService executionService; @BeforeEach void setUp() { lenient().doAnswer(invocation -> ((Callable) invocation.getArgument(1)).call()) .when(executionService).executeSystemUserScoped(any(), any()); - lenient().doAnswer(invocation -> ((Callable) invocation.getArgument(1)).call()) - .when(executionService).executeTenantScoped(any(), any()); } @Test diff --git a/src/test/java/org/folio/search/service/LanguageConfigServiceTest.java b/src/test/java/org/folio/search/service/LanguageConfigServiceTest.java index 2dfca8eb7..877e45e7c 100644 --- a/src/test/java/org/folio/search/service/LanguageConfigServiceTest.java +++ b/src/test/java/org/folio/search/service/LanguageConfigServiceTest.java @@ -18,6 +18,7 @@ import org.folio.search.repository.LanguageConfigRepository; import org.folio.search.service.metadata.LocalSearchFieldProvider; import org.folio.search.utils.SearchUtils; +import org.folio.spring.service.SystemUserScopedExecutionService; import org.folio.spring.testing.type.UnitTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -39,7 +40,7 @@ class LanguageConfigServiceTest { @Mock private LocalSearchFieldProvider searchFieldProvider; @Mock - private TenantScopedExecutionService executionService; + private SystemUserScopedExecutionService executionService; @Mock private SearchConfigurationProperties searchConfigurationProperties; diff --git a/src/test/java/org/folio/search/service/consortium/ConsortiumTenantExecutorTest.java b/src/test/java/org/folio/search/service/consortium/ConsortiumTenantExecutorTest.java index 0cbdecc54..13145d088 100644 --- a/src/test/java/org/folio/search/service/consortium/ConsortiumTenantExecutorTest.java +++ b/src/test/java/org/folio/search/service/consortium/ConsortiumTenantExecutorTest.java @@ -12,8 +12,8 @@ import java.util.concurrent.Callable; import java.util.function.Supplier; -import org.folio.search.service.TenantScopedExecutionService; import org.folio.spring.FolioExecutionContext; +import org.folio.spring.service.SystemUserScopedExecutionService; import org.folio.spring.testing.type.UnitTest; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -34,7 +34,7 @@ class ConsortiumTenantExecutorTest { @Mock private TenantProvider tenantProvider; @Mock - private TenantScopedExecutionService scopedExecutionService; + private SystemUserScopedExecutionService scopedExecutionService; @Spy @InjectMocks private ConsortiumTenantExecutor consortiumTenantExecutor; @@ -57,13 +57,13 @@ void execute_positive_consortiaMode() { when(folioExecutionContext.getTenantId()).thenReturn(TENANT_ID); when(tenantProvider.getTenant(TENANT_ID)).thenReturn(CENTRAL_TENANT_ID); doAnswer(invocationOnMock -> ((Callable) invocationOnMock.getArgument(1)).call()) - .when(scopedExecutionService).executeTenantScoped(eq(CENTRAL_TENANT_ID), any()); + .when(scopedExecutionService).executeSystemUserScoped(eq(CENTRAL_TENANT_ID), any()); var actual = consortiumTenantExecutor.execute(operation); assertThat(actual).isEqualTo(OPERATION_RESPONSE_MOCK); verify(operation).get(); - verify(scopedExecutionService).executeTenantScoped(eq(CENTRAL_TENANT_ID), any()); + verify(scopedExecutionService).executeSystemUserScoped(eq(CENTRAL_TENANT_ID), any()); } @Test @@ -72,13 +72,13 @@ void execute_positive_consortiaModeForTenant() { when(tenantProvider.getTenant(TENANT_ID)).thenReturn(CENTRAL_TENANT_ID); doAnswer(invocationOnMock -> ((Callable) invocationOnMock.getArgument(1)).call()) - .when(scopedExecutionService).executeTenantScoped(eq(CENTRAL_TENANT_ID), any()); + .when(scopedExecutionService).executeSystemUserScoped(eq(CENTRAL_TENANT_ID), any()); var actual = consortiumTenantExecutor.execute(TENANT_ID, operation); assertThat(actual).isEqualTo(OPERATION_RESPONSE_MOCK); verify(operation).get(); - verify(scopedExecutionService).executeTenantScoped(eq(CENTRAL_TENANT_ID), any()); + verify(scopedExecutionService).executeSystemUserScoped(eq(CENTRAL_TENANT_ID), any()); } @Test