The Solr 6 ContentTracker keeps an in-memory cache of "clean" transactions that have already had the content fetched. This cache was added because the ContentTracker does not commit after each indexing run, so it uses the clean transaction cache to filter out transactions that have already been processed.
The ContentTracker adds each transaction to the cache before the content has been fetched for each node in the transaction.
Nodes that fail the content update will not be picked up on future runs because their transaction is already in the clean transactions cache.
This has the benefit of not continually retrying content that is not working, but there currently isn't a way retry the failed content updates.
1) Clear the clean transaction cache when a new searcher is opened. Because the failed nodes are no longer in the cache they will be retried each time the cache is cleared, following each new searcher opening.
The main advantage of this approach is that it's easy to implement.
The downside to this approach is that is will slow down the progress of the ContentTracker because the Solr 6 ContentTracker starts from the lowest transaction with dirty content and reads forward N transactions. The failed content transactions will eventually be very far behind the newest transactions causing ContentTracker to possibly stall on failing content updates.
2) Save the failed Content Nodes in the index and retry periodically.
The main advantage of this approach is that it will not slow down the progress of the ContentTracker.
The main disadvantage is that it's more code to implement.