Merge branch 'RED-6876' into 'master'

RED-6876: Fixed not correct initialized index

Closes RED-6876

See merge request redactmanager/search-service!2
This commit is contained in:
Dominique Eifländer 2023-06-14 11:00:20 +02:00
commit ee698a9647
4 changed files with 23 additions and 65 deletions

View File

@ -12,7 +12,7 @@
<artifactId>search-service-image-v1</artifactId>
<groupId>com.iqser.red.service</groupId>
<version>1.0-SNAPSHOT</version>
<version>2.0-SNAPSHOT</version>
<packaging>pom</packaging>

View File

@ -1,20 +0,0 @@
package com.iqser.red.service.search.v1.server.model;
import com.iqser.red.service.persistence.service.v1.api.shared.model.multitenancy.SearchConnection;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@Builder
@AllArgsConstructor
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class Connection {
@EqualsAndHashCode.Include
private String hosts;
private SearchConnection searchConnection;
}

View File

@ -1,7 +1,6 @@
package com.iqser.red.service.search.v1.server.service.elasticsearch;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ -12,7 +11,6 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
import com.iqser.red.service.search.v1.server.client.TenantsClient;
import com.iqser.red.service.search.v1.server.model.Connection;
import com.iqser.red.service.search.v1.server.multitenancy.EncryptionDecryptionService;
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
@ -37,37 +35,29 @@ public class EsClientCache {
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
private Integer expireAfterAccess;
private LoadingCache<String, Connection> connections;
private LoadingCache<Connection, EsClient> clients;
private LoadingCache<String, EsClient> clients;
@PostConstruct
protected void createCache() {
connections = CacheBuilder.newBuilder().maximumSize(maximumSize).expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES).build(new CacheLoader<>() {
public Connection load(String tenantId) {
var tenant = tenantsClient.getTenant(tenantId);
var hostsAsString = tenant.getSearchConnection().getHosts().stream().collect(Collectors.joining());
return Connection.builder().hosts(hostsAsString).searchConnection(tenant.getSearchConnection()).build();
}
});
clients = CacheBuilder.newBuilder()
.maximumSize(maximumSize)
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
.removalListener((RemovalListener<Connection, EsClient>) removal -> {
.removalListener((RemovalListener<String, EsClient>) removal -> {
removal.getValue().shutdown();
log.info("Closed elasticsearch client for tenant {}", removal.getKey().getHosts());
log.info("Closed elasticsearch client for tenant {}", removal.getKey());
})
.build(new CacheLoader<>() {
public EsClient load(Connection key) {
public EsClient load(String tenantId) {
if (key.getSearchConnection().getPassword() != null) {
key.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(key.getSearchConnection().getPassword()));
var tenant = tenantsClient.getTenant(tenantId);
if (tenant.getSearchConnection().getPassword() != null) {
tenant.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(tenant.getSearchConnection().getPassword()));
}
var client = new EsClient(key.getSearchConnection());
log.info("Initialized elasticsearch client for tenant {}", key);
var client = new EsClient(tenant.getSearchConnection());
log.info("Initialized elasticsearch client for tenant {}", tenantId);
indexCreatorService.createIndex(client);
return client;
}
@ -78,8 +68,7 @@ public class EsClientCache {
@SneakyThrows
public EsClient getClient() {
var connection = connections.get(TenantContext.getTenantId());
return clients.get(connection);
return clients.get(TenantContext.getTenantId());
}
}

View File

@ -1,7 +1,6 @@
package com.iqser.red.service.search.v1.server.service.opensearch;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@ -12,7 +11,6 @@ import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.cache.RemovalListener;
import com.iqser.red.service.search.v1.server.client.TenantsClient;
import com.iqser.red.service.search.v1.server.model.Connection;
import com.iqser.red.service.search.v1.server.multitenancy.EncryptionDecryptionService;
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
@ -37,37 +35,29 @@ public class OpensearchClientCache {
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
private Integer expireAfterAccess;
private LoadingCache<String, Connection> connections;
private LoadingCache<Connection, OpensearchClient> clients;
private LoadingCache<String, OpensearchClient> clients;
@PostConstruct
protected void createCache() {
connections = CacheBuilder.newBuilder().maximumSize(maximumSize).expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES).build(new CacheLoader<>() {
public Connection load(String tenantId) {
var tenant = tenantsClient.getTenant(tenantId);
var hostsAsString = tenant.getSearchConnection().getHosts().stream().collect(Collectors.joining());
return Connection.builder().hosts(hostsAsString).searchConnection(tenant.getSearchConnection()).build();
}
});
clients = CacheBuilder.newBuilder()
.maximumSize(maximumSize)
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
.removalListener((RemovalListener<Connection, OpensearchClient>) removal -> {
.removalListener((RemovalListener<String, OpensearchClient>) removal -> {
removal.getValue().shutdown();
log.info("Closed opensearch client for tenant {}", removal.getKey().getHosts());
log.info("Closed elasticsearch client for tenant {}", removal.getKey());
})
.build(new CacheLoader<>() {
public OpensearchClient load(Connection key) {
public OpensearchClient load(String tenantId) {
if (key.getSearchConnection().getPassword() != null) {
key.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(key.getSearchConnection().getPassword()));
var tenant = tenantsClient.getTenant(tenantId);
if (tenant.getSearchConnection().getPassword() != null) {
tenant.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(tenant.getSearchConnection().getPassword()));
}
var client = new OpensearchClient(key.getSearchConnection());
log.info("Initialized opensearch client for tenant {}", key);
var client = new OpensearchClient(tenant.getSearchConnection());
log.info("Initialized elasticsearch client for tenant {}", tenantId);
indexCreatorService.createIndex(client);
return client;
}
@ -78,8 +68,7 @@ public class OpensearchClientCache {
@SneakyThrows
public OpensearchClient getClient() {
var connection = connections.get(TenantContext.getTenantId());
return clients.get(connection);
return clients.get(TenantContext.getTenantId());
}
}