SEARCH-2112: When using Shard DB_ID_RANGE method, check firstTransaction only when Shard is not empty.

This commit is contained in:
Angel Borroy
2020-02-24 09:41:38 +01:00
parent 61faf9ab2d
commit a043c474d2
@@ -278,30 +278,35 @@ public class MetadataTracker extends CoreStatePublisher implements Tracker
} }
} }
firstTransactions = client.getTransactions(minCommitTime, 0L, null, Long.MAX_VALUE, 1); // When a Shard with DB_ID_RANGE method is empty, minCommitTime is -1.
if (!firstTransactions.getTransactions().isEmpty()) // No firstTransaction checking is required for this case.
{ if (minCommitTime != -1l) {
Transaction firstTransaction = firstTransactions.getTransactions().get(0);
long firstTxId = firstTransaction.getId();
long firstTransactionCommitTime = firstTransaction.getCommitTimeMs();
int setSize = this.infoSrv.getTxDocsSize(""+firstTxId, ""+firstTransactionCommitTime);
if (setSize == 0) firstTransactions = client.getTransactions(minCommitTime, 0L, null, 2000l, 1);
if (!firstTransactions.getTransactions().isEmpty())
{ {
log.error("First transaction was not found with the correct timestamp."); Transaction firstTransaction = firstTransactions.getTransactions().get(0);
log.error("SOLR has successfully connected to your repository however the SOLR indexes and repository database do not match."); long firstTxId = firstTransaction.getId();
log.error("If this is a new or rebuilt database your SOLR indexes also need to be re-built to match the database."); long firstTransactionCommitTime = firstTransaction.getCommitTimeMs();
log.error("You can also check your SOLR connection details in solrcore.properties."); int setSize = this.infoSrv.getTxDocsSize(""+firstTxId, ""+firstTransactionCommitTime);
throw new AlfrescoRuntimeException("Initial transaction not found with correct timestamp");
} if (setSize == 0)
else if (setSize == 1) {
{ log.error("First transaction was not found with the correct timestamp.");
state.setCheckedFirstTransactionTime(true); log.error("SOLR has successfully connected to your repository however the SOLR indexes and repository database do not match.");
log.info("Verified first transaction and timestamp in index"); log.error("If this is a new or rebuilt database your SOLR indexes also need to be re-built to match the database.");
} log.error("You can also check your SOLR connection details in solrcore.properties.");
else throw new AlfrescoRuntimeException("Initial transaction not found with correct timestamp");
{ }
log.warn("Duplicate initial transaction found with correct timestamp"); else if (setSize == 1)
{
state.setCheckedFirstTransactionTime(true);
log.info("Verified first transaction and timestamp in index");
}
else
{
log.warn("Duplicate initial transaction found with correct timestamp");
}
} }
} }
} }