Search in sources :

Example 1 with CommitTracker

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;
}
Also used : ContentTracker(org.alfresco.solr.tracker.ContentTracker) Tracker(org.alfresco.solr.tracker.Tracker) MetadataTracker(org.alfresco.solr.tracker.MetadataTracker) CommitTracker(org.alfresco.solr.tracker.CommitTracker) CascadeTracker(org.alfresco.solr.tracker.CascadeTracker) AclTracker(org.alfresco.solr.tracker.AclTracker) ModelTracker(org.alfresco.solr.tracker.ModelTracker) ArrayList(java.util.ArrayList) AclTracker(org.alfresco.solr.tracker.AclTracker) ContentTracker(org.alfresco.solr.tracker.ContentTracker) CascadeTracker(org.alfresco.solr.tracker.CascadeTracker) MetadataTracker(org.alfresco.solr.tracker.MetadataTracker)

Example 2 with CommitTracker

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) {
            }
        });
    }
}
Also used : ContentTracker(org.alfresco.solr.tracker.ContentTracker) Tracker(org.alfresco.solr.tracker.Tracker) MetadataTracker(org.alfresco.solr.tracker.MetadataTracker) CommitTracker(org.alfresco.solr.tracker.CommitTracker) CascadeTracker(org.alfresco.solr.tracker.CascadeTracker) AclTracker(org.alfresco.solr.tracker.AclTracker) ModelTracker(org.alfresco.solr.tracker.ModelTracker) SolrContentStore(org.alfresco.solr.content.SolrContentStore) SolrCore(org.apache.solr.core.SolrCore) CommitTracker(org.alfresco.solr.tracker.CommitTracker) Properties(java.util.Properties) TrackerRegistry(org.alfresco.solr.tracker.TrackerRegistry) SolrInformationServer(org.alfresco.solr.SolrInformationServer) ModelTracker(org.alfresco.solr.tracker.ModelTracker) CoreDescriptorDecorator(org.apache.solr.core.CoreDescriptorDecorator) SolrResourceLoader(org.apache.solr.core.SolrResourceLoader) CloseHook(org.apache.solr.core.CloseHook) SOLRAPIClientFactory(org.alfresco.solr.client.SOLRAPIClientFactory) SOLRAPIClient(org.alfresco.solr.client.SOLRAPIClient) SolrTrackerScheduler(org.alfresco.solr.tracker.SolrTrackerScheduler) SolrKeyResourceLoader(org.alfresco.solr.SolrKeyResourceLoader)

Aggregations

AclTracker (org.alfresco.solr.tracker.AclTracker)2 CascadeTracker (org.alfresco.solr.tracker.CascadeTracker)2 CommitTracker (org.alfresco.solr.tracker.CommitTracker)2 ContentTracker (org.alfresco.solr.tracker.ContentTracker)2 MetadataTracker (org.alfresco.solr.tracker.MetadataTracker)2 ModelTracker (org.alfresco.solr.tracker.ModelTracker)2 Tracker (org.alfresco.solr.tracker.Tracker)2 ArrayList (java.util.ArrayList)1 Properties (java.util.Properties)1 SolrInformationServer (org.alfresco.solr.SolrInformationServer)1 SolrKeyResourceLoader (org.alfresco.solr.SolrKeyResourceLoader)1 SOLRAPIClient (org.alfresco.solr.client.SOLRAPIClient)1 SOLRAPIClientFactory (org.alfresco.solr.client.SOLRAPIClientFactory)1 SolrContentStore (org.alfresco.solr.content.SolrContentStore)1 SolrTrackerScheduler (org.alfresco.solr.tracker.SolrTrackerScheduler)1 TrackerRegistry (org.alfresco.solr.tracker.TrackerRegistry)1 CloseHook (org.apache.solr.core.CloseHook)1 CoreDescriptorDecorator (org.apache.solr.core.CoreDescriptorDecorator)1 SolrCore (org.apache.solr.core.SolrCore)1 SolrResourceLoader (org.apache.solr.core.SolrResourceLoader)1