You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2013/06/19 00:31:47 UTC
svn commit: r1494348 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/update/
core/src/test-files/solr/collection1/conf/
core/src/test/org/apache/solr/core/
Author: hossman
Date: Tue Jun 18 22:31:47 2013
New Revision: 1494348
URL: http://svn.apache.org/r1494348
Log:
SOLR-4934: Fix handling of <mergePolicy> init arg "useCompoundFile" needed after changes in LUCENE-5038
Added:
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-defaults.xml
- copied, changed from r1494185, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml
- copied, changed from r1494185, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml
lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1494348&r1=1494347&r2=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Tue Jun 18 22:31:47 2013
@@ -59,6 +59,16 @@ Apache ZooKeeper 3.4.5
Upgrading from Solr 4.3.0
----------------------
+* TieredMergePolicy and the various subtypes of LogMergePolicy no longer have
+ an explicit "setUseCompoundFile" method. Instead this behavior is now driven
+ entirely by the value of "setNoCFSRatio". If you have explicitly configured
+ one of these classes using <mergePolicy> and include an init arg like this...
+ <bool name="useCompoundFile">true</bool>
+ ...this will now be ignored and a warning will be logged. Users with an
+ explicitly declared <mergePolicy> are encouraged to review the current
+ javadocs for their MergePolicy subclass and review their configured options
+ carefully. See SOLR-4934 and LUCENE-5038 for more information.
+
* SOLR-4778: The signature of LogWatcher.registerListener has changed, from
(ListenerConfig, CoreContainer) to (ListenerConfig). Users implementing their
own LogWatcher classes will need to change their code accordingly.
@@ -164,6 +174,10 @@ Bug Fixes
defined in the original. Benign since the default values are saved, but still incorrect.
(Erick Erickson, thanks Shawn Heisey for helping test!)
+* SOLR-4934: Fix handling of <mergePolicy> init arg "useCompoundFile" needed
+ after changes in LUCENE-5038 (hossman)
+
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java?rev=1494348&r1=1494347&r2=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/SolrIndexConfig.java Tue Jun 18 22:31:47 2013
@@ -221,6 +221,9 @@ public class SolrIndexConfig {
if (mergeFactor != -1)
logMergePolicy.setMergeFactor(mergeFactor);
+
+ fixUseCFInitArg(LogMergePolicy.class);
+
} else if (policy instanceof TieredMergePolicy) {
TieredMergePolicy tieredMergePolicy = (TieredMergePolicy) policy;
@@ -230,8 +233,11 @@ public class SolrIndexConfig {
tieredMergePolicy.setMaxMergeAtOnce(mergeFactor);
tieredMergePolicy.setSegmentsPerTier(mergeFactor);
}
- } else {
- log.warn("Use of compound file format or mergefactor cannot be configured if merge policy is not an instance of LogMergePolicy or TieredMergePolicy. The configured policy's defaults will be used.");
+
+ fixUseCFInitArg(TieredMergePolicy.class);
+
+ } else if (useCompoundFile && (mergeFactor != -1)) {
+ log.warn("Use of <useCompoundFile> or <mergeFactor> cannot be configured if merge policy is not an instance of LogMergePolicy or TieredMergePolicy. The configured policy's defaults will be used.");
}
if (mergePolicyInfo != null)
@@ -249,4 +255,20 @@ public class SolrIndexConfig {
return scheduler;
}
+
+ /**
+ * Lucene 4.4 removed the setUseCompoundFile(boolean) method from the two
+ * conrete MergePolicies provided with Lucene/Solr. In the event that users
+ * have a value explicitly configured for this setter in their mergePolicy
+ * init args, we remove it for them and warn about it.
+ */
+ private void fixUseCFInitArg(Class c) {
+
+ if (null == mergePolicyInfo || null == mergePolicyInfo.initArgs) return;
+
+ Object useCFSArg = mergePolicyInfo.initArgs.remove("useCompoundFile");
+ if (null != useCFSArg) {
+ log.warn("Ignoring 'useCompoundFile' specified as an init arg for the <mergePolicy> since it is no longer supported by " + c.getSimpleName());
+ }
+ }
}
Copied: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-defaults.xml (from r1494185, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-defaults.xml?p2=lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-defaults.xml&p1=lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml&r1=1494185&r2=1494348&rev=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-defaults.xml Tue Jun 18 22:31:47 2013
@@ -22,12 +22,9 @@
<directoryFactory name="DirectoryFactory" class="${solr.directoryFactory:solr.RAMDirectoryFactory}"/>
<indexConfig>
- <mergeFactor>7</mergeFactor>
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
- <int name="maxMergeAtOnceExplicit">19</int>
- <int name="segmentsPerTier">9</int>
- <double name="noCFSRatio">1.0</double>
- </mergePolicy>
+ <!-- do not put any merge policy, merge factor
+ or CFS related settings here
+ -->
</indexConfig>
<requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
Copied: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml (from r1494185, lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml?p2=lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml&p1=lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml&r1=1494185&r2=1494348&rev=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy-legacy.xml Tue Jun 18 22:31:47 2013
@@ -23,11 +23,7 @@
<indexConfig>
<mergeFactor>7</mergeFactor>
- <mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
- <int name="maxMergeAtOnceExplicit">19</int>
- <int name="segmentsPerTier">9</int>
- <double name="noCFSRatio">1.0</double>
- </mergePolicy>
+ <useCompoundFile>true</useCompoundFile>
</indexConfig>
<requestHandler name="standard" class="solr.StandardRequestHandler"></requestHandler>
Modified: lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml?rev=1494348&r1=1494347&r2=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml (original)
+++ lucene/dev/trunk/solr/core/src/test-files/solr/collection1/conf/solrconfig-mergepolicy.xml Tue Jun 18 22:31:47 2013
@@ -26,7 +26,13 @@
<mergePolicy class="org.apache.lucene.index.TieredMergePolicy">
<int name="maxMergeAtOnceExplicit">19</int>
<int name="segmentsPerTier">9</int>
- <double name="noCFSRatio">1.0</double>
+ <double name="noCFSRatio">0.6</double>
+
+ <!-- Setter for this was removed in Lucene 4.4, but we should
+ ignore it with a warning if users have it in their configs
+ -->
+ <bool name="useCompoundFile">true</bool>
+
</mergePolicy>
</indexConfig>
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java?rev=1494348&r1=1494347&r2=1494348&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestMergePolicyConfig.java Tue Jun 18 22:31:47 2013
@@ -21,31 +21,64 @@ import org.apache.lucene.index.IndexWrit
import org.apache.lucene.index.MergePolicy;
import org.apache.lucene.index.TieredMergePolicy;
import org.apache.solr.SolrTestCaseJ4;
-import org.junit.BeforeClass;
+import org.junit.After;
public class TestMergePolicyConfig extends SolrTestCaseJ4 {
- @BeforeClass
- public static void beforeClass() throws Exception {
- initCore("solrconfig-mergepolicy.xml","schema.xml");
+ @After
+ public void after() throws Exception {
+ deleteCore();
+ }
+
+ public void testDefaultMergePolicyConfig() throws Exception {
+ initCore("solrconfig-mergepolicy-defaults.xml","schema-minimal.xml");
+ IndexWriterConfig iwc = solrConfig.indexConfig.toIndexWriterConfig(h.getCore().getLatestSchema());
+
+ TieredMergePolicy tieredMP = assertAndCast(TieredMergePolicy.class,
+ iwc.getMergePolicy());
+ assertEquals(0.0D, tieredMP.getNoCFSRatio(), 0.0D);
+
+ }
+
+ public void testLegacyMergePolicyConfig() throws Exception {
+ initCore("solrconfig-mergepolicy-legacy.xml","schema-minimal.xml");
+ IndexWriterConfig iwc = solrConfig.indexConfig.toIndexWriterConfig(h.getCore().getLatestSchema());
+ TieredMergePolicy tieredMP = assertAndCast(TieredMergePolicy.class,
+ iwc.getMergePolicy());
+
+ assertEquals(7, tieredMP.getMaxMergeAtOnce());
+ assertEquals(7.0D, tieredMP.getSegmentsPerTier(), 0.0D);
+ assertEquals(1.0D, tieredMP.getNoCFSRatio(), 0.0D);
}
public void testTieredMergePolicyConfig() throws Exception {
+ initCore("solrconfig-mergepolicy.xml","schema-minimal.xml");
IndexWriterConfig iwc = solrConfig.indexConfig.toIndexWriterConfig(h.getCore().getLatestSchema());
- MergePolicy mp = iwc.getMergePolicy();
- assertTrue(mp instanceof TieredMergePolicy);
- TieredMergePolicy tieredMP = (TieredMergePolicy) mp;
+ TieredMergePolicy tieredMP = assertAndCast(TieredMergePolicy.class,
+ iwc.getMergePolicy());
- // mp-specific setter
- assertEquals(19, tieredMP.getMaxMergeAtOnceExplicit());
-
+ // set by legacy <mergeFactor> setting
assertEquals(7, tieredMP.getMaxMergeAtOnce());
- // make sure we overrode segmentsPerTier (split from maxMergeAtOnce out of mergeFactor)
+ // mp-specific setters
+ assertEquals(19, tieredMP.getMaxMergeAtOnceExplicit());
+ assertEquals(0.6D, tieredMP.getNoCFSRatio(), 0.001);
+ // make sure we overrode segmentsPerTier
+ // (split from maxMergeAtOnce out of mergeFactor)
assertEquals(9D, tieredMP.getSegmentsPerTier(), 0.001);
- // make sure we overrode noCFSRatio (useless because we disabled useCompoundFile,
- // but just to make sure it works)
- assertEquals(1.0D, tieredMP.getNoCFSRatio(), 0.001);
}
+
+ /**
+ * Given a Type and an object asserts that the object is non-null and an
+ * instance of the specified Type. The object is then cast to that type and
+ * returned.
+ */
+ public static <T> T assertAndCast(Class<? extends T> clazz, Object o) {
+ assertNotNull(clazz);
+ assertNotNull(o);
+ assertTrue(clazz.isInstance(o));
+ return clazz.cast(o);
+ }
+
}