fixed bug if some exception happen the connection pool didn't release the connection. Now it should be fixed
This commit is contained in:
parent
b07be69f90
commit
dbe6d76c59
|
@ -11,6 +11,7 @@
|
|||
<packaging>jar</packaging>
|
||||
<artifactId>scholexplorer-api</artifactId>
|
||||
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.data</groupId>
|
||||
|
|
|
@ -13,12 +13,9 @@ import org.apache.lucene.search.join.ScoreMode;
|
|||
import org.elasticsearch.action.search.SearchType;
|
||||
import org.elasticsearch.client.RestHighLevelClient;
|
||||
import org.elasticsearch.index.query.*;
|
||||
import org.elasticsearch.search.aggregations.Aggregation;
|
||||
import org.elasticsearch.search.aggregations.AggregationBuilders;
|
||||
import org.elasticsearch.search.aggregations.Aggregations;
|
||||
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
|
||||
import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
|
||||
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
|
||||
|
@ -119,9 +116,7 @@ public class ScholixIndexManager {
|
|||
|
||||
if (queries.size() == 1) {
|
||||
return queries.get(0);
|
||||
}
|
||||
|
||||
else {
|
||||
} else {
|
||||
final BoolQueryBuilder b = new BoolQueryBuilder();
|
||||
b.must().addAll(queries);
|
||||
|
||||
|
@ -161,18 +156,25 @@ public class ScholixIndexManager {
|
|||
.build();
|
||||
|
||||
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = connectionPool.getResource();
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = null;
|
||||
try {
|
||||
resource = connectionPool.getResource();
|
||||
ElasticsearchRestTemplate client = resource.getValue();
|
||||
final SearchHits<Scholix> hits = client.search(searchQuery, Scholix.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
final SearchHits<ScholixFlat> hits = client.search(searchQuery, ScholixFlat.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
|
||||
final Aggregations aggregations = hits.getAggregations();
|
||||
connectionPool.returnResource(resource);
|
||||
|
||||
if (aggregations == null)
|
||||
return null;
|
||||
|
||||
return ((ParsedStringTerms) aggregations.get("genres")).getBuckets().stream().map(b -> new ImmutablePair<>(b.getKeyAsString(), b.getDocCount())).collect(Collectors.toList());
|
||||
|
||||
} catch (ScholixException e) {
|
||||
throw e;
|
||||
} finally {
|
||||
if (connectionPool != null) {
|
||||
connectionPool.returnResource(resource);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -193,23 +195,25 @@ public class ScholixIndexManager {
|
|||
.build();
|
||||
|
||||
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = connectionPool.getResource();
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = null;
|
||||
try {
|
||||
resource = connectionPool.getResource();
|
||||
ElasticsearchRestTemplate client = resource.getValue();
|
||||
final SearchHits<Scholix> hits = client.search(searchQuery, Scholix.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
final SearchHits<ScholixFlat> hits = client.search(searchQuery, ScholixFlat.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
|
||||
final Aggregations aggregations = hits.getAggregations();
|
||||
connectionPool.returnResource(resource);
|
||||
|
||||
if (aggregations == null)
|
||||
return null;
|
||||
|
||||
return ((ParsedStringTerms) aggregations.get("publishers")).getBuckets().stream().map(b -> new ImmutablePair<>(b.getKeyAsString(), b.getDocCount())).collect(Collectors.toList());
|
||||
} catch (ScholixException e) {
|
||||
throw e;
|
||||
} finally {
|
||||
if (connectionPool != null) {
|
||||
connectionPool.returnResource(resource);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@ -236,7 +240,6 @@ public class ScholixIndexManager {
|
|||
final Integer page) throws ScholixException {
|
||||
|
||||
|
||||
|
||||
if (sourcePid == null && sourcePidType == null && targetPid == null && targetPidType == null && sourcePublisher == null && targetPublisher == null && linkProvider == null)
|
||||
throw new ScholixException("One of sourcePid, targetPid, sourcePublisher, targetPublisher, linkProvider should be not null");
|
||||
|
||||
|
@ -290,17 +293,24 @@ public class ScholixIndexManager {
|
|||
.build();
|
||||
|
||||
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = connectionPool.getResource();
|
||||
Pair<RestHighLevelClient, ElasticsearchRestTemplate> resource = null;
|
||||
try {
|
||||
resource = connectionPool.getResource();
|
||||
ElasticsearchRestTemplate client = resource.getValue();
|
||||
|
||||
|
||||
|
||||
long tt = client.count(finalQuery, ScholixFlat.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
|
||||
SearchHits<ScholixFlat> scholixRes = client.search(finalQuery, ScholixFlat.class, IndexCoordinates.of(elasticSearchProperties.getIndexName()));
|
||||
connectionPool.returnResource(resource);
|
||||
|
||||
return new ImmutablePair<>(tt, scholixRes.stream().map(SearchHit::getContent).map(ScholixUtils::getScholixFromBlob).collect(Collectors.toList()));
|
||||
} catch (ScholixException e) {
|
||||
throw e;
|
||||
} finally {
|
||||
if (connectionPool != null) {
|
||||
connectionPool.returnResource(resource);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import org.apache.commons.codec.binary.Base64InputStream;
|
|||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
public class ScholixUtils {
|
||||
|
@ -16,7 +17,7 @@ public class ScholixUtils {
|
|||
private static String uncompress(final String compressed) throws Exception {
|
||||
Base64InputStream bis = new Base64InputStream(new ByteArrayInputStream(compressed.getBytes()));
|
||||
GZIPInputStream gzip = new GZIPInputStream(bis);
|
||||
return IOUtils.toString(gzip);
|
||||
return IOUtils.toString(gzip, Charset.defaultCharset());
|
||||
}
|
||||
|
||||
public static Scholix getScholixFromBlob(final ScholixFlat flat) {
|
||||
|
|
|
@ -27,7 +27,7 @@ management.metrics.distribution.percentiles.http.server.requests=0.5, 0.9, 0.95,
|
|||
|
||||
#scholix.elastic.clusterNodes = 10.19.65.51:9200,10.19.65.52:9200,10.19.65.53:9200,10.19.65.54:9200
|
||||
scholix.elastic.clusterNodes = localhost:9200
|
||||
scholix.elastic.indexName = scholix
|
||||
scholix.elastic.indexName = dli_scholix
|
||||
scholix.elastic.socketTimeout = 60000
|
||||
scholix.elastic.connectionTimeout= 60000
|
||||
|
||||
|
|
Loading…
Reference in New Issue