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:
commit
ee698a9647
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
<artifactId>search-service-image-v1</artifactId>
|
<artifactId>search-service-image-v1</artifactId>
|
||||||
<groupId>com.iqser.red.service</groupId>
|
<groupId>com.iqser.red.service</groupId>
|
||||||
<version>1.0-SNAPSHOT</version>
|
<version>2.0-SNAPSHOT</version>
|
||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
|
||||||
|
|
||||||
}
|
|
||||||
@ -1,7 +1,6 @@
|
|||||||
package com.iqser.red.service.search.v1.server.service.elasticsearch;
|
package com.iqser.red.service.search.v1.server.service.elasticsearch;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
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.LoadingCache;
|
||||||
import com.google.common.cache.RemovalListener;
|
import com.google.common.cache.RemovalListener;
|
||||||
import com.iqser.red.service.search.v1.server.client.TenantsClient;
|
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.EncryptionDecryptionService;
|
||||||
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
|
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
|
||||||
|
|
||||||
@ -37,37 +35,29 @@ public class EsClientCache {
|
|||||||
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
|
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
|
||||||
private Integer expireAfterAccess;
|
private Integer expireAfterAccess;
|
||||||
|
|
||||||
private LoadingCache<String, Connection> connections;
|
private LoadingCache<String, EsClient> clients;
|
||||||
private LoadingCache<Connection, EsClient> clients;
|
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
protected void createCache() {
|
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()
|
clients = CacheBuilder.newBuilder()
|
||||||
.maximumSize(maximumSize)
|
.maximumSize(maximumSize)
|
||||||
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
|
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
|
||||||
.removalListener((RemovalListener<Connection, EsClient>) removal -> {
|
.removalListener((RemovalListener<String, EsClient>) removal -> {
|
||||||
removal.getValue().shutdown();
|
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<>() {
|
.build(new CacheLoader<>() {
|
||||||
public EsClient load(Connection key) {
|
public EsClient load(String tenantId) {
|
||||||
|
|
||||||
if (key.getSearchConnection().getPassword() != null) {
|
var tenant = tenantsClient.getTenant(tenantId);
|
||||||
key.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(key.getSearchConnection().getPassword()));
|
|
||||||
|
if (tenant.getSearchConnection().getPassword() != null) {
|
||||||
|
tenant.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(tenant.getSearchConnection().getPassword()));
|
||||||
}
|
}
|
||||||
var client = new EsClient(key.getSearchConnection());
|
var client = new EsClient(tenant.getSearchConnection());
|
||||||
log.info("Initialized elasticsearch client for tenant {}", key);
|
log.info("Initialized elasticsearch client for tenant {}", tenantId);
|
||||||
indexCreatorService.createIndex(client);
|
indexCreatorService.createIndex(client);
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
@ -78,8 +68,7 @@ public class EsClientCache {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public EsClient getClient() {
|
public EsClient getClient() {
|
||||||
|
|
||||||
var connection = connections.get(TenantContext.getTenantId());
|
return clients.get(TenantContext.getTenantId());
|
||||||
return clients.get(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1,7 +1,6 @@
|
|||||||
package com.iqser.red.service.search.v1.server.service.opensearch;
|
package com.iqser.red.service.search.v1.server.service.opensearch;
|
||||||
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
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.LoadingCache;
|
||||||
import com.google.common.cache.RemovalListener;
|
import com.google.common.cache.RemovalListener;
|
||||||
import com.iqser.red.service.search.v1.server.client.TenantsClient;
|
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.EncryptionDecryptionService;
|
||||||
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
|
import com.iqser.red.service.search.v1.server.multitenancy.TenantContext;
|
||||||
|
|
||||||
@ -37,37 +35,29 @@ public class OpensearchClientCache {
|
|||||||
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
|
@Value("${multitenancy.client-cache.expireAfterAccess:10}")
|
||||||
private Integer expireAfterAccess;
|
private Integer expireAfterAccess;
|
||||||
|
|
||||||
private LoadingCache<String, Connection> connections;
|
private LoadingCache<String, OpensearchClient> clients;
|
||||||
private LoadingCache<Connection, OpensearchClient> clients;
|
|
||||||
|
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
protected void createCache() {
|
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()
|
clients = CacheBuilder.newBuilder()
|
||||||
.maximumSize(maximumSize)
|
.maximumSize(maximumSize)
|
||||||
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
|
.expireAfterAccess(expireAfterAccess, TimeUnit.MINUTES)
|
||||||
.removalListener((RemovalListener<Connection, OpensearchClient>) removal -> {
|
.removalListener((RemovalListener<String, OpensearchClient>) removal -> {
|
||||||
removal.getValue().shutdown();
|
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<>() {
|
.build(new CacheLoader<>() {
|
||||||
public OpensearchClient load(Connection key) {
|
public OpensearchClient load(String tenantId) {
|
||||||
|
|
||||||
if (key.getSearchConnection().getPassword() != null) {
|
var tenant = tenantsClient.getTenant(tenantId);
|
||||||
key.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(key.getSearchConnection().getPassword()));
|
|
||||||
|
if (tenant.getSearchConnection().getPassword() != null) {
|
||||||
|
tenant.getSearchConnection().setPassword(encryptionDecryptionService.decrypt(tenant.getSearchConnection().getPassword()));
|
||||||
}
|
}
|
||||||
var client = new OpensearchClient(key.getSearchConnection());
|
var client = new OpensearchClient(tenant.getSearchConnection());
|
||||||
log.info("Initialized opensearch client for tenant {}", key);
|
log.info("Initialized elasticsearch client for tenant {}", tenantId);
|
||||||
indexCreatorService.createIndex(client);
|
indexCreatorService.createIndex(client);
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
@ -78,8 +68,7 @@ public class OpensearchClientCache {
|
|||||||
@SneakyThrows
|
@SneakyThrows
|
||||||
public OpensearchClient getClient() {
|
public OpensearchClient getClient() {
|
||||||
|
|
||||||
var connection = connections.get(TenantContext.getTenantId());
|
return clients.get(TenantContext.getTenantId());
|
||||||
return clients.get(connection);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user