mirror of
https://github.com/Alfresco/SearchServices.git
synced 2025-09-17 14:21:20 +00:00
[ SEARCH-2187 ] acquire lock max wait time, configuration property
This commit is contained in:
@@ -296,6 +296,8 @@ public class SolrInformationServer implements InformationServer
|
||||
private String skippingDocsQueryString;
|
||||
private boolean isSkippingDocsInitialized;
|
||||
|
||||
private long maxAllowedTimeForAcquiringDbIdLock;
|
||||
|
||||
protected enum FTSStatus {New, Dirty, Clean}
|
||||
|
||||
static class DocListCollector implements Collector, LeafCollector
|
||||
@@ -461,6 +463,8 @@ public class SolrInformationServer implements InformationServer
|
||||
holeRetention = Integer.parseInt(p.getProperty("alfresco.hole.retention", "3600000"));
|
||||
minHash = Boolean.parseBoolean(p.getProperty("alfresco.fingerprint", "true"));
|
||||
|
||||
maxAllowedTimeForAcquiringDbIdLock = Long.parseLong(p.getProperty("alfresco.tracker.maxNodeLockMs", "120000"));
|
||||
|
||||
dataModel = AlfrescoSolrDataModel.getInstance();
|
||||
|
||||
contentStreamLimit = Integer.parseInt(p.getProperty("alfresco.contentStreamLimit", "10000000"));
|
||||
@@ -3182,9 +3186,9 @@ public class SolrInformationServer implements InformationServer
|
||||
// I don't think we are concerned with this exception.
|
||||
}
|
||||
|
||||
if (System.currentTimeMillis() - startTime > 120000)
|
||||
if (System.currentTimeMillis() - startTime > maxAllowedTimeForAcquiringDbIdLock)
|
||||
{
|
||||
throw new AlfrescoLockException("Unable to acquire lock on nodeId " + id + " after " + 120000 + " msecs.");
|
||||
throw new AlfrescoLockException("Unable to acquire lock on nodeId " + id + " after " + maxAllowedTimeForAcquiringDbIdLock + " msecs.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -30,6 +30,8 @@ alfresco.hole.check.after=300000
|
||||
alfresco.batch.count=5000
|
||||
alfresco.recordUnindexedNodes=false
|
||||
|
||||
# max time (in msecs) a given tracker instance will try to acquire a lock on a given DBID
|
||||
alfresco.tracker.maxNodeLockMs=120000
|
||||
# encryption
|
||||
|
||||
# none, https
|
||||
|
@@ -1587,58 +1587,6 @@ public class SOLRAPIClient
|
||||
public void close()
|
||||
{
|
||||
repositoryHttpClient.close();
|
||||
executor.shutdown();
|
||||
}
|
||||
|
||||
final ExecutorService executor = Executors.newSingleThreadExecutor();
|
||||
|
||||
private JSONObject callRepositoryWithTimeout(String msgId, Request req) throws IOException, AuthenticationException, InterruptedException, TimeoutException, ExecutionException {
|
||||
List<Future<JSONObject>> result = executor.invokeAll(singletonList(() -> {
|
||||
Response response = null;
|
||||
LookAheadBufferedReader reader = null;
|
||||
JSONObject json;
|
||||
try
|
||||
{
|
||||
response = repositoryHttpClient.sendRequest(req);
|
||||
if (response.getStatus() != HttpStatus.SC_OK)
|
||||
{
|
||||
throw new AlfrescoRuntimeException(msgId + " return status:" + response.getStatus());
|
||||
}
|
||||
|
||||
reader = new LookAheadBufferedReader(new InputStreamReader(response.getContentAsStream(), StandardCharsets.UTF_8), LOGGER);
|
||||
json = new JSONObject(new JSONTokener(reader));
|
||||
|
||||
if (LOGGER.isDebugEnabled())
|
||||
{
|
||||
LOGGER.debug(json.toString(3));
|
||||
}
|
||||
return json;
|
||||
}
|
||||
catch (JSONException exception)
|
||||
{
|
||||
String message = "Received a malformed JSON payload. Request was \"" +
|
||||
req.getFullUri() +
|
||||
"Data: "
|
||||
+ ofNullable(reader)
|
||||
.map(LookAheadBufferedReader::lookAheadAndGetBufferedContent)
|
||||
.orElse("Not available");
|
||||
LOGGER.error(message);
|
||||
throw exception;
|
||||
}
|
||||
finally
|
||||
{
|
||||
ofNullable(response).ifPresent(Response::release);
|
||||
ofNullable(reader).ifPresent(this::silentlyClose);
|
||||
}
|
||||
}), 5, TimeUnit.SECONDS);
|
||||
|
||||
Future<JSONObject> response = result.iterator().next();
|
||||
if(response.isCancelled())
|
||||
{
|
||||
throw new TimeoutException("Request " + req + "has timed out. It has taken more than 5 seconds to respond");
|
||||
}
|
||||
|
||||
return response.get();
|
||||
}
|
||||
|
||||
private JSONObject callRepository(String msgId, Request req) throws IOException, AuthenticationException
|
||||
|
Reference in New Issue
Block a user