You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sh...@apache.org on 2016/02/04 08:26:11 UTC

lucene-solr git commit: LUCENE-7010: add MergePolicyWrapper

Repository: lucene-solr
Updated Branches:
  refs/heads/master 62dfc815b -> 30455f728


LUCENE-7010: add MergePolicyWrapper


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/30455f72
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/30455f72
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/30455f72

Branch: refs/heads/master
Commit: 30455f728b304fb1b434df73b4f84d607e6941ce
Parents: 62dfc81
Author: Shai Erera <sh...@apache.org>
Authored: Wed Feb 3 14:49:03 2016 +0200
Committer: Shai Erera <sh...@apache.org>
Committed: Thu Feb 4 09:24:24 2016 +0200

----------------------------------------------------------------------
 lucene/CHANGES.txt                              |  3 +
 .../org/apache/lucene/index/MergePolicy.java    |  6 +-
 .../apache/lucene/index/MergePolicyWrapper.java | 86 ++++++++++++++++++++
 .../org/apache/lucene/index/NoMergePolicy.java  | 18 +++-
 .../lucene/index/UpgradeIndexMergePolicy.java   | 30 ++-----
 .../index/TestDemoParallelLeafReader.java       |  6 +-
 .../lucene/index/TestMergePolicyWrapper.java    | 37 +++++++++
 .../apache/lucene/index/SortingMergePolicy.java | 17 +---
 .../lucene/index/TestSortingMergePolicy.java    | 17 ----
 .../apache/lucene/index/ForceMergePolicy.java   | 45 ++--------
 .../solr/util/TestRandomForceMergePolicy.java   | 36 --------
 .../apache/solr/util/TestRandomMergePolicy.java | 74 -----------------
 .../org/apache/solr/util/RandomMergePolicy.java | 51 ++----------
 13 files changed, 168 insertions(+), 258 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/CHANGES.txt
----------------------------------------------------------------------
diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 5b23146..df6723e 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -137,6 +137,9 @@ New Features
 
 * SOLR-4619: Added removeAllAttributes() to AttributeSource, which removes
   all previously added attributes.
+  
+* LUCENE-7010: Added MergePolicyWrapper to allow easy wrapping of other policies.
+  (Shai Erera)
 
 API Changes
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
index dd0b245..10a9ece 100644
--- a/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
+++ b/lucene/core/src/java/org/apache/lucene/index/MergePolicy.java
@@ -468,7 +468,7 @@ public abstract class MergePolicy {
   /** Returns current {@code noCFSRatio}.
    *
    *  @see #setNoCFSRatio */
-  public final double getNoCFSRatio() {
+  public double getNoCFSRatio() {
     return noCFSRatio;
   }
 
@@ -477,7 +477,7 @@ public abstract class MergePolicy {
    *  non-compound file even if compound file is enabled.
    *  Set to 1.0 to always use CFS regardless of merge
    *  size. */
-  public final void setNoCFSRatio(double noCFSRatio) {
+  public void setNoCFSRatio(double noCFSRatio) {
     if (noCFSRatio < 0.0 || noCFSRatio > 1.0) {
       throw new IllegalArgumentException("noCFSRatio must be 0.0 to 1.0 inclusive; got " + noCFSRatio);
     }
@@ -494,7 +494,7 @@ public abstract class MergePolicy {
    *  non-compound file even if compound file is enabled.
    *  Set this to Double.POSITIVE_INFINITY (default) and noCFSRatio to 1.0
    *  to always use CFS regardless of merge size. */
-  public final void setMaxCFSSegmentSizeMB(double v) {
+  public void setMaxCFSSegmentSizeMB(double v) {
     if (v < 0.0) {
       throw new IllegalArgumentException("maxCFSSegmentSizeMB must be >=0 (got " + v + ")");
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/java/org/apache/lucene/index/MergePolicyWrapper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/MergePolicyWrapper.java b/lucene/core/src/java/org/apache/lucene/index/MergePolicyWrapper.java
new file mode 100644
index 0000000..17ecfbe
--- /dev/null
+++ b/lucene/core/src/java/org/apache/lucene/index/MergePolicyWrapper.java
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.index;
+
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * A wrapper for {@link MergePolicy} instances.
+ *
+ * @lucene.experimental
+ */
+public class MergePolicyWrapper extends MergePolicy {
+
+  protected final MergePolicy in;
+
+  /**
+   * Creates a new merge policy instance.
+   */
+  public MergePolicyWrapper(MergePolicy in) {
+    this.in = in;
+  }
+
+  @Override
+  public MergeSpecification findMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos, IndexWriter writer)
+      throws IOException {
+    return in.findMerges(mergeTrigger, segmentInfos, writer);
+  }
+
+  @Override
+  public MergeSpecification findForcedMerges(SegmentInfos segmentInfos, int maxSegmentCount,
+      Map<SegmentCommitInfo,Boolean> segmentsToMerge, IndexWriter writer) throws IOException {
+    return in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, writer);
+  }
+
+  @Override
+  public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
+    return in.findForcedDeletesMerges(segmentInfos, writer);
+  }
+
+  @Override
+  public boolean useCompoundFile(SegmentInfos infos, SegmentCommitInfo mergedInfo, IndexWriter writer)
+      throws IOException {
+    return in.useCompoundFile(infos, mergedInfo, writer);
+  }
+
+  @Override
+  protected long size(SegmentCommitInfo info, IndexWriter writer) throws IOException {
+    return in.size(info, writer);
+  }
+
+  @Override
+  public double getNoCFSRatio() {
+    return in.getNoCFSRatio();
+  }
+
+  @Override
+  public final void setNoCFSRatio(double noCFSRatio) {
+    in.setNoCFSRatio(noCFSRatio);
+  }
+
+  @Override
+  public final void setMaxCFSSegmentSizeMB(double v) {
+    in.setMaxCFSSegmentSizeMB(v);
+  }
+
+  @Override
+  public String toString() {
+    return getClass().getSimpleName() + "(" + in + ")";
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/java/org/apache/lucene/index/NoMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/NoMergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/NoMergePolicy.java
index 8b5a853..cade135 100644
--- a/lucene/core/src/java/org/apache/lucene/index/NoMergePolicy.java
+++ b/lucene/core/src/java/org/apache/lucene/index/NoMergePolicy.java
@@ -20,7 +20,6 @@ package org.apache.lucene.index;
 import java.io.IOException;
 import java.util.Map;
 
-
 /**
  * A {@link MergePolicy} which never returns merges to execute. Use it if you
  * want to prevent segment merges.
@@ -53,7 +52,22 @@ public final class NoMergePolicy extends MergePolicy {
   protected long size(SegmentCommitInfo info, IndexWriter writer) throws IOException {
     return Long.MAX_VALUE;
   }
-
+  
+  @Override
+  public double getNoCFSRatio() {
+    return super.getNoCFSRatio();
+  }
+  
+  @Override
+  public void setMaxCFSSegmentSizeMB(double v) {
+    super.setMaxCFSSegmentSizeMB(v);
+  }
+  
+  @Override
+  public void setNoCFSRatio(double noCFSRatio) {
+    super.setNoCFSRatio(noCFSRatio);
+  }
+  
   @Override
   public String toString() {
     return "NoMergePolicy";

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java b/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
index 9374e64..ee11f51 100644
--- a/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
+++ b/lucene/core/src/java/org/apache/lucene/index/UpgradeIndexMergePolicy.java
@@ -48,15 +48,12 @@ import java.util.HashMap;
   * @lucene.experimental
   * @see IndexUpgrader
   */
-public class UpgradeIndexMergePolicy extends MergePolicy {
-
-  /** Wrapped {@link MergePolicy}. */
-  protected final MergePolicy base;
+public class UpgradeIndexMergePolicy extends MergePolicyWrapper {
 
   /** Wrap the given {@link MergePolicy} and intercept forceMerge requests to
    * only upgrade segments written with previous Lucene versions. */
-  public UpgradeIndexMergePolicy(MergePolicy base) {
-    this.base = base;
+  public UpgradeIndexMergePolicy(MergePolicy in) {
+    super(in);
   }
   
   /** Returns if the given segment should be upgraded. The default implementation
@@ -70,7 +67,7 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
 
   @Override
   public MergeSpecification findMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
-    return base.findMerges(null, segmentInfos, writer);
+    return in.findMerges(null, segmentInfos, writer);
   }
   
   @Override
@@ -91,7 +88,7 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
     if (oldSegments.isEmpty())
       return null;
 
-    MergeSpecification spec = base.findForcedMerges(segmentInfos, maxSegmentCount, oldSegments, writer);
+    MergeSpecification spec = in.findForcedMerges(segmentInfos, maxSegmentCount, oldSegments, writer);
     
     if (spec != null) {
       // remove all segments that are in merge specification from oldSegments,
@@ -104,7 +101,7 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
 
     if (!oldSegments.isEmpty()) {
       if (verbose(writer)) {
-        message("findForcedMerges: " +  base.getClass().getSimpleName() +
+        message("findForcedMerges: " +  in.getClass().getSimpleName() +
         " does not want to merge all old segments, merge remaining ones into new segment: " + oldSegments, writer);
       }
       final List<SegmentCommitInfo> newInfos = new ArrayList<>();
@@ -123,21 +120,6 @@ public class UpgradeIndexMergePolicy extends MergePolicy {
     return spec;
   }
   
-  @Override
-  public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
-    return base.findForcedDeletesMerges(segmentInfos, writer);
-  }
-  
-  @Override
-  public boolean useCompoundFile(SegmentInfos segments, SegmentCommitInfo newSegment, IndexWriter writer) throws IOException {
-    return base.useCompoundFile(segments, newSegment, writer);
-  }
-  
-  @Override
-  public String toString() {
-    return "[" + getClass().getSimpleName() + "->" + base + "]";
-  }
-  
   private boolean verbose(IndexWriter writer) {
     return writer != null && writer.infoStream.isEnabled("UPGMP");
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java b/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
index 0d25f28..ae41299 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestDemoParallelLeafReader.java
@@ -505,7 +505,7 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
     }
 
     /** Just replaces the sub-readers with parallel readers, so reindexed fields are merged into new segments. */
-    private class ReindexingMergePolicy extends MergePolicy {
+    private class ReindexingMergePolicy extends MergePolicyWrapper {
 
       class ReindexingOneMerge extends OneMerge {
 
@@ -596,11 +596,9 @@ public class TestDemoParallelLeafReader extends LuceneTestCase {
         return wrapped;
       }
 
-      final MergePolicy in;
-
       /** Create a new {@code MergePolicy} that sorts documents with the given {@code sort}. */
       public ReindexingMergePolicy(MergePolicy in) {
-        this.in = in;
+        super(in);
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/core/src/test/org/apache/lucene/index/TestMergePolicyWrapper.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestMergePolicyWrapper.java b/lucene/core/src/test/org/apache/lucene/index/TestMergePolicyWrapper.java
new file mode 100644
index 0000000..fa1b5d4
--- /dev/null
+++ b/lucene/core/src/test/org/apache/lucene/index/TestMergePolicyWrapper.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.lucene.index;
+
+import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
+
+import org.apache.lucene.util.LuceneTestCase;
+
+public class TestMergePolicyWrapper extends LuceneTestCase {
+
+  public void testMethodsOverridden() throws Exception {
+    for (Method m : MergePolicy.class.getDeclaredMethods()) {
+      if (Modifier.isFinal(m.getModifiers())) continue;
+      try {
+        MergePolicyWrapper.class.getDeclaredMethod(m.getName(),  m.getParameterTypes());
+      } catch (NoSuchMethodException e) {
+        fail("MergePolicyWrapper needs to override '" + m + "'");
+      }
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/misc/src/java/org/apache/lucene/index/SortingMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/misc/src/java/org/apache/lucene/index/SortingMergePolicy.java b/lucene/misc/src/java/org/apache/lucene/index/SortingMergePolicy.java
index bd8eb10..13797ef 100644
--- a/lucene/misc/src/java/org/apache/lucene/index/SortingMergePolicy.java
+++ b/lucene/misc/src/java/org/apache/lucene/index/SortingMergePolicy.java
@@ -23,7 +23,6 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.lucene.analysis.Analyzer; // javadocs
 import org.apache.lucene.index.LeafReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.MergePolicy;
@@ -55,7 +54,7 @@ import org.apache.lucene.util.packed.PackedLongValues;
  *  the order of documents in a segment depend on the number of times the segment 
  *  has been merged.
  *  @lucene.experimental */
-public final class SortingMergePolicy extends MergePolicy {
+public final class SortingMergePolicy extends MergePolicyWrapper {
 
   /**
    * Put in the {@link SegmentInfo#getDiagnostics() diagnostics} to denote that
@@ -221,13 +220,12 @@ public final class SortingMergePolicy extends MergePolicy {
     return sortingSpec;
   }
 
-  final MergePolicy in;
   final Sorter sorter;
   final Sort sort;
 
   /** Create a new {@code MergePolicy} that sorts documents with the given {@code sort}. */
   public SortingMergePolicy(MergePolicy in, Sort sort) {
-    this.in = in;
+    super(in);
     this.sorter = new Sorter(sort);
     this.sort = sort;
   }
@@ -257,17 +255,6 @@ public final class SortingMergePolicy extends MergePolicy {
   }
 
   @Override
-  public boolean useCompoundFile(SegmentInfos segments,
-      SegmentCommitInfo newSegment, IndexWriter writer) throws IOException {
-    return in.useCompoundFile(segments, newSegment, writer);
-  }
-
-  @Override
-  protected long size(SegmentCommitInfo info, IndexWriter writer) throws IOException {
-    return in.size(info, writer);
-  }
-
-  @Override
   public String toString() {
     return "SortingMergePolicy(" + in + ", sorter=" + sorter + ")";
   }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java b/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
index bf319fd..9a76fad 100644
--- a/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
+++ b/lucene/misc/src/test/org/apache/lucene/index/TestSortingMergePolicy.java
@@ -78,12 +78,6 @@ public class TestSortingMergePolicy extends BaseMergePolicyTestCase {
     return doc;
   }
 
-  @Override
-  public void testForceMergeNotNeeded() throws IOException {
-    // This is a no-op until we figure out why the (super class) test fails.
-    // https://issues.apache.org/jira/browse/LUCENE-7008
-  }
-
   public MergePolicy mergePolicy() {
     return newSortingMergePolicy(sort);
   }
@@ -204,15 +198,4 @@ public class TestSortingMergePolicy extends BaseMergePolicyTestCase {
     }
   }
 
-  public void testMethodsOverridden() throws Exception {
-    for (Method m : MergePolicy.class.getDeclaredMethods()) {
-      if (Modifier.isFinal(m.getModifiers())) continue;
-      try {
-        SortingMergePolicy.class.getDeclaredMethod(m.getName(),  m.getParameterTypes());
-      } catch (NoSuchMethodException e) {
-        fail("SortingMergePolicy needs to override '"+m+"'");
-      }
-    }
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/lucene/test-framework/src/java/org/apache/lucene/index/ForceMergePolicy.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/index/ForceMergePolicy.java b/lucene/test-framework/src/java/org/apache/lucene/index/ForceMergePolicy.java
index 630f8eb..ba5b937 100755
--- a/lucene/test-framework/src/java/org/apache/lucene/index/ForceMergePolicy.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/index/ForceMergePolicy.java
@@ -28,52 +28,23 @@ import org.apache.lucene.index.SegmentInfos;
 
 /**
  * A {@link MergePolicy} that only returns forced merges.
- * <p><b>NOTE</b>: Use this policy if you wish to disallow background
- * merges but wish to run optimize/forceMerge segment merges.
+ * <p>
+ * <b>NOTE</b>: Use this policy if you wish to disallow background merges but wish to run optimize/forceMerge segment
+ * merges.
  *
- *  @lucene.experimental
+ * @lucene.experimental
  */
-public final class ForceMergePolicy extends MergePolicy {
-
-  final MergePolicy in;
+public final class ForceMergePolicy extends MergePolicyWrapper {
 
   /** Create a new {@code ForceMergePolicy} around the given {@code MergePolicy} */
   public ForceMergePolicy(MergePolicy in) {
-    this.in = in;
-  }
-
-  @Override
-  public MergeSpecification findMerges(MergeTrigger mergeTrigger,
-      SegmentInfos segmentInfos, IndexWriter writer) throws IOException {
-    return null;
-  }
-
-  @Override
-  public MergeSpecification findForcedMerges(SegmentInfos segmentInfos,
-      int maxSegmentCount, Map<SegmentCommitInfo,Boolean> segmentsToMerge, IndexWriter writer)
-      throws IOException {
-    return in.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, writer);
+    super(in);
   }
 
   @Override
-  public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer)
+  public MergeSpecification findMerges(MergeTrigger mergeTrigger, SegmentInfos segmentInfos, IndexWriter writer)
       throws IOException {
-    return in.findForcedDeletesMerges(segmentInfos, writer);
-  }
-
-  @Override
-  public boolean useCompoundFile(SegmentInfos segments,
-      SegmentCommitInfo newSegment, IndexWriter writer) throws IOException {
-    return in.useCompoundFile(segments, newSegment, writer);
-  }
-
-  @Override
-  protected long size(SegmentCommitInfo info, IndexWriter writer) throws IOException {
-    return in.size(info, writer);
+    return null;
   }
 
-  @Override
-  public String toString() {
-    return "ForceMergePolicy(" + in + ")";
-  }
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/solr/core/src/test/org/apache/solr/util/TestRandomForceMergePolicy.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestRandomForceMergePolicy.java b/solr/core/src/test/org/apache/solr/util/TestRandomForceMergePolicy.java
deleted file mode 100755
index d818786..0000000
--- a/solr/core/src/test/org/apache/solr/util/TestRandomForceMergePolicy.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.apache.solr.util;
-
-import java.io.IOException;
-
-import org.apache.lucene.index.MergePolicy;
-import org.apache.lucene.index.SegmentInfos;
-
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-public class TestRandomForceMergePolicy extends TestRandomMergePolicy {
-
-  /**
-   * Ensure it finds no merges
-   */
-  public void testFindMerges() throws IOException {
-    MergePolicy mp = new RandomForceMergePolicy();
-    assertNull(mp.findMerges(null, (SegmentInfos)null, null));
-  }
-
-}
-

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/solr/core/src/test/org/apache/solr/util/TestRandomMergePolicy.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/util/TestRandomMergePolicy.java b/solr/core/src/test/org/apache/solr/util/TestRandomMergePolicy.java
deleted file mode 100644
index 0fb9940..0000000
--- a/solr/core/src/test/org/apache/solr/util/TestRandomMergePolicy.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.solr.util;
-
-import org.apache.lucene.index.MergePolicy;
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.LuceneTestCase.SuppressSysoutChecks;
-
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.lang.reflect.InvocationTargetException;
-
-/** 
- * A "test the test" sanity check using reflection to ensure that 
- * {@linke RandomMergePolicy} is working as expected
- */
-@SuppressSysoutChecks(bugUrl = "Logs to JUL")
-public class TestRandomMergePolicy extends LuceneTestCase {  
-  /**
-   * Ensure every MP method is overridden by RMP 
-   * (future proof ourselves against new methods being added to MP)
-   */
-  public void testMethodOverride() {
-    Class rmp = RandomMergePolicy.class;
-    for (Method meth : rmp.getMethods()) {
-      if (// ignore things like hashCode, equals, etc...
-          meth.getDeclaringClass().equals(Object.class)
-          // can't do anything about it regardless of what class declares it
-          || Modifier.isFinal(meth.getModifiers())) {
-        continue;
-      }
-      assertEquals("method not overridden by RandomMergePolicy: " + 
-                   meth.toGenericString(), 
-                   rmp, meth.getDeclaringClass());
-    }
-  }
-
-  /**
-   * Ensure any "getter" methods return the same value as
-   * the wrapped MP
-   * (future proof ourselves against new final getter/setter pairs being 
-   * added to MP w/o dealing with them in the RMP Constructor)
-   */
-  public void testGetters() throws IllegalAccessException, InvocationTargetException {
-    final int iters = atLeast(20);
-    for (int i = 0; i < iters; i++) {
-      RandomMergePolicy rmp = new RandomMergePolicy();
-      Class mp = MergePolicy.class;
-      for (Method meth : mp.getDeclaredMethods()) {
-        if (meth.getName().startsWith("get") &&
-            (0 == meth.getParameterTypes().length)) {
-
-          assertEquals("MergePolicy getter gave diff results for RandomMergePolicy and the policy it wrapped: " + meth.toGenericString(),
-                       meth.invoke(rmp), meth.invoke(rmp.inner));
-        }
-      }
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/30455f72/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java
----------------------------------------------------------------------
diff --git a/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java
index 7c376bf..17c53c0 100644
--- a/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java
+++ b/solr/test-framework/src/java/org/apache/solr/util/RandomMergePolicy.java
@@ -23,6 +23,8 @@ import java.util.Map;
 
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.MergePolicy;
+import org.apache.lucene.index.MergePolicy.MergeSpecification;
+import org.apache.lucene.index.MergePolicyWrapper;
 import org.apache.lucene.index.MergeTrigger;
 import org.apache.lucene.index.SegmentCommitInfo;
 import org.apache.lucene.index.SegmentInfos;
@@ -36,60 +38,17 @@ import org.slf4j.LoggerFactory;
  * Solr tests utilizing the Lucene randomized test framework can refer 
  * to this class in solrconfig.xml to get a fully randomized merge policy.
  */
-public class RandomMergePolicy extends MergePolicy {
+public class RandomMergePolicy extends MergePolicyWrapper {
 
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
   
-  /** 
-   * Not private so tests can inspect it, 
-   */
-  final MergePolicy inner;
-
   public RandomMergePolicy() {
     this(LuceneTestCase.newMergePolicy());
   }
 
   protected RandomMergePolicy(MergePolicy inner) {
-    super(inner.getNoCFSRatio(), 
-          (long) (inner.getMaxCFSSegmentSizeMB() * 1024 * 1024));
-    this.inner = inner;
-    log.info("RandomMergePolicy wrapping {}: {}",
-             inner.getClass(), inner);
-  }
-
-  @Override
-  public MergeSpecification findForcedDeletesMerges(SegmentInfos segmentInfos, IndexWriter writer) 
-    throws IOException {
-
-    return inner.findForcedDeletesMerges(segmentInfos, writer);
-  }
-
-  @Override
-  public MergeSpecification findForcedMerges(SegmentInfos segmentInfos, 
-                                             int maxSegmentCount, 
-                                             Map<SegmentCommitInfo,Boolean> segmentsToMerge,
-                                             IndexWriter writer) 
-    throws IOException {
-    
-    return inner.findForcedMerges(segmentInfos, maxSegmentCount, segmentsToMerge, writer);
-  }
-
-  @Override
-  public MergeSpecification findMerges(MergeTrigger mergeTrigger, 
-                                       SegmentInfos segmentInfos,
-                                       IndexWriter writer)
-    throws IOException {
-
-    return inner.findMerges(mergeTrigger, segmentInfos, writer);
-  }
-
-  @Override
-  public boolean useCompoundFile(SegmentInfos infos,
-                                 SegmentCommitInfo mergedInfo,
-                                 IndexWriter writer)
-    throws IOException {
-    
-    return inner.useCompoundFile(infos, mergedInfo, writer);
+    super(inner);
+    log.info("RandomMergePolicy wrapping {}: {}", inner.getClass(), inner);
   }
 
 }