SEARCH-253 Tracking errors may not be recorded in the index and recovered.

This commit is contained in:
ahind
2016-11-24 13:14:47 +00:00
parent 36c7d87839
commit d42245773f
6 changed files with 38 additions and 2 deletions
@@ -68,7 +68,7 @@ public abstract class AbstractTracker implements Tracker
protected String shardMethod;
protected boolean transformContent;
protected String shardTemplate;
protected boolean rollback;
protected volatile boolean rollback;
/*
@@ -18,9 +18,13 @@
*/
package org.alfresco.solr.tracker;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
abstract class AbstractWorkerRunnable implements Runnable
{
protected final static Logger log = LoggerFactory.getLogger(AbstractWorkerRunnable.class);
QueueHandler queueHandler;
public AbstractWorkerRunnable(QueueHandler qh)
@@ -35,20 +39,28 @@ abstract class AbstractWorkerRunnable implements Runnable
@Override
public void run()
{
boolean failed = true;
try
{
doWork();
failed = false;
}
catch (Exception e)
{
e.printStackTrace();
log.warn("Index tracking batch hit an unrecoverable error ", e);
}
finally
{
// Triple check that we get the queue state right
queueHandler.removeFromQueueAndProdHead(this);
if(failed)
{
onFail();
}
}
}
abstract protected void doWork() throws Exception;
abstract protected void onFail();
}
@@ -853,6 +853,12 @@ public class AclTracker extends AbstractTracker
}
}
@Override
protected void onFail()
{
setRollback(true);
}
private List<Acl> filterAcls(List<Acl> acls)
{
ArrayList<Acl> filteredList = new ArrayList(acls.size());
@@ -116,6 +116,12 @@ public class CascadeTracker extends AbstractTracker implements Tracker
{
this.infoServer.cascadeNodes(nodes, true);
}
@Override
protected void onFail()
{
setRollback(true);
}
}
public void invalidateState() {
@@ -156,5 +156,11 @@ public class ContentTracker extends AbstractTracker implements Tracker
//System.out.println("################ Update doc:"+doc.dbId);
this.infoServer.updateContentToIndexAndCache(doc.dbId, doc.tenant);
}
@Override
protected void onFail()
{
// Will redo if not persisted
}
}
}
@@ -821,6 +821,12 @@ public class MetadataTracker extends AbstractTracker implements Tracker
}
}
@Override
protected void onFail()
{
setRollback(true);
}
private List<Node> filterNodes(List<Node> nodes)
{
ArrayList<Node> filteredList = new ArrayList<Node>(nodes.size());