r1570 - trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr
Author: bpoussin Date: 2013-07-12 18:17:16 +0200 (Fri, 12 Jul 2013) New Revision: 1570 Url: http://nuiton.org/projects/wikitty/repository/revisions/1570 Log: fixes #2753: When wikitty open multiple solr server on same data file, solr index is corrupted Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java Modified: trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java =================================================================== --- trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2013-05-26 07:01:48 UTC (rev 1569) +++ trunk/wikitty-solr/src/main/java/org/nuiton/wikitty/storage/solr/SolrUtil.java 2013-07-12 16:17:16 UTC (rev 1570) @@ -65,12 +65,20 @@ final static private Log log = LogFactory.getLog(SolrUtil.class); final static private TimeLog timeLog = new TimeLog(SolrUtil.class); + /** + * Cache permettant de ne pas instancier 2 solr serveur qui travaillerait + * avec les memes fichiers sur le disque. + */ + static Map<String, SolrServer> solrServerCache = new HashMap<String, SolrServer>(); + public static SolrServer getSolrServer(ApplicationConfig config) { boolean removeSystemSolrDirFactoryKey = false; String solrDirFactoryKey = null; boolean removeSystemSolrDataDirKey = false; String solrDataDirKey = null; + + String solrDataDir = null; // init system env solr.data.dir if (config != null) { @@ -87,7 +95,7 @@ if (solrDirFactory != null && !solrDirFactory.contains("RAMDirectoryFactory")) { solrDataDirKey = WikittyConfigOption.WIKITTY_SEARCHENGINE_SOLR_DIRECTORY_DATA.getKey(); - String solrDataDir = config.getOption(solrDataDirKey); + solrDataDir = config.getOption(solrDataDirKey); // make sure that dir exists if (solrDataDir != null) { File file = new File(solrDataDir); @@ -102,13 +110,20 @@ } } - SolrServer result; - try { - CoreContainer.Initializer initializer = new CoreContainer.Initializer(); - CoreContainer solrCore = initializer.initialize(); - result = new EmbeddedSolrServer(solrCore, ""); - } catch (Exception eee) { - throw new WikittyException("SolR initialization error", eee); + SolrServer result = solrServerCache.get(solrDataDir); + if (result == null) { + try { + CoreContainer.Initializer initializer = new CoreContainer.Initializer(); + CoreContainer solrCore = initializer.initialize(); + result = new EmbeddedSolrServer(solrCore, ""); + if (solrDataDir != null) { + solrServerCache.put(solrDataDir, result); + } + } catch (Exception eee) { + throw new WikittyException("SolR initialization error", eee); + } + } else { + log.debug("re-use already instanciate SolrServer for " + solrDataDir); } if (removeSystemSolrDirFactoryKey) {
participants (1)
-
bpoussin@users.nuiton.org