/** just tries to configure things to keep the open file * count lowish */ public static void reduceOpenFiles(IndexWriter w) { // keep number of open files lowish MergePolicy mp = w.getConfig().getMergePolicy(); if (mp instanceof LogMergePolicy) { LogMergePolicy lmp = (LogMergePolicy) mp; lmp.setMergeFactor(Math.min(5, lmp.getMergeFactor())); lmp.setNoCFSRatio(1.0); } else if (mp instanceof TieredMergePolicy) { TieredMergePolicy tmp = (TieredMergePolicy) mp; tmp.setMaxMergeAtOnce(Math.min(5, tmp.getMaxMergeAtOnce())); tmp.setSegmentsPerTier(Math.min(5, tmp.getSegmentsPerTier())); tmp.setNoCFSRatio(1.0); } MergeScheduler ms = w.getConfig().getMergeScheduler(); if (ms instanceof ConcurrentMergeScheduler) { // wtf... shouldnt it be even lower since its 1 by default?!?! ((ConcurrentMergeScheduler) ms).setMaxMergesAndThreads(3, 2); } }
@Test public void testTieredMPSolrIndexConfigCreation() throws Exception { SolrConfig solrConfig = new SolrConfig("solr" + File.separator + "collection1", "solrconfig-tieredmergepolicy.xml", null); SolrIndexConfig solrIndexConfig = new SolrIndexConfig(solrConfig, null, null); assertNotNull(solrIndexConfig); IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema("schema.xml", solrConfig); IndexWriterConfig iwc = solrIndexConfig.toIndexWriterConfig(indexSchema); assertNotNull("null mp", iwc.getMergePolicy()); assertTrue("mp is not TMP", iwc.getMergePolicy() instanceof TieredMergePolicy); TieredMergePolicy mp = (TieredMergePolicy) iwc.getMergePolicy(); assertEquals("mp.maxMergeAtOnceExplicit", 19, mp.getMaxMergeAtOnceExplicit()); assertEquals("mp.segmentsPerTier",9,(int)mp.getSegmentsPerTier()); assertNotNull("null ms", iwc.getMergeScheduler()); assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler); ConcurrentMergeScheduler ms = (ConcurrentMergeScheduler) iwc.getMergeScheduler(); assertEquals("ms.maxMergeCount", 987, ms.getMaxMergeCount()); assertEquals("ms.maxThreadCount", 42, ms.getMaxThreadCount()); }
@Test public void testDefaults() throws Exception { SolrConfig sc = new SolrConfig(new SolrResourceLoader("solr/collection1"), "solrconfig-defaults.xml", null); SolrIndexConfig sic = sc.indexConfig; assertEquals("default ramBufferSizeMB", 100.0D, sic.ramBufferSizeMB, 0.0D); assertEquals("default LockType", SolrIndexConfig.LOCK_TYPE_NATIVE, sic.lockType); assertEquals("default useCompoundFile", false, sic.useCompoundFile); IndexSchema indexSchema = IndexSchemaFactory.buildIndexSchema("schema.xml", solrConfig); IndexWriterConfig iwc = sic.toIndexWriterConfig(indexSchema); assertNotNull("null mp", iwc.getMergePolicy()); assertTrue("mp is not TMP", iwc.getMergePolicy() instanceof TieredMergePolicy); assertNotNull("null ms", iwc.getMergeScheduler()); assertTrue("ms is not CMS", iwc.getMergeScheduler() instanceof ConcurrentMergeScheduler); }
/** just tries to configure things to keep the open file * count lowish */ public static void reduceOpenFiles(IndexWriter w) { // keep number of open files lowish MergePolicy mp = w.getConfig().getMergePolicy(); if (mp instanceof LogMergePolicy) { LogMergePolicy lmp = (LogMergePolicy) mp; lmp.setMergeFactor(Math.min(5, lmp.getMergeFactor())); lmp.setUseCompoundFile(true); } else if (mp instanceof TieredMergePolicy) { TieredMergePolicy tmp = (TieredMergePolicy) mp; tmp.setMaxMergeAtOnce(Math.min(5, tmp.getMaxMergeAtOnce())); tmp.setSegmentsPerTier(Math.min(5, tmp.getSegmentsPerTier())); tmp.setUseCompoundFile(true); } MergeScheduler ms = w.getConfig().getMergeScheduler(); if (ms instanceof ConcurrentMergeScheduler) { ((ConcurrentMergeScheduler) ms).setMaxThreadCount(2); ((ConcurrentMergeScheduler) ms).setMaxMergeCount(3); } }
public IndexWriterConfig createIndexWriterConfig() throws IOException { IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LATEST, getIndexAnalyzerInstance()); indexWriterConfig.setRAMBufferSizeMB(48); MergePolicy mergePolicy = getPluginManager().getInstance(LindenConfigBuilder.MERGE_POLICY, MergePolicy.class); if (mergePolicy != null) { indexWriterConfig.setMergePolicy(mergePolicy); } LOGGER.info("Merge policy : {}", mergePolicy == null ? "Default" : mergePolicy); ConcurrentMergeScheduler cms = new ConcurrentMergeScheduler(); cms.setMaxMergesAndThreads(8, 1); indexWriterConfig.setMergeScheduler(cms); return indexWriterConfig; }
public void testReferenceDecrementIllegally() throws Exception { Directory dir = newDirectory(); IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( new MockAnalyzer(random())).setMergeScheduler(new ConcurrentMergeScheduler())); SearcherManager sm = new SearcherManager(writer, false, new SearcherFactory()); writer.addDocument(new Document()); writer.commit(); sm.maybeRefreshBlocking(); IndexSearcher acquire = sm.acquire(); IndexSearcher acquire2 = sm.acquire(); sm.release(acquire); sm.release(acquire2); acquire = sm.acquire(); acquire.getIndexReader().decRef(); sm.release(acquire); try { sm.acquire(); fail("acquire should have thrown an IllegalStateException since we modified the refCount outside of the manager"); } catch (IllegalStateException ex) { // } // sm.close(); -- already closed writer.close(); dir.close(); }
public static void syncConcurrentMerges(MergeScheduler ms) { if (ms instanceof ConcurrentMergeScheduler) ((ConcurrentMergeScheduler) ms).sync(); }
/** create a new index writer config with random defaults using the specified random */ public static IndexWriterConfig newIndexWriterConfig(Random r, Version v, Analyzer a) { IndexWriterConfig c = new IndexWriterConfig(v, a); c.setSimilarity(classEnvRule.similarity); if (VERBOSE) { // Even though TestRuleSetupAndRestoreClassEnv calls // InfoStream.setDefault, we do it again here so that // the PrintStreamInfoStream.messageID increments so // that when there are separate instances of // IndexWriter created we see "IW 0", "IW 1", "IW 2", // ... instead of just always "IW 0": c.setInfoStream(new TestRuleSetupAndRestoreClassEnv.ThreadNameFixingPrintStreamInfoStream(System.out)); } if (r.nextBoolean()) { c.setMergeScheduler(new SerialMergeScheduler()); } else if (rarely(r)) { int maxThreadCount = TestUtil.nextInt(r, 1, 4); int maxMergeCount = TestUtil.nextInt(r, maxThreadCount, maxThreadCount+4); ConcurrentMergeScheduler cms = new ConcurrentMergeScheduler(); cms.setMaxMergesAndThreads(maxMergeCount, maxThreadCount); c.setMergeScheduler(cms); } if (r.nextBoolean()) { if (rarely(r)) { // crazy value c.setMaxBufferedDocs(TestUtil.nextInt(r, 2, 15)); } else { // reasonable value c.setMaxBufferedDocs(TestUtil.nextInt(r, 16, 1000)); } } if (r.nextBoolean()) { if (rarely(r)) { // crazy value c.setTermIndexInterval(r.nextBoolean() ? TestUtil.nextInt(r, 1, 31) : TestUtil.nextInt(r, 129, 1000)); } else { // reasonable value c.setTermIndexInterval(TestUtil.nextInt(r, 32, 128)); } } if (r.nextBoolean()) { int maxNumThreadStates = rarely(r) ? TestUtil.nextInt(r, 5, 20) // crazy value : TestUtil.nextInt(r, 1, 4); // reasonable value c.setMaxThreadStates(maxNumThreadStates); } c.setMergePolicy(newMergePolicy(r)); if (rarely(r)) { c.setMergedSegmentWarmer(new SimpleMergedSegmentWarmer(c.getInfoStream())); } c.setUseCompoundFile(r.nextBoolean()); c.setReaderPooling(r.nextBoolean()); c.setReaderTermsIndexDivisor(TestUtil.nextInt(r, 1, 4)); c.setCheckIntegrityAtMerge(r.nextBoolean()); return c; }
private void initIndexWriter() throws IOException { Analyzer analyzer = new StandardAnalyzer(); IndexWriterConfig iwc = new IndexWriterConfig(analyzer); iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE_OR_APPEND); iwc.setMergedSegmentWarmer( new SimpleMergedSegmentWarmer(new LoggingInfoStream(Level.FINER))); iwc.setReaderPooling(true); // iwc.setMergeScheduler(new SerialMergeScheduler()); ConcurrentMergeScheduler mergeScheduler = new ConcurrentMergeScheduler(); iwc.setMergeScheduler(mergeScheduler); TieredMergePolicy mergePolicy = new TieredMergePolicy(); mergePolicy.setMaxMergeAtOnce(_maxMergeAtOnce); mergePolicy.setSegmentsPerTier(_segmentsPerTier); iwc.setMergePolicy(mergePolicy); iwc.setInfoStream(new LoggingInfoStream(Level.FINER)); _writer = new IndexWriter(getDirectory(), iwc); }