Package org.alfresco.solr.tracker
Class MetadataTracker
- java.lang.Object
-
- org.alfresco.solr.tracker.AbstractTracker
-
- org.alfresco.solr.tracker.ActivatableTracker
-
- org.alfresco.solr.tracker.MetadataTracker
-
- All Implemented Interfaces:
Tracker
public class MetadataTracker extends ActivatableTracker
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.alfresco.solr.tracker.Tracker
Tracker.Type
-
-
Field Summary
Fields Modifier and Type Field Description protected static org.slf4j.LoggerLOGGER-
Fields inherited from class org.alfresco.solr.tracker.ActivatableTracker
isEnabled
-
Fields inherited from class org.alfresco.solr.tracker.AbstractTracker
client, coreName, props, rollback, rollbackCausedBy, shardCount, shardInstance, shardKey, shardProperty, state, trackerId, transformContent, type
-
-
Constructor Summary
Constructors Constructor Description MetadataTracker(java.util.Properties p, org.alfresco.solr.client.SOLRAPIClient client, java.lang.String coreName, InformationServer informationServer)MetadataTracker(java.util.Properties p, org.alfresco.solr.client.SOLRAPIClient client, java.lang.String coreName, InformationServer informationServer, boolean checkRepoServicesAvailability)MetadataTracker constructor
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddNodeToIndex(java.lang.Long nodeId)voidaddNodeToPurge(java.lang.Long nodeId)voidaddNodeToReindex(java.lang.Long nodeId)voidaddQueryToReindex(java.lang.String query)voidaddTransactionToIndex(java.lang.Long txId)voidaddTransactionToPurge(java.lang.Long txId)voidaddTransactionToReindex(java.lang.Long txId)org.alfresco.solr.tracker.IndexHealthReportcheckIndex(java.lang.Long toTx, java.lang.Long fromTime, java.lang.Long toTime)org.alfresco.solr.NodeReportcheckNode(java.lang.Long dbid)Returns information about theNodeassociated with the given dbid.org.alfresco.solr.NodeReportcheckNode(org.alfresco.solr.client.Node node)protected voidclearScheduledMaintenanceWork()Cleans up the scheduled maintenance work collected by this tracker.protected voiddoTrack(java.lang.String iterationId)Subclasses must implement behaviour that completes the following steps, in order: Purge Reindex Index Track repositoryjava.util.List<org.alfresco.solr.client.Node>getFullNodesForDbTransaction(java.lang.Long txid)java.util.concurrent.SemaphoregetRunLock()Trackers implementing this method should decide if the Run Lock is applied globally for every Tracker Thread (static) or locally for each running Threadprotected org.alfresco.solr.client.TransactionsgetSomeTransactions(org.alfresco.solr.BoundedDeque<org.alfresco.solr.client.Transaction> txnsFound, java.lang.Long fromCommitTime, long timeStep, int maxResults, long endTime)protected java.lang.LonggetTxFromCommitTime(org.alfresco.solr.BoundedDeque<org.alfresco.solr.client.Transaction> txnsFound, long lastGoodTxCommitTimeInIndex)The fromCommitTime tells getSomeTransactions() where to start, this actually fairly straight forward.java.util.concurrent.SemaphoregetWriteLock()Trackers implementing this method should decide if the Write Lock is applied globally for every Tracker Thread (static) or locally for each running ThreadbooleanhasMaintenance()voidinvalidateState()voidmaintenance()protected voidtrackTransactions()Indexing new transactions from repository in batches of "transactionDocsBatchSize" size.-
Methods inherited from class org.alfresco.solr.tracker.ActivatableTracker
disable, enable, isDisabled, isEnabled, logAndClear, track
-
Methods inherited from class org.alfresco.solr.tracker.AbstractTracker
getDocRouter, getProps, getRollback, getRollbackCausedBy, getTrackerState, getType, isAlreadyInShutDownMode, setRollback, setShutdown, shutdown
-
-
-
-
Constructor Detail
-
MetadataTracker
public MetadataTracker(java.util.Properties p, org.alfresco.solr.client.SOLRAPIClient client, java.lang.String coreName, InformationServer informationServer)
-
MetadataTracker
public MetadataTracker(java.util.Properties p, org.alfresco.solr.client.SOLRAPIClient client, java.lang.String coreName, InformationServer informationServer, boolean checkRepoServicesAvailability)MetadataTracker constructor- Parameters:
p- includes SOLR core properties (from environment variables and properties file)client- Alfresco Repository http clientcoreName- Name of the SOLR Core (alfresco, archive)informationServer- SOLR Information ServercheckRepoServicesAvailability- is true if Repo Services availability needs to be checked
-
-
Method Detail
-
getWriteLock
public java.util.concurrent.Semaphore getWriteLock()
Description copied from class:AbstractTrackerTrackers implementing this method should decide if the Write Lock is applied globally for every Tracker Thread (static) or locally for each running Thread- Specified by:
getWriteLockin interfaceTracker- Specified by:
getWriteLockin classAbstractTracker
-
getRunLock
public java.util.concurrent.Semaphore getRunLock()
Description copied from class:AbstractTrackerTrackers implementing this method should decide if the Run Lock is applied globally for every Tracker Thread (static) or locally for each running Thread- Specified by:
getRunLockin classAbstractTracker
-
doTrack
protected void doTrack(java.lang.String iterationId) throws org.alfresco.httpclient.AuthenticationException, java.io.IOException, org.json.JSONExceptionDescription copied from class:AbstractTrackerSubclasses must implement behaviour that completes the following steps, in order:- Purge
- Reindex
- Index
- Track repository
- Specified by:
doTrackin classAbstractTracker- Parameters:
iterationId- an identifier which is uniquely associated with a given iteration.- Throws:
org.alfresco.httpclient.AuthenticationExceptionjava.io.IOExceptionorg.json.JSONException
-
maintenance
public void maintenance() throws java.lang.Exception- Throws:
java.lang.Exception
-
hasMaintenance
public boolean hasMaintenance()
-
getTxFromCommitTime
protected java.lang.Long getTxFromCommitTime(org.alfresco.solr.BoundedDeque<org.alfresco.solr.client.Transaction> txnsFound, long lastGoodTxCommitTimeInIndex)The fromCommitTime tells getSomeTransactions() where to start, this actually fairly straight forward. What makes this code so tricky to understand is the state.getTimeToStopIndexing(). There are two scenarios to keep in mind: 1) Full re-index: In this scenario the state.getTimeToStopIndexing() will never stop the indexing. 2) Up-to-date indexing: This is where state.getTimeToStopIndexing() gets interesting. In this scenario the Solr index is already up to date with the repo and it is tracking new transactions. The state.getTimeToStopIndexing() in this scenario causes the getSomeTransactions() call to stop returning results if it finds a transaction beyond a specific point in time. This will break out of this loop and end the tracker run. The next time the metadata tracker runs the "continueState()" method applies the "hole retention" to state.getLastGoodTxCommitTimeInIndex(). This causes the state.getLastGoodTxCommitTimeInIndex() to scan for prior transactions that might have been missed.
-
getSomeTransactions
protected org.alfresco.solr.client.Transactions getSomeTransactions(org.alfresco.solr.BoundedDeque<org.alfresco.solr.client.Transaction> txnsFound, java.lang.Long fromCommitTime, long timeStep, int maxResults, long endTime) throws org.alfresco.httpclient.AuthenticationException, java.io.IOException, org.json.JSONException, org.apache.commons.codec.EncoderException, java.lang.NoSuchMethodException- Throws:
org.alfresco.httpclient.AuthenticationExceptionjava.io.IOExceptionorg.json.JSONExceptionorg.apache.commons.codec.EncoderExceptionjava.lang.NoSuchMethodException
-
trackTransactions
protected void trackTransactions() throws java.io.IOException, org.json.JSONExceptionIndexing new transactions from repository in batches of "transactionDocsBatchSize" size. Additionally, the nodes inside a transaction batch are indexed in batches of "nodeBatchSize" size.- Throws:
java.io.IOExceptionorg.json.JSONException
-
checkNode
public org.alfresco.solr.NodeReport checkNode(java.lang.Long dbid)
Description copied from class:AbstractTrackerReturns information about theNodeassociated with the given dbid.- Overrides:
checkNodein classAbstractTracker- Parameters:
dbid- the node identifier.- Returns:
- the
Nodeassociated with the given dbid.
-
checkNode
public org.alfresco.solr.NodeReport checkNode(org.alfresco.solr.client.Node node)
-
getFullNodesForDbTransaction
public java.util.List<org.alfresco.solr.client.Node> getFullNodesForDbTransaction(java.lang.Long txid)
-
checkIndex
public org.alfresco.solr.tracker.IndexHealthReport checkIndex(java.lang.Long toTx, java.lang.Long fromTime, java.lang.Long toTime) throws java.io.IOException, org.alfresco.httpclient.AuthenticationException, org.json.JSONException, org.apache.commons.codec.EncoderException, java.lang.NoSuchMethodException- Throws:
java.io.IOExceptionorg.alfresco.httpclient.AuthenticationExceptionorg.json.JSONExceptionorg.apache.commons.codec.EncoderExceptionjava.lang.NoSuchMethodException
-
addTransactionToPurge
public void addTransactionToPurge(java.lang.Long txId)
-
addNodeToPurge
public void addNodeToPurge(java.lang.Long nodeId)
-
addTransactionToReindex
public void addTransactionToReindex(java.lang.Long txId)
-
addNodeToReindex
public void addNodeToReindex(java.lang.Long nodeId)
-
addTransactionToIndex
public void addTransactionToIndex(java.lang.Long txId)
-
clearScheduledMaintenanceWork
protected void clearScheduledMaintenanceWork()
Description copied from class:ActivatableTrackerCleans up the scheduled maintenance work collected by this tracker.- Overrides:
clearScheduledMaintenanceWorkin classActivatableTracker
-
addNodeToIndex
public void addNodeToIndex(java.lang.Long nodeId)
-
invalidateState
public void invalidateState()
- Specified by:
invalidateStatein interfaceTracker- Overrides:
invalidateStatein classAbstractTracker
-
addQueryToReindex
public void addQueryToReindex(java.lang.String query)
-
-