use of org.alfresco.solr.tracker.CommitTracker in project SearchServices by Alfresco.
the class SolrCoreLoadRegistration method createTrackers.
/**
* Creates the trackers
*
* @param coreName
* @param trackerRegistry
* @param props
* @param scheduler
* @param repositoryClient
* @param srv
* @return A list of trackers
*/
private static List<Tracker> createTrackers(String coreName, TrackerRegistry trackerRegistry, Properties props, SolrTrackerScheduler scheduler, SOLRAPIClient repositoryClient, SolrInformationServer srv) {
List<Tracker> trackers = new ArrayList<Tracker>();
AclTracker aclTracker = new AclTracker(props, repositoryClient, coreName, srv);
trackerRegistry.register(coreName, aclTracker);
scheduler.schedule(aclTracker, coreName, props);
ContentTracker contentTrkr = new ContentTracker(props, repositoryClient, coreName, srv);
trackerRegistry.register(coreName, contentTrkr);
scheduler.schedule(contentTrkr, coreName, props);
MetadataTracker metaTrkr = new MetadataTracker(props, repositoryClient, coreName, srv);
trackerRegistry.register(coreName, metaTrkr);
scheduler.schedule(metaTrkr, coreName, props);
CascadeTracker cascadeTrkr = new CascadeTracker(props, repositoryClient, coreName, srv);
trackerRegistry.register(coreName, cascadeTrkr);
scheduler.schedule(cascadeTrkr, coreName, props);
// The CommitTracker will acquire these locks in order
// The ContentTracker will likely have the longest runs so put it first to ensure the MetadataTracker is not paused while
// waiting for the ContentTracker to release it's lock.
// The aclTracker will likely have the shortest runs so put it last.
trackers.add(cascadeTrkr);
trackers.add(contentTrkr);
trackers.add(metaTrkr);
trackers.add(aclTracker);
return trackers;
}
use of org.alfresco.solr.tracker.CommitTracker in project SearchServices by Alfresco.
the class SolrCoreLoadRegistration method registerForCore.
/**
* Registers with the admin handler the information server and the trackers.
*/
public static void registerForCore(AlfrescoCoreAdminHandler adminHandler, CoreContainer coreContainer, SolrCore core, String coreName) {
TrackerRegistry trackerRegistry = adminHandler.getTrackerRegistry();
Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getProperties();
if (Boolean.parseBoolean(props.getProperty("enable.alfresco.tracking", "false"))) {
SolrTrackerScheduler scheduler = adminHandler.getScheduler();
SolrResourceLoader loader = core.getLatestSchema().getResourceLoader();
SolrKeyResourceLoader keyResourceLoader = new SolrKeyResourceLoader(loader);
if (trackerRegistry.hasTrackersForCore(coreName)) {
log.info("Trackers for " + coreName + " is already registered, shutting them down.");
shutdownTrackers(coreName, trackerRegistry.getTrackersForCore(coreName), scheduler);
trackerRegistry.removeTrackersForCore(coreName);
adminHandler.getInformationServers().remove(coreName);
}
SOLRAPIClientFactory clientFactory = new SOLRAPIClientFactory();
SOLRAPIClient repositoryClient = clientFactory.getSOLRAPIClient(props, keyResourceLoader, AlfrescoSolrDataModel.getInstance().getDictionaryService(CMISStrictDictionaryService.DEFAULT), AlfrescoSolrDataModel.getInstance().getNamespaceDAO());
// Start content store
SolrContentStore contentStore = new SolrContentStore(coreContainer.getSolrHome());
SolrInformationServer srv = new SolrInformationServer(adminHandler, core, repositoryClient, contentStore);
props.putAll(srv.getProps());
adminHandler.getInformationServers().put(coreName, srv);
log.info("Starting to track " + coreName);
ModelTracker mTracker = null;
// Prevents other threads from registering the ModelTracker at the same time
synchronized (trackerRegistry) {
mTracker = trackerRegistry.getModelTracker();
if (mTracker == null) {
log.debug("Creating ModelTracker when registering trackers for core " + coreName);
mTracker = new ModelTracker(coreContainer.getSolrHome(), props, repositoryClient, coreName, srv);
trackerRegistry.setModelTracker(mTracker);
log.info("Ensuring first model sync.");
mTracker.ensureFirstModelSync();
log.info("Done ensuring first model sync.");
// Scheduling the ModelTracker.
scheduler.schedule(mTracker, coreName, props);
}
}
List<Tracker> trackers = createTrackers(coreName, trackerRegistry, props, scheduler, repositoryClient, srv);
CommitTracker commitTracker = new CommitTracker(props, repositoryClient, coreName, srv, trackers);
trackerRegistry.register(coreName, commitTracker);
scheduler.schedule(commitTracker, coreName, props);
log.info("The Trackers are now scheduled to run");
// Add the commitTracker to the list of scheduled trackers that can be shutdown
trackers.add(commitTracker);
core.addCloseHook(new CloseHook() {
@Override
public void preClose(SolrCore core) {
log.info("Shutting down " + core.getName());
SolrCoreLoadRegistration.shutdownTrackers(core.getName(), trackers, scheduler);
}
@Override
public void postClose(SolrCore core) {
}
});
}
}
Aggregations