Skip to content

Commit 2c3622f

Browse files
fix: eliminate use of user-tenants on tenant enablement (#917)
Use passed centralTenantId parameter instead for all tenant-dependant calls
1 parent a470d74 commit 2c3622f

16 files changed

+131
-69
lines changed

NEWS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
* Change spring-kafka-test scope from compile to test ([MSEARCH-1148](https://folio-org.atlassian.net/browse/MSEARCH-1148))
8989
* Fix race condition in shouldIndexInstanceCallNumber\_createNewDocument\_onItemCreate ([MSEARCH-1149](https://folio-org.atlassian.net/browse/MSEARCH-1149))
9090
* Use GitHub Workflows for builds ([MSEARCH-1158](https://folio-org.atlassian.net/browse/MSEARCH-1158))
91+
* Eliminate use of user-tenants on tenant enablement to avoid invalid caches
9192

9293
### Dependencies
9394
* Bump `LIB_NAME` from `OLD_VERSION` to `NEW_VERSION`

src/main/java/org/folio/search/service/IndexService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,13 @@
3131
import org.folio.search.service.es.SearchSettingsHelper;
3232
import org.folio.search.service.metadata.ResourceDescriptionService;
3333
import org.opensearch.action.support.clustermanager.AcknowledgedResponse;
34+
import org.springframework.context.annotation.Primary;
3435
import org.springframework.stereotype.Service;
3536
import tools.jackson.databind.JsonNode;
3637
import tools.jackson.databind.node.ObjectNode;
3738

3839
@Log4j2
40+
@Primary
3941
@Service
4042
@RequiredArgsConstructor
4143
public class IndexService {

src/main/java/org/folio/search/service/LanguageConfigService.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,22 +16,19 @@
1616
import org.folio.search.domain.dto.LanguageConfig;
1717
import org.folio.search.domain.dto.LanguageConfigs;
1818
import org.folio.search.exception.ValidationException;
19-
import org.folio.search.model.config.LanguageConfigEntity;
2019
import org.folio.search.repository.LanguageConfigRepository;
2120
import org.folio.search.service.metadata.LocalSearchFieldProvider;
22-
import org.folio.spring.service.SystemUserScopedExecutionService;
2321
import org.springframework.cache.annotation.CacheEvict;
2422
import org.springframework.cache.annotation.Cacheable;
2523
import org.springframework.stereotype.Service;
2624

2725
@Log4j2
2826
@Service
2927
@AllArgsConstructor
30-
public class LanguageConfigService {
28+
public class LanguageConfigService implements LanguageConfigServiceI {
3129

3230
private final LanguageConfigRepository configRepository;
3331
private final LocalSearchFieldProvider searchFieldProvider;
34-
private final SystemUserScopedExecutionService executionService;
3532
private final SearchConfigurationProperties searchConfiguration;
3633

3734
/**
@@ -126,17 +123,4 @@ public Set<String> getAllLanguageCodes() {
126123
.map(LanguageConfig::getCode)
127124
.collect(Collectors.toSet());
128125
}
129-
130-
/**
131-
* Returns all supported language codes for tenant.
132-
*
133-
* @param tenant tenant id as {@link String} object
134-
* @return {@link Set} with language configuration codes.
135-
*/
136-
public Set<String> getAllLanguagesForTenant(String tenant) {
137-
return executionService.executeSystemUserScoped(tenant,
138-
() -> configRepository.findAll().stream()
139-
.map(LanguageConfigEntity::getCode)
140-
.collect(Collectors.toSet()));
141-
}
142126
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package org.folio.search.service;
2+
3+
import java.util.Set;
4+
import org.folio.search.domain.dto.LanguageConfig;
5+
import org.folio.search.domain.dto.LanguageConfigs;
6+
7+
public interface LanguageConfigServiceI {
8+
LanguageConfig create(LanguageConfig languageConfig);
9+
10+
LanguageConfig update(String code, LanguageConfig languageConfig);
11+
12+
void delete(String code);
13+
14+
LanguageConfigs getAll();
15+
16+
Set<String> getAllLanguageCodes();
17+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.folio.search.service;
2+
3+
import org.folio.search.client.ResourceReindexClient;
4+
import org.folio.search.repository.IndexNameProvider;
5+
import org.folio.search.repository.IndexRepository;
6+
import org.folio.search.service.consortium.SimpleTenantProvider;
7+
import org.folio.search.service.es.SearchSettingsHelper;
8+
import org.folio.search.service.es.TenantInitMappingsHelper;
9+
import org.folio.search.service.metadata.ResourceDescriptionService;
10+
import org.springframework.stereotype.Service;
11+
12+
/**
13+
* A {@link IndexService} variant used during tenant initialization.
14+
* Uses {@link TenantInitMappingsHelper} (which injects {@link LanguageConfigService} directly
15+
* instead of the consortium decorator) and an {@link IndexNameProvider} backed by
16+
* {@link SimpleTenantProvider} (which returns the tenant id as-is without consortium lookup).
17+
* This prevents consortium tenant executor calls and cached cross-tenant responses
18+
* during tenant initialization index creation.
19+
*/
20+
@Service
21+
public class TenantInitIndexService extends IndexService {
22+
23+
public TenantInitIndexService(IndexRepository indexRepository,
24+
TenantInitMappingsHelper mappingHelper,
25+
SearchSettingsHelper settingsHelper,
26+
ResourceReindexClient resourceReindexClient,
27+
ResourceDescriptionService resourceDescriptionService,
28+
SimpleTenantProvider simpleTenantProvider,
29+
LocationService locationService) {
30+
super(indexRepository,
31+
mappingHelper,
32+
settingsHelper,
33+
resourceReindexClient,
34+
resourceDescriptionService,
35+
new IndexNameProvider(simpleTenantProvider),
36+
simpleTenantProvider,
37+
locationService);
38+
}
39+
}
40+

src/main/java/org/folio/search/service/consortium/ConsortiumTenantProvider.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.folio.search.service.consortium;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.springframework.context.annotation.Primary;
45
import org.springframework.stereotype.Component;
56

7+
@Primary
68
@Component
79
@RequiredArgsConstructor
810
public class ConsortiumTenantProvider implements TenantProvider {

src/main/java/org/folio/search/service/consortium/ConsortiumTenantService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public List<String> getConsortiumTenants(String tenantId) {
7777
.map(this::getTenantsList)
7878
.orElse(Collections.emptyList());
7979
} catch (Exception e) {
80-
log.debug("Unexpected exception occurred while trying to get consortium tenants", e);
80+
log.warn("Unexpected exception occurred while trying to get consortium tenants", e);
8181
throw new FolioIntegrationException("Failed to retrieve consortium tenants", e);
8282
}
8383
}

src/main/java/org/folio/search/service/consortium/LanguageConfigServiceDecorator.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,14 @@
55
import org.folio.search.domain.dto.LanguageConfig;
66
import org.folio.search.domain.dto.LanguageConfigs;
77
import org.folio.search.service.LanguageConfigService;
8+
import org.folio.search.service.LanguageConfigServiceI;
9+
import org.springframework.context.annotation.Primary;
810
import org.springframework.stereotype.Component;
911

12+
@Primary
1013
@Component
1114
@RequiredArgsConstructor
12-
public class LanguageConfigServiceDecorator {
15+
public class LanguageConfigServiceDecorator implements LanguageConfigServiceI {
1316

1417
private final ConsortiumTenantExecutor consortiumTenantExecutor;
1518
private final LanguageConfigService languageConfigService;
@@ -33,8 +36,4 @@ public LanguageConfigs getAll() {
3336
public Set<String> getAllLanguageCodes() {
3437
return consortiumTenantExecutor.execute(languageConfigService::getAllLanguageCodes);
3538
}
36-
37-
public Set<String> getAllLanguagesForTenant(String tenant) {
38-
return languageConfigService.getAllLanguagesForTenant(tenant);
39-
}
4039
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.folio.search.service.consortium;
2+
3+
import org.springframework.stereotype.Component;
4+
5+
/**
6+
* A simple {@link TenantProvider} implementation that returns the tenant id as-is,
7+
* without any consortium lookup. Used during tenant initialization to avoid
8+
* consortium-related caching and executor side-effects.
9+
*/
10+
@Component
11+
public class SimpleTenantProvider implements TenantProvider {
12+
13+
@Override
14+
public String getTenant(String tenantId) {
15+
return tenantId;
16+
}
17+
}
18+

src/main/java/org/folio/search/service/es/SearchMappingsHelper.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,17 @@
2020
import org.folio.search.model.metadata.ObjectFieldDescription;
2121
import org.folio.search.model.metadata.PlainFieldDescription;
2222
import org.folio.search.model.types.ResourceType;
23-
import org.folio.search.service.consortium.LanguageConfigServiceDecorator;
23+
import org.folio.search.service.LanguageConfigServiceI;
2424
import org.folio.search.service.metadata.ResourceDescriptionService;
2525
import org.folio.search.service.metadata.SearchFieldProvider;
2626
import org.folio.search.utils.JsonConverter;
27+
import org.springframework.context.annotation.Primary;
2728
import org.springframework.stereotype.Service;
2829
import tools.jackson.databind.JsonNode;
2930
import tools.jackson.databind.node.ObjectNode;
3031

3132
@Log4j2
33+
@Primary
3234
@Service
3335
@RequiredArgsConstructor
3436
public class SearchMappingsHelper {
@@ -37,7 +39,7 @@ public class SearchMappingsHelper {
3739

3840
private final JsonConverter jsonConverter;
3941
private final SearchFieldProvider searchFieldProvider;
40-
private final LanguageConfigServiceDecorator languageConfigService;
42+
private final LanguageConfigServiceI languageConfigService;
4143
private final ResourceDescriptionService resourceDescriptionService;
4244

4345
/**

0 commit comments

Comments
 (0)