Example usage for org.apache.solr.core SolrCore addCloseHook

List of usage examples for org.apache.solr.core SolrCore addCloseHook

Introduction

In this page you can find the example usage for org.apache.solr.core SolrCore addCloseHook.

Prototype

public void addCloseHook(CloseHook hook) 

Source Link

Document

Add a close callback hook

Usage

From source file:com.nominanuda.solr.SingletonSolrAware.java

License:Apache License

public void inform(SolrCore core) {
    if (coreContainer == null) {
        coreContainer = core.getCoreDescriptor().getCoreContainer();
    }/*  ww w. j  av  a 2s  . c  om*/
    core.addCloseHook(closeHook);
}

From source file:com.search.MySearchHandler.java

License:Apache License

/**
 * Initialize the components based on name. Note, if using
 * <code>INIT_FIRST_COMPONENTS</code> or <code>INIT_LAST_COMPONENTS</code>,
 * then the {@link DebugComponent} will always occur last. If this is not
 * desired, then one must explicitly declare all components using the
 * <code>INIT_COMPONENTS</code> syntax.
 *//*from   w  w  w.  j a  va  2 s  .  co  m*/
@Override
@SuppressWarnings("unchecked")
public void inform(SolrCore core) {
    Object declaredComponents = initArgs.get(INIT_COMPONENTS);
    List<String> first = (List<String>) initArgs.get(INIT_FIRST_COMPONENTS);
    List<String> last = (List<String>) initArgs.get(INIT_LAST_COMPONENTS);

    List<String> list = null;
    boolean makeDebugLast = true;
    if (declaredComponents == null) {
        // Use the default component list
        list = getDefaultComponents();

        if (first != null) {
            List<String> clist = first;
            clist.addAll(list);
            list = clist;
        }

        if (last != null) {
            list.addAll(last);
        }
    } else {
        list = (List<String>) declaredComponents;
        if (first != null || last != null) {
            System.out.println("First/Last components only valid if you do not declare 'components'");
        }
        makeDebugLast = false;
    }

    // Build the component list
    components = new ArrayList<SearchComponent>(list.size());
    DebugComponent dbgCmp = null;
    for (String c : list) {
        SearchComponent comp = core.getSearchComponent(c);
        if (comp instanceof DebugComponent && makeDebugLast == true) {
            dbgCmp = (DebugComponent) comp;
        } else {
            components.add(comp);
            log.debug("Adding  component:" + comp);
        }
    }
    if (makeDebugLast == true && dbgCmp != null) {
        components.add(dbgCmp);
        log.debug("Adding  debug component:" + dbgCmp);
    }
    if (shfInfo == null) {
        shardHandlerFactory = core.getCoreDescriptor().getCoreContainer().getShardHandlerFactory();
    } else {
        shardHandlerFactory = core.createInitInstance(shfInfo, ShardHandlerFactory.class, null, null);
        core.addCloseHook(new CloseHook() {
            @Override
            public void preClose(SolrCore core) {
                shardHandlerFactory.close();
            }

            @Override
            public void postClose(SolrCore core) {
            }
        });
    }

}

From source file:com.search.MySearchHandlerTest.java

License:Apache License

/**
 * Initialize the components based on name.  Note, if using <code>INIT_FIRST_COMPONENTS</code> or <code>INIT_LAST_COMPONENTS</code>,
 * then the {@link DebugComponent} will always occur last.  If this is not desired, then one must explicitly declare all components using
 * the <code>INIT_COMPONENTS</code> syntax.
 *///from ww w. j  a  v  a  2s. c  o  m
@Override
@SuppressWarnings("unchecked")
public void inform(SolrCore core) {
    Object declaredComponents = initArgs.get(INIT_COMPONENTS);
    List<String> first = (List<String>) initArgs.get(INIT_FIRST_COMPONENTS);
    List<String> last = (List<String>) initArgs.get(INIT_LAST_COMPONENTS);

    List<String> list = null;
    boolean makeDebugLast = true;
    if (declaredComponents == null) {
        // Use the default component list
        list = getDefaultComponents();

        if (first != null) {
            List<String> clist = first;
            clist.addAll(list);
            list = clist;
        }

        if (last != null) {
            list.addAll(last);
        }
    } else {
        list = (List<String>) declaredComponents;
        if (first != null || last != null) {
            throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
                    "First/Last components only valid if you do not declare 'components'");
        }
        makeDebugLast = false;
    }

    // Build the component list
    components = new ArrayList<SearchComponent>(list.size());
    DebugComponent dbgCmp = null;
    for (String c : list) {
        SearchComponent comp = core.getSearchComponent(c);
        if (comp instanceof DebugComponent && makeDebugLast == true) {
            dbgCmp = (DebugComponent) comp;
        } else {
            components.add(comp);
            log.debug("Adding  component:" + comp);
        }
    }
    if (makeDebugLast == true && dbgCmp != null) {
        components.add(dbgCmp);
        log.debug("Adding  debug component:" + dbgCmp);
    }
    if (shfInfo == null) {
        shardHandlerFactory = core.getCoreDescriptor().getCoreContainer().getShardHandlerFactory();
    } else {
        shardHandlerFactory = core.createInitInstance(shfInfo, ShardHandlerFactory.class, null, null);
        core.addCloseHook(new CloseHook() {
            @Override
            public void preClose(SolrCore core) {
                shardHandlerFactory.close();
            }

            @Override
            public void postClose(SolrCore core) {
            }
        });
    }

}

From source file:com.zemanta.solrcassandrabridge.CassandraBridgeComponent.java

License:Apache License

@Override
public void inform(SolrCore core) {
    log.warn("A2");
    log.info("B2");
    core.addCloseHook(new CloseHook() {
        @Override//w  w  w  .  java2  s.co m
        public void preClose(SolrCore core) {
            cassandraConnector.close();
        }

        @Override
        public void postClose(SolrCore core) {
        }
    });

}

From source file:org.alfresco.solr.LegacySolrInformationServer.java

License:Open Source License

public LegacySolrInformationServer(AlfrescoCoreAdminHandler adminHandler, SolrCore core) {
    this.adminHandler = adminHandler;
    this.core = core;

    Properties p = core.getResourceLoader().getCoreProperties();
    authorityCacheSize = Integer.parseInt(p.getProperty("solr.authorityCache.size", "64"));
    filterCacheSize = Integer.parseInt(p.getProperty("solr.filterCache.size", "64"));
    pathCacheSize = Integer.parseInt(p.getProperty("solr.pathCache.size", "64"));
    recordUnindexedNodes = Boolean.parseBoolean(p.getProperty("alfresco.recordUnindexedNodes", "true"));
    transformContent = Boolean.parseBoolean(p.getProperty("alfresco.index.transformContent", "true"));
    lag = Integer.parseInt(p.getProperty("alfresco.lag", "1000"));
    holeRetention = Integer.parseInt(p.getProperty("alfresco.hole.retention", "3600000"));

    SolrResourceLoader loader = core.getSchema().getResourceLoader();
    String id = loader.getInstanceDir();
    SolrKeyResourceLoader keyResourceLoader = new SolrKeyResourceLoader(loader);

    String coreName = core.getName();
    core.addCloseHook(this);

    boolean storeAll = Boolean.parseBoolean(p.getProperty("alfresco.storeAll", "false"));
    dataModel = AlfrescoSolrDataModel.getInstance(id);
    dataModel.setStoreAll(storeAll);//w  ww  .  j  a  v  a  2  s .com

    this.coreTracker = new MultiThreadedCoreTracker(adminHandler.getScheduler(), id, p, keyResourceLoader,
            coreName, this);

    this.skipDescendantAuxDocsForSpecificTypes = Boolean
            .parseBoolean(p.getProperty("alfresco.metadata.skipDescendantAuxDocsForSpecificTypes", "false"));
    if (skipDescendantAuxDocsForSpecificTypes) {
        initSkippingDescendantAuxDocs(p, typesForSkippingDescendantAuxDocs, PROP_PREFIX_PARENT_TYPE,
                QueryConstants.FIELD_TYPE, new DefinitionExistChecker() {
                    @Override
                    public boolean isDefinitionExists(QName qName) {
                        return (null != dataModel.getDictionaryService(CMISStrictDictionaryService.DEFAULT)
                                .getType(qName));
                    }
                });
    }
    this.skipDescendantAuxDocsForSpecificAspects = Boolean
            .parseBoolean(p.getProperty("alfresco.metadata.skipDescendantAuxDocsForSpecificAspects", "false"));
    if (skipDescendantAuxDocsForSpecificAspects) {
        initSkippingDescendantAuxDocs(p, aspectsForSkippingDescendantAuxDocs, PROP_PREFIX_PARENT_ASPECT,
                QueryConstants.FIELD_ASPECT, new DefinitionExistChecker() {
                    @Override
                    public boolean isDefinitionExists(QName qName) {
                        return (null != dataModel.getDictionaryService(CMISStrictDictionaryService.DEFAULT)
                                .getAspect(qName));
                    }
                });
    }
}

From source file:org.alfresco.solr.lifecycle.SolrCoreLoadRegistration.java

License:Open Source License

/**
 * Registers with the admin handler the information server and the trackers.
 *//* w  w w  .  j a  va2s  . c  o m*/
public static void registerForCore(AlfrescoCoreAdminHandler adminHandler, CoreContainer coreContainer,
        SolrCore core, String coreName) {

    TrackerRegistry trackerRegistry = adminHandler.getTrackerRegistry();
    Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getProperties();
    //Prepare cores
    SolrResourceLoader loader = core.getLatestSchema().getResourceLoader();
    SolrKeyResourceLoader keyResourceLoader = new SolrKeyResourceLoader(loader);
    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);

    SolrTrackerScheduler scheduler = adminHandler.getScheduler();

    // Prevents other threads from registering the ModelTracker at the same time
    // Create model tracker and load all the persisted models
    createModelTracker(coreName, trackerRegistry, props, coreContainer.getSolrHome(), repositoryClient, srv,
            scheduler);

    log.info("Starting to track " + coreName);
    if (Boolean.parseBoolean(props.getProperty("enable.alfresco.tracking", "false"))) {

        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);
        }

        List<Tracker> trackers = createCoreTrackers(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");
        trackers.add(commitTracker); //Add the commitTracker to the list of scheduled trackers that can be shutdown

        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) {
                // Nothing to be done here
            }
        });
    }
}

From source file:org.alfresco.solr.tracker.CoreWatcherJob.java

License:Open Source License

/**
 * Registers with the admin handler the information server and the trackers.
 *//*from   w  ww. j  a v  a2s  . c o m*/
private void registerForCore(AlfrescoCoreAdminHandler adminHandler, CoreContainer coreContainer, SolrCore core,
        String coreName, TrackerRegistry trackerRegistry) throws JobExecutionException {
    Properties props = new CoreDescriptorDecorator(core.getCoreDescriptor()).getCoreProperties();
    boolean testcase = Boolean.parseBoolean(System.getProperty("alfresco.test", "false"));
    if (Boolean.parseBoolean(props.getProperty("enable.alfresco.tracking", "false"))) {
        core.addCloseHook(new AlfrescoSolrCloseHook(adminHandler));

        SolrTrackerScheduler scheduler = adminHandler.getScheduler();
        SolrResourceLoader loader = core.getLatestSchema().getResourceLoader();
        SolrKeyResourceLoader keyResourceLoader = new SolrKeyResourceLoader(loader);
        SOLRAPIClientFactory clientFactory = new SOLRAPIClientFactory();
        SOLRAPIClient repositoryClient = clientFactory.getSOLRAPIClient(props, keyResourceLoader,
                AlfrescoSolrDataModel.getInstance().getDictionaryService(CMISStrictDictionaryService.DEFAULT),
                AlfrescoSolrDataModel.getInstance().getNamespaceDAO());
        SolrContentStore solrContentStore = this.getSolrContentStore(coreContainer);
        SolrInformationServer srv = new SolrInformationServer(adminHandler, core, repositoryClient,
                solrContentStore);
        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) {
                logIfDebugEnabled("Creating ModelTracker when registering trackers for core " + coreName);
                mTracker = new ModelTracker(coreContainer.getSolrHome(), props, repositoryClient, coreName,
                        srv);
                if (testcase) {
                    // We don't want the trackers scheduled if we are running a test.
                    return;
                }
                trackerRegistry.setModelTracker(mTracker);

                scheduler.schedule(mTracker, coreName, props);
            }
        }

        log.info("Ensuring first model sync.");
        mTracker.ensureFirstModelSync();
        log.info("Done ensuring first model sync.");

        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);
    }
}

From source file:org.springframework.data.rest.webmvc.solr.SolrInfrastructureConfig.java

License:Apache License

/**
 * {@link SpringJUnit4ClassRunner} executes {@link ClassRule}s before the actual shutdown of the
 * {@link ApplicationContext}. This causes the {@link TemporaryFolder} to vanish before Solr can gracefully shutdown.
 * <br />/*from   w  w  w.  java 2  s  . c  o  m*/
 * To prevent error messages popping up we register a {@link CloseHook} re adding the index directory and removing it
 * after {@link SolrCore#close()}.
 * 
 * @param factory
 */
private void attachCloseHook(SolrClientFactory factory) {

    EmbeddedSolrServer server = (EmbeddedSolrServer) factory.getSolrClient();

    for (SolrCore core : server.getCoreContainer().getCores()) {

        core.addCloseHook(new CloseHook() {

            private String path;

            @Override
            public void preClose(SolrCore core) {

                CoreDescriptor cd = core.getCoreDescriptor();

                if (cd == null) {
                    return;
                }

                File tmp = new File(core.getIndexDir()).getParentFile();

                if (tmp.exists()) {
                    return;
                }

                try {

                    File indexFile = new File(tmp, "index");
                    indexFile.mkdirs();

                    this.path = indexFile.getPath();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void postClose(SolrCore core) {

                if (!StringUtils.hasText(this.path)) {
                    return;
                }

                File tmp = new File(this.path);

                if (tmp.exists() && tmp.getPath().startsWith(FileUtils.getTempDirectoryPath())) {

                    try {
                        FileUtils.deleteDirectory(tmp);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
}

From source file:org.springframework.data.solr.AbstractITestWithEmbeddedSolrServer.java

License:Apache License

@BeforeClass
public static void initSolrServer()
        throws IOException, ParserConfigurationException, SAXException, InterruptedException {

    String solrHome = ResourceUtils.getURL("classpath:org/springframework/data/solr").getPath();
    CoreContainer coreContainer = CoreContainer.createAndLoad(solrHome, new File(solrHome + "/solr.xml"));

    for (SolrCore core : coreContainer.getCores()) {
        core.addCloseHook(new CloseHook() {
            @Override/* w w  w . j ava2 s. co  m*/
            public void preClose(SolrCore core) {
            }

            @Override
            public void postClose(SolrCore core) {
                CoreDescriptor cd = core.getCoreDescriptor();
                if (cd != null) {
                    File dataDir = new File(cd.getInstanceDir() + File.separator + "data");
                    try {
                        FileUtils.deleteDirectory(dataDir);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }

    solrServer = new EmbeddedSolrServer(coreContainer, "collection1");
}

From source file:uk.co.flax.biosolr.solr.update.processor.OntologyUpdateProcessorFactory.java

License:Apache License

private void initialiseOntologyCheckScheduler(SolrCore core) {
    executor = new ScheduledThreadPoolExecutor(1, new DefaultSolrThreadFactory("ontologyUpdate"),
            (Runnable r, ThreadPoolExecutor e) -> LOGGER.warn("Skipping execution of '{}' using '{}'", r, e));

    executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
    executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);

    // Add CloseHook to tidy up if core closes
    core.addCloseHook(new CloseHook() {
        @Override//ww  w. jav a2s.co m
        public void preClose(SolrCore core) {
            LOGGER.info("Triggering graceful shutdown of OntologyUpdate executor");
            disposeHelper();
            executor.shutdown();
        }

        @Override
        public void postClose(SolrCore core) {
            if (executor.isTerminating()) {
                LOGGER.info("Forcing shutdown of OntologyUpdate executor");
                executor.shutdownNow();
            }
        }
    });

    if (DELETE_CHECK_DELAY_MS > 0) {
        executor.scheduleAtFixedRate(new OntologyCheckRunnable(this), DELETE_CHECK_DELAY_MS,
                DELETE_CHECK_DELAY_MS, TimeUnit.MILLISECONDS);
    }
}