mirror of
https://github.com/Alfresco/SearchServices.git
synced 2026-09-16 18:12:56 +00:00
[SEARCH-2109]
release response in content tracker
This commit is contained in:
+64
-60
@@ -2531,80 +2531,84 @@ public class SolrInformationServer implements InformationServer
|
||||
QName propertyQName, long dbId, String locale) throws AuthenticationException, IOException
|
||||
{
|
||||
long start = System.nanoTime();
|
||||
|
||||
// Expensive call to be done with ContentTracker
|
||||
GetTextContentResponse response = repositoryClient.getTextContent(dbId, propertyQName, null);
|
||||
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_STATUS,
|
||||
response);
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_EXCEPTION,
|
||||
response);
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_TIME,
|
||||
response);
|
||||
|
||||
InputStream ris = response.getContent();
|
||||
if (Objects.equals(response.getContentEncoding(), "gzip"))
|
||||
{
|
||||
ris = new GZIPInputStream(ris);
|
||||
}
|
||||
String textContent = "";
|
||||
GetTextContentResponse response = null;
|
||||
try
|
||||
{
|
||||
// Expensive call to be done with ContentTracker
|
||||
response = repositoryClient.getTextContent(dbId, propertyQName, null);
|
||||
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_STATUS,
|
||||
response);
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_EXCEPTION,
|
||||
response);
|
||||
addContentPropertyMetadata(doc, propertyQName, AlfrescoSolrDataModel.ContentFieldType.TRANSFORMATION_TIME,
|
||||
response);
|
||||
|
||||
InputStream ris = response.getContent();
|
||||
if (Objects.equals(response.getContentEncoding(), "gzip"))
|
||||
{
|
||||
ris = new GZIPInputStream(ris);
|
||||
}
|
||||
String textContent = "";
|
||||
|
||||
if (ris != null)
|
||||
{
|
||||
// Get and copy content
|
||||
byte[] bytes = FileCopyUtils.copyToByteArray(new BoundedInputStream(ris, contentStreamLimit));
|
||||
textContent = new String(bytes, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
if(minHash && textContent.length() > 0)
|
||||
{
|
||||
Analyzer analyzer = core.getLatestSchema().getFieldType("min_hash").getIndexAnalyzer();
|
||||
TokenStream ts = analyzer.tokenStream("min_hash", textContent);
|
||||
CharTermAttribute termAttribute = ts.getAttribute(CharTermAttribute.class);
|
||||
ts.reset();
|
||||
while (ts.incrementToken())
|
||||
{
|
||||
StringBuilder tokenBuff = new StringBuilder();
|
||||
char[] buff = termAttribute.buffer();
|
||||
|
||||
for(int i=0; i<termAttribute.length();i++)
|
||||
{
|
||||
tokenBuff.append(Integer.toHexString(buff[i]));
|
||||
}
|
||||
doc.addField(FINGERPRINT_FIELD, tokenBuff.toString());
|
||||
|
||||
}
|
||||
ts.end();
|
||||
ts.close();
|
||||
}
|
||||
|
||||
long end = System.nanoTime();
|
||||
this.getTrackerStats().addDocTransformationTime(end - start);
|
||||
|
||||
StringBuilder builder = new StringBuilder(textContent.length() + 16);
|
||||
builder.append("\u0000").append(locale).append("\u0000");
|
||||
builder.append(textContent);
|
||||
String localisedText = builder.toString();
|
||||
|
||||
for (FieldInstance field : AlfrescoSolrDataModel.getInstance().getIndexedFieldNamesForProperty(propertyQName).getFields())
|
||||
{
|
||||
doc.removeField(field.getField());
|
||||
if(field.isLocalised())
|
||||
{
|
||||
doc.addField(field.getField(), localisedText);
|
||||
}
|
||||
else
|
||||
{
|
||||
doc.addField(field.getField(), textContent);
|
||||
}
|
||||
addFieldIfNotSet(doc, field);
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
// release the response only when the content has been read
|
||||
response.release();
|
||||
}
|
||||
|
||||
if(minHash && textContent.length() > 0)
|
||||
{
|
||||
Analyzer analyzer = core.getLatestSchema().getFieldType("min_hash").getIndexAnalyzer();
|
||||
TokenStream ts = analyzer.tokenStream("min_hash", textContent);
|
||||
CharTermAttribute termAttribute = ts.getAttribute(CharTermAttribute.class);
|
||||
ts.reset();
|
||||
while (ts.incrementToken())
|
||||
if (response != null)
|
||||
{
|
||||
StringBuilder tokenBuff = new StringBuilder();
|
||||
char[] buff = termAttribute.buffer();
|
||||
|
||||
for(int i=0; i<termAttribute.length();i++)
|
||||
{
|
||||
tokenBuff.append(Integer.toHexString(buff[i]));
|
||||
}
|
||||
doc.addField(FINGERPRINT_FIELD, tokenBuff.toString());
|
||||
|
||||
response.release();
|
||||
}
|
||||
ts.end();
|
||||
ts.close();
|
||||
}
|
||||
|
||||
long end = System.nanoTime();
|
||||
this.getTrackerStats().addDocTransformationTime(end - start);
|
||||
|
||||
StringBuilder builder = new StringBuilder(textContent.length() + 16);
|
||||
builder.append("\u0000").append(locale).append("\u0000");
|
||||
builder.append(textContent);
|
||||
String localisedText = builder.toString();
|
||||
|
||||
for (FieldInstance field : AlfrescoSolrDataModel.getInstance().getIndexedFieldNamesForProperty(propertyQName).getFields())
|
||||
{
|
||||
doc.removeField(field.getField());
|
||||
if(field.isLocalised())
|
||||
{
|
||||
doc.addField(field.getField(), localisedText);
|
||||
}
|
||||
else
|
||||
{
|
||||
doc.addField(field.getField(), textContent);
|
||||
}
|
||||
addFieldIfNotSet(doc, field);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+253
-251
@@ -1,88 +1,88 @@
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Solr Client
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
/*
|
||||
* #%L
|
||||
* Alfresco Solr Client
|
||||
* %%
|
||||
* Copyright (C) 2005 - 2016 Alfresco Software Limited
|
||||
* %%
|
||||
* This file is part of the Alfresco software.
|
||||
* If the software was purchased under a paid Alfresco license, the terms of
|
||||
* the paid license agreement will prevail. Otherwise, the software is
|
||||
* provided under the following open source license terms:
|
||||
*
|
||||
* Alfresco is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* Alfresco is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||
* #L%
|
||||
*/
|
||||
package org.alfresco.solr.client;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.httpclient.AlfrescoHttpClient;
|
||||
import org.alfresco.httpclient.AuthenticationException;
|
||||
import org.alfresco.httpclient.GetRequest;
|
||||
import org.alfresco.httpclient.PostRequest;
|
||||
import org.alfresco.httpclient.Response;
|
||||
import org.alfresco.repo.dictionary.M2Model;
|
||||
import org.alfresco.repo.dictionary.NamespaceDAO;
|
||||
import org.alfresco.repo.index.shard.ShardState;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.MLText;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.Path;
|
||||
import org.alfresco.service.cmr.repository.Path.AttributeElement;
|
||||
import org.alfresco.service.cmr.repository.Path.ChildAssocElement;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConversionException;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConverter;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConverter.Converter;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.ISO8601DateFormat;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.codec.EncoderException;
|
||||
import org.apache.commons.codec.net.URLCodec;
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.httpclient.util.DateUtil;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONTokener;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.extensions.surf.util.URLEncoder;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.alfresco.error.AlfrescoRuntimeException;
|
||||
import org.alfresco.httpclient.AlfrescoHttpClient;
|
||||
import org.alfresco.httpclient.AuthenticationException;
|
||||
import org.alfresco.httpclient.GetRequest;
|
||||
import org.alfresco.httpclient.PostRequest;
|
||||
import org.alfresco.httpclient.Response;
|
||||
import org.alfresco.repo.dictionary.M2Model;
|
||||
import org.alfresco.repo.dictionary.NamespaceDAO;
|
||||
import org.alfresco.repo.index.shard.ShardState;
|
||||
import org.alfresco.repo.tenant.TenantService;
|
||||
import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
|
||||
import org.alfresco.service.cmr.dictionary.DictionaryService;
|
||||
import org.alfresco.service.cmr.dictionary.PropertyDefinition;
|
||||
import org.alfresco.service.cmr.repository.AssociationRef;
|
||||
import org.alfresco.service.cmr.repository.ChildAssociationRef;
|
||||
import org.alfresco.service.cmr.repository.MLText;
|
||||
import org.alfresco.service.cmr.repository.NodeRef;
|
||||
import org.alfresco.service.cmr.repository.Path;
|
||||
import org.alfresco.service.cmr.repository.Path.AttributeElement;
|
||||
import org.alfresco.service.cmr.repository.Path.ChildAssocElement;
|
||||
import org.alfresco.service.cmr.repository.StoreRef;
|
||||
import org.alfresco.service.cmr.repository.datatype.DefaultTypeConverter;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConversionException;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConverter;
|
||||
import org.alfresco.service.cmr.repository.datatype.TypeConverter.Converter;
|
||||
import org.alfresco.service.namespace.QName;
|
||||
import org.alfresco.util.ISO8601DateFormat;
|
||||
import org.alfresco.util.Pair;
|
||||
import org.apache.commons.codec.EncoderException;
|
||||
import org.apache.commons.codec.net.URLCodec;
|
||||
import org.apache.commons.httpclient.HttpStatus;
|
||||
import org.apache.commons.httpclient.util.DateUtil;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
import org.json.JSONObject;
|
||||
import org.json.JSONTokener;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.extensions.surf.util.URLEncoder;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonFactory;
|
||||
import com.fasterxml.jackson.core.JsonParser;
|
||||
import com.fasterxml.jackson.core.JsonToken;
|
||||
|
||||
// TODO error handling, including dealing with a repository that is not responsive (ConnectException in sendRemoteRequest)
|
||||
@@ -103,8 +103,8 @@ public class SOLRAPIClient
|
||||
private static final String GET_NODES_URL = "api/solr/nodes";
|
||||
private static final String GET_CONTENT = "api/solr/textContent";
|
||||
private static final String GET_MODEL = "api/solr/model";
|
||||
private static final String GET_MODELS_DIFF = "api/solr/modelsdiff";
|
||||
private static final String GET_NEXT_TX_COMMIT_TIME = "api/solr/nextTransaction";
|
||||
private static final String GET_MODELS_DIFF = "api/solr/modelsdiff";
|
||||
private static final String GET_NEXT_TX_COMMIT_TIME = "api/solr/nextTransaction";
|
||||
private static final String GET_TX_INTERVAL_COMMIT_TIME = "api/solr/transactionInterval";
|
||||
|
||||
private static final String CHECKSUM_HEADER = "XAlfresco-modelChecksum";
|
||||
@@ -113,33 +113,33 @@ public class SOLRAPIClient
|
||||
private SOLRDeserializer deserializer;
|
||||
private DictionaryService dictionaryService;
|
||||
private JsonFactory jsonFactory;
|
||||
private NamespaceDAO namespaceDAO;
|
||||
|
||||
/**
|
||||
* This option enables ("Accept-Encoding": "gzip") header for compression
|
||||
* in GET_CONTENT requests. Additional configuration is required in
|
||||
* Alfresco Repository Tomcat Connector or HTTP Web Proxy to deal
|
||||
* with compressed requests.
|
||||
*/
|
||||
private boolean compression;
|
||||
private NamespaceDAO namespaceDAO;
|
||||
|
||||
/**
|
||||
* This option enables ("Accept-Encoding": "gzip") header for compression
|
||||
* in GET_CONTENT requests. Additional configuration is required in
|
||||
* Alfresco Repository Tomcat Connector or HTTP Web Proxy to deal
|
||||
* with compressed requests.
|
||||
*/
|
||||
private boolean compression;
|
||||
|
||||
public SOLRAPIClient(AlfrescoHttpClient repositoryHttpClient,
|
||||
DictionaryService dictionaryService,
|
||||
NamespaceDAO namespaceDAO)
|
||||
{
|
||||
this(repositoryHttpClient, dictionaryService, namespaceDAO, false);
|
||||
}
|
||||
|
||||
public SOLRAPIClient(AlfrescoHttpClient repositoryHttpClient,
|
||||
DictionaryService dictionaryService,
|
||||
NamespaceDAO namespaceDAO,
|
||||
NamespaceDAO namespaceDAO)
|
||||
{
|
||||
this(repositoryHttpClient, dictionaryService, namespaceDAO, false);
|
||||
}
|
||||
|
||||
public SOLRAPIClient(AlfrescoHttpClient repositoryHttpClient,
|
||||
DictionaryService dictionaryService,
|
||||
NamespaceDAO namespaceDAO,
|
||||
boolean compression)
|
||||
{
|
||||
this.repositoryHttpClient = repositoryHttpClient;
|
||||
this.dictionaryService = dictionaryService;
|
||||
this.namespaceDAO = namespaceDAO;
|
||||
this.deserializer = new SOLRDeserializer(namespaceDAO);
|
||||
this.jsonFactory = new JsonFactory();
|
||||
this.jsonFactory = new JsonFactory();
|
||||
this.compression = compression;
|
||||
}
|
||||
|
||||
@@ -420,7 +420,7 @@ public class SOLRAPIClient
|
||||
}
|
||||
|
||||
public Transactions getTransactions(Long fromCommitTime, Long minTxnId, Long toCommitTime, Long maxTxnId, int maxResults, ShardState shardState) throws AuthenticationException, IOException, JSONException, EncoderException
|
||||
{
|
||||
{
|
||||
log.debug("### get transactions ###");
|
||||
URLCodec encoder = new URLCodec();
|
||||
|
||||
@@ -447,7 +447,7 @@ public class SOLRAPIClient
|
||||
args.append(args.length() == 0 ? "?" : "&").append("maxResults").append("=").append(maxResults);
|
||||
}
|
||||
if(shardState != null)
|
||||
{
|
||||
{
|
||||
log.debug("### Shard state exists ###");
|
||||
args.append(args.length() == 0 ? "?" : "&");
|
||||
args.append(encoder.encode("baseUrl")).append("=").append(encoder.encode(shardState.getShardInstance().getBaseUrl()));
|
||||
@@ -560,7 +560,7 @@ public class SOLRAPIClient
|
||||
|
||||
}
|
||||
finally
|
||||
{
|
||||
{
|
||||
log.debug("## end getTransactions");
|
||||
if(response != null)
|
||||
{
|
||||
@@ -625,16 +625,16 @@ public class SOLRAPIClient
|
||||
}
|
||||
|
||||
body.put("maxResults", maxResults);
|
||||
|
||||
if(parameters.getShardProperty() != null)
|
||||
{
|
||||
body.put("shardProperty", parameters.getShardProperty().toString());
|
||||
}
|
||||
|
||||
if (parameters.getCoreName() != null){
|
||||
body.put("coreName", parameters.getCoreName());
|
||||
}
|
||||
|
||||
|
||||
if(parameters.getShardProperty() != null)
|
||||
{
|
||||
body.put("shardProperty", parameters.getShardProperty().toString());
|
||||
}
|
||||
|
||||
if (parameters.getCoreName() != null){
|
||||
body.put("coreName", parameters.getCoreName());
|
||||
}
|
||||
|
||||
|
||||
PostRequest req = new PostRequest(url.toString(), body.toString(), "application/json");
|
||||
|
||||
@@ -688,16 +688,16 @@ public class SOLRAPIClient
|
||||
if(jsonNodeInfo.has("aclId"))
|
||||
{
|
||||
nodeInfo.setAclId(jsonNodeInfo.getLong("aclId"));
|
||||
}
|
||||
|
||||
if(jsonNodeInfo.has("shardPropertyValue"))
|
||||
{
|
||||
nodeInfo.setShardPropertyValue(jsonNodeInfo.getString("shardPropertyValue"));
|
||||
}
|
||||
|
||||
if(jsonNodeInfo.has("explicitShardId"))
|
||||
{
|
||||
nodeInfo.setExplicitShardId(jsonNodeInfo.getInt("explicitShardId"));
|
||||
}
|
||||
|
||||
if(jsonNodeInfo.has("shardPropertyValue"))
|
||||
{
|
||||
nodeInfo.setShardPropertyValue(jsonNodeInfo.getString("shardPropertyValue"));
|
||||
}
|
||||
|
||||
if(jsonNodeInfo.has("explicitShardId"))
|
||||
{
|
||||
nodeInfo.setExplicitShardId(jsonNodeInfo.getInt("explicitShardId"));
|
||||
}
|
||||
|
||||
if(jsonNodeInfo.has("tenant"))
|
||||
@@ -972,21 +972,21 @@ public class SOLRAPIClient
|
||||
if(jsonNodeInfo.has("paths"))
|
||||
{
|
||||
JSONArray jsonPaths = jsonNodeInfo.getJSONArray("paths");
|
||||
List<Pair<String, QName>> paths = new ArrayList<Pair<String, QName>>(jsonPaths.length());
|
||||
List<Pair<String, QName>> paths = new ArrayList<Pair<String, QName>>(jsonPaths.length());
|
||||
List<String> ancestorPaths = new ArrayList<String>();
|
||||
for(int j = 0; j < jsonPaths.length(); j++)
|
||||
{
|
||||
JSONObject path = jsonPaths.getJSONObject(j);
|
||||
String pathValue = path.getString("path");
|
||||
QName qname = path.has("qname") ? deserializer.deserializeValue(QName.class, path.getString("qname")) : null;
|
||||
paths.add(new Pair<String, QName>(pathValue, qname));
|
||||
if(path.has("apath"))
|
||||
{
|
||||
String ancestorPath = path.getString("apath");
|
||||
ancestorPaths.add(ancestorPath);
|
||||
paths.add(new Pair<String, QName>(pathValue, qname));
|
||||
if(path.has("apath"))
|
||||
{
|
||||
String ancestorPath = path.getString("apath");
|
||||
ancestorPaths.add(ancestorPath);
|
||||
}
|
||||
}
|
||||
metaData.setPaths(paths);
|
||||
metaData.setPaths(paths);
|
||||
metaData.setAncestorPaths(ancestorPaths);
|
||||
}
|
||||
|
||||
@@ -1137,24 +1137,26 @@ public class SOLRAPIClient
|
||||
|
||||
GetRequest req = new GetRequest(url.toString());
|
||||
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
Map<String, String> headers = new HashMap<>();
|
||||
if(modifiedSince != null)
|
||||
{
|
||||
headers.put("If-Modified-Since", String.valueOf(DateUtil.formatDate(new Date(modifiedSince))));
|
||||
}
|
||||
if (compression)
|
||||
{
|
||||
headers.put("Accept-Encoding", "gzip");
|
||||
}
|
||||
req.setHeaders(headers);
|
||||
|
||||
if (compression)
|
||||
{
|
||||
headers.put("Accept-Encoding", "gzip");
|
||||
}
|
||||
req.setHeaders(headers);
|
||||
|
||||
Response response = repositoryHttpClient.sendRequest(req);
|
||||
|
||||
if(response.getStatus() != Status.STATUS_NOT_MODIFIED && response.getStatus() != Status.STATUS_NO_CONTENT && response.getStatus() != Status.STATUS_OK)
|
||||
{
|
||||
throw new AlfrescoRuntimeException("GetTextContentResponse return status is " + response.getStatus());
|
||||
}
|
||||
|
||||
int status = response.getStatus();
|
||||
response.release();
|
||||
throw new AlfrescoRuntimeException("GetTextContentResponse return status is " + status);
|
||||
}
|
||||
|
||||
return new GetTextContentResponse(response);
|
||||
}
|
||||
|
||||
@@ -1251,99 +1253,99 @@ public class SOLRAPIClient
|
||||
}
|
||||
|
||||
return diffs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next commit time from a given commit time.
|
||||
*
|
||||
* @param coreName alfresco, archive
|
||||
* @param fromCommitTime initial transaction commit time
|
||||
* @return Time of the next transaction
|
||||
* @throws IOException
|
||||
* @throws AuthenticationException
|
||||
* @throws NoSuchMethodException
|
||||
*/
|
||||
public Long getNextTxCommitTime(String coreName, Long fromCommitTime) throws AuthenticationException, IOException, NoSuchMethodException
|
||||
{
|
||||
StringBuilder url = new StringBuilder(GET_NEXT_TX_COMMIT_TIME);
|
||||
url.append("?").append("fromCommitTime").append("=").append(fromCommitTime);
|
||||
GetRequest get = new GetRequest(url.toString());
|
||||
Response response = null;
|
||||
JSONObject json = null;
|
||||
try
|
||||
{
|
||||
response = repositoryHttpClient.sendRequest(get);
|
||||
if (response.getStatus() != HttpStatus.SC_OK)
|
||||
{
|
||||
throw new NoSuchMethodException(coreName + " - GetNextTxCommitTime return status is "
|
||||
+ response.getStatus() + " when invoking " + url);
|
||||
}
|
||||
|
||||
Reader reader = new BufferedReader(new InputStreamReader(response.getContentAsStream(), "UTF-8"));
|
||||
json = new JSONObject(new JSONTokener(reader));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null)
|
||||
{
|
||||
response.release();
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled())
|
||||
{
|
||||
log.debug(json.toString());
|
||||
}
|
||||
|
||||
return Long.parseLong(json.get("nextTransactionCommitTimeMs").toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum and the maximum commit time for transactions in a node id range.
|
||||
*
|
||||
* @param coreName alfresco, archive
|
||||
* @param fromNodeId Id of the initial node
|
||||
* @param toNodeId Id of the final node
|
||||
* @return Time of the first transaction, time of the last transaction
|
||||
* @throws IOException
|
||||
* @throws AuthenticationException
|
||||
* @throws NoSuchMethodException
|
||||
*/
|
||||
public Pair<Long, Long> getTxIntervalCommitTime(String coreName, Long fromNodeId, Long toNodeId)
|
||||
throws AuthenticationException, IOException, NoSuchMethodException
|
||||
{
|
||||
StringBuilder url = new StringBuilder(GET_TX_INTERVAL_COMMIT_TIME);
|
||||
url.append("?").append("fromNodeId").append("=").append(fromNodeId);
|
||||
url.append("&").append("toNodeId").append("=").append(toNodeId);
|
||||
GetRequest get = new GetRequest(url.toString());
|
||||
Response response = null;
|
||||
JSONObject json = null;
|
||||
try
|
||||
{
|
||||
response = repositoryHttpClient.sendRequest(get);
|
||||
if (response.getStatus() != HttpStatus.SC_OK)
|
||||
{
|
||||
throw new NoSuchMethodException(coreName + " - GetTxIntervalCommitTime return status is "
|
||||
+ response.getStatus() + " when invoking " + url);
|
||||
}
|
||||
|
||||
Reader reader = new BufferedReader(new InputStreamReader(response.getContentAsStream(), "UTF-8"));
|
||||
json = new JSONObject(new JSONTokener(reader));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null)
|
||||
{
|
||||
response.release();
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled())
|
||||
{
|
||||
log.debug(json.toString());
|
||||
}
|
||||
|
||||
return new Pair<Long, Long>(Long.parseLong(json.get("minTransactionCommitTimeMs").toString()),
|
||||
Long.parseLong(json.get("maxTransactionCommitTimeMs").toString()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the next commit time from a given commit time.
|
||||
*
|
||||
* @param coreName alfresco, archive
|
||||
* @param fromCommitTime initial transaction commit time
|
||||
* @return Time of the next transaction
|
||||
* @throws IOException
|
||||
* @throws AuthenticationException
|
||||
* @throws NoSuchMethodException
|
||||
*/
|
||||
public Long getNextTxCommitTime(String coreName, Long fromCommitTime) throws AuthenticationException, IOException, NoSuchMethodException
|
||||
{
|
||||
StringBuilder url = new StringBuilder(GET_NEXT_TX_COMMIT_TIME);
|
||||
url.append("?").append("fromCommitTime").append("=").append(fromCommitTime);
|
||||
GetRequest get = new GetRequest(url.toString());
|
||||
Response response = null;
|
||||
JSONObject json = null;
|
||||
try
|
||||
{
|
||||
response = repositoryHttpClient.sendRequest(get);
|
||||
if (response.getStatus() != HttpStatus.SC_OK)
|
||||
{
|
||||
throw new NoSuchMethodException(coreName + " - GetNextTxCommitTime return status is "
|
||||
+ response.getStatus() + " when invoking " + url);
|
||||
}
|
||||
|
||||
Reader reader = new BufferedReader(new InputStreamReader(response.getContentAsStream(), "UTF-8"));
|
||||
json = new JSONObject(new JSONTokener(reader));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null)
|
||||
{
|
||||
response.release();
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled())
|
||||
{
|
||||
log.debug(json.toString());
|
||||
}
|
||||
|
||||
return Long.parseLong(json.get("nextTransactionCommitTimeMs").toString());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the minimum and the maximum commit time for transactions in a node id range.
|
||||
*
|
||||
* @param coreName alfresco, archive
|
||||
* @param fromNodeId Id of the initial node
|
||||
* @param toNodeId Id of the final node
|
||||
* @return Time of the first transaction, time of the last transaction
|
||||
* @throws IOException
|
||||
* @throws AuthenticationException
|
||||
* @throws NoSuchMethodException
|
||||
*/
|
||||
public Pair<Long, Long> getTxIntervalCommitTime(String coreName, Long fromNodeId, Long toNodeId)
|
||||
throws AuthenticationException, IOException, NoSuchMethodException
|
||||
{
|
||||
StringBuilder url = new StringBuilder(GET_TX_INTERVAL_COMMIT_TIME);
|
||||
url.append("?").append("fromNodeId").append("=").append(fromNodeId);
|
||||
url.append("&").append("toNodeId").append("=").append(toNodeId);
|
||||
GetRequest get = new GetRequest(url.toString());
|
||||
Response response = null;
|
||||
JSONObject json = null;
|
||||
try
|
||||
{
|
||||
response = repositoryHttpClient.sendRequest(get);
|
||||
if (response.getStatus() != HttpStatus.SC_OK)
|
||||
{
|
||||
throw new NoSuchMethodException(coreName + " - GetTxIntervalCommitTime return status is "
|
||||
+ response.getStatus() + " when invoking " + url);
|
||||
}
|
||||
|
||||
Reader reader = new BufferedReader(new InputStreamReader(response.getContentAsStream(), "UTF-8"));
|
||||
json = new JSONObject(new JSONTokener(reader));
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (response != null)
|
||||
{
|
||||
response.release();
|
||||
}
|
||||
}
|
||||
if (log.isDebugEnabled())
|
||||
{
|
||||
log.debug(json.toString());
|
||||
}
|
||||
|
||||
return new Pair<Long, Long>(Long.parseLong(json.get("minTransactionCommitTimeMs").toString()),
|
||||
Long.parseLong(json.get("maxTransactionCommitTimeMs").toString()));
|
||||
}
|
||||
|
||||
/*
|
||||
* type conversions from serialized JSON values to SOLR-consumable objects
|
||||
@@ -1363,13 +1365,13 @@ public class SOLRAPIClient
|
||||
this.namespaceDAO = namespaceDAO;
|
||||
|
||||
// add all default converters to this converter
|
||||
for (Entry<Class<?>, Map<Class<?>, Converter<?, ?>>> source : DefaultTypeConverter.INSTANCE.getConverters().entrySet())
|
||||
{
|
||||
for (Entry<Class<?>, Converter<?, ?>> dest : source.getValue().entrySet())
|
||||
{
|
||||
instance.addConverter((Class) source.getKey(), (Class) dest.getKey(), dest.getValue());
|
||||
}
|
||||
}
|
||||
for (Entry<Class<?>, Map<Class<?>, Converter<?, ?>>> source : DefaultTypeConverter.INSTANCE.getConverters().entrySet())
|
||||
{
|
||||
for (Entry<Class<?>, Converter<?, ?>> dest : source.getValue().entrySet())
|
||||
{
|
||||
instance.addConverter((Class) source.getKey(), (Class) dest.getKey(), dest.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
// dates
|
||||
instance.addConverter(String.class, Date.class, new TypeConverter.Converter<String, Date>()
|
||||
@@ -1378,7 +1380,7 @@ public class SOLRAPIClient
|
||||
{
|
||||
try
|
||||
{
|
||||
return ISO8601DateFormat.parse(source);
|
||||
return ISO8601DateFormat.parse(source);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
@@ -1596,7 +1598,7 @@ public class SOLRAPIClient
|
||||
private SolrApiContentStatus status;
|
||||
private String transformException;
|
||||
private String transformStatusStr;
|
||||
private Long transformDuration;
|
||||
private Long transformDuration;
|
||||
private String contentEncoding;
|
||||
|
||||
public GetTextContentResponse(Response response) throws IOException
|
||||
@@ -1607,7 +1609,7 @@ public class SOLRAPIClient
|
||||
this.transformStatusStr = response.getHeader("X-Alfresco-transformStatus");
|
||||
this.transformException = response.getHeader("X-Alfresco-transformException");
|
||||
String tmp = response.getHeader("X-Alfresco-transformDuration");
|
||||
this.transformDuration = (tmp != null ? Long.valueOf(tmp) : null);
|
||||
this.transformDuration = (tmp != null ? Long.valueOf(tmp) : null);
|
||||
this.contentEncoding = response.getHeader("Content-Encoding");
|
||||
setStatus();
|
||||
}
|
||||
@@ -1674,11 +1676,11 @@ public class SOLRAPIClient
|
||||
public Long getTransformDuration()
|
||||
{
|
||||
return transformDuration;
|
||||
}
|
||||
|
||||
public String getContentEncoding()
|
||||
{
|
||||
return contentEncoding;
|
||||
}
|
||||
|
||||
public String getContentEncoding()
|
||||
{
|
||||
return contentEncoding;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user