You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by no...@apache.org on 2015/01/17 16:08:32 UTC
svn commit: r1652622 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/CHANGES.txt solr/contrib/
solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
Author: noble
Date: Sat Jan 17 15:08:31 2015
New Revision: 1652622
URL: http://svn.apache.org/r1652622
Log:
SOLR-5147 addressing the OOM failures
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/contrib/ (props changed)
lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1652622&r1=1652621&r2=1652622&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Sat Jan 17 15:08:31 2015
@@ -265,7 +265,8 @@ New Features
* SOLR-6937: In schemaless mode ,replace spaces and special characters with underscore (Noble Paul)
-* SOLR-5147: Support child documents in DIH (Shawn Heisey, Thomas Champagne, Mikhail Khludnev via Noble Paul
+* SOLR-5147: Support child documents in DIH
+ (Vadim Kirilchuk, Shawn Heisey, Thomas Champagne, Mikhail Khludnev via Noble Paul)
Bug Fixes
Modified: lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java?rev=1652622&r1=1652621&r2=1652622&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java (original)
+++ lucene/dev/branches/branch_5x/solr/contrib/dataimporthandler/src/test/org/apache/solr/handler/dataimport/TestHierarchicalDocBuilder.java Sat Jan 17 15:08:31 2015
@@ -56,14 +56,38 @@ public class TestHierarchicalDocBuilder
private int id = 0; //unique id
private SolrQueryRequest req;
+ /**
+ * Holds the data related to randomly created index.
+ * It is used for making assertions.
+ */
private static class ContextHolder {
+ /** Overall documents number **/
int counter = 0;
+
+ /**
+ * Each Hierarchy object represents nested documents with a parent at the root of hierarchy
+ */
List<Hierarchy> hierarchies = new ArrayList<Hierarchy>();
}
+ /**
+ * Represents a hierarchical document structure
+ */
private static class Hierarchy {
+
+ /**
+ * Type of element, i.e. parent, child, grandchild, etc..
+ */
String elementType;
+
+ /**
+ * Fields of a current element
+ */
Map<String, Object> elementData = new HashMap<String,Object>();
+
+ /**
+ * Nested elements/documents hierarchies.
+ */
List<Hierarchy> elements = new ArrayList<Hierarchy>();
}
@@ -167,8 +191,11 @@ public class TestHierarchicalDocBuilder
public void testRandomDepthHierarchy() throws Exception {
final String parentType = "parent";
- int parentsNum = atLeast(5);
- int depth = atLeast(3);
+ // Be aware that hierarchies grows exponentially, thus
+ // numbers bigger than 6 may lead to significant memory usage
+ // and cause OOME
+ int parentsNum = 2 + random().nextInt(3);
+ int depth = 2 + random().nextInt(3);
ContextHolder holder = new ContextHolder();
@@ -250,11 +277,59 @@ public class TestHierarchicalDocBuilder
return ids;
}
- /** Internally configures MockDataSource **/
+ /**
+ * Creates randomized configuration of a specified depth. Simple configuration example:
+ *
+ * <pre>
+ *
+ * <dataConfig>
+ * <dataSource type="MockDataSource" />
+ * <document>
+ * <entity name="parent" query="SELECT * FROM parent">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * <entity child="true" name="parentChild0" query="select * from parentChild0 where parentChild0_parent_id='${parent.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * <entity child="true" name="parentChild0Child0" query="select * from parentChild0Child0 where parentChild0Child0_parent_id='${parentChild0.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * </entity>
+ * <entity child="true" name="parentChild0Child1" query="select * from parentChild0Child1 where parentChild0Child1_parent_id='${parentChild0.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * </entity>
+ * </entity>
+ * <entity child="true" name="parentChild1" query="select * from parentChild1 where parentChild1_parent_id='${parent.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * <entity child="true" name="parentChild1Child0" query="select * from parentChild1Child0 where parentChild1Child0_parent_id='${parentChild1.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * </entity>
+ * <entity child="true" name="parentChild1Child1" query="select * from parentChild1Child1 where parentChild1Child1_parent_id='${parentChild1.id}'">
+ * <field column="id" />
+ * <field column="desc" />
+ * <field column="type_s" />
+ * </entity>
+ * </entity>
+ * </entity>
+ * </document>
+ * </dataConfig>
+ *
+ * </pre>
+ *
+ * Internally configures MockDataSource.
+ **/
private String createRandomizedConfig(int depth, String parentType, int parentsNum, ContextHolder holder) {
List<Hierarchy> parentData = createMockedIterator(parentType, "SELECT * FROM " + parentType, parentsNum, holder);
- // each map represents parent and each parent is root of separate hierarchy
holder.hierarchies = parentData;
String children = createChildren(parentType, 0, depth, parentData, holder);
@@ -293,7 +368,10 @@ public class TestHierarchicalDocBuilder
Map<String, Object> data = parentHierarchy.elementData;
String id = (String) data.get(FIELD_ID);
String select = String.format(Locale.ROOT, "select * from %s where %s='%s'", type, type + "_parent_id", id);
- List<Hierarchy> childHierarchies = createMockedIterator(type, select, atLeast(5), holder);
+
+ // Number of actual children documents
+ int childrenNum = 1 + random().nextInt(3);
+ List<Hierarchy> childHierarchies = createMockedIterator(type, select, childrenNum, holder);
parentHierarchy.elements.addAll(childHierarchies);
result.addAll(childHierarchies);
}
@@ -307,7 +385,9 @@ public class TestHierarchicalDocBuilder
return "";
}
- int childrenNumber = atLeast(2);
+ // number of different children <b>types</b> of parent, i.e. parentChild0, parentChild1
+ // @see #createMockedIterator for the actual number of each children type
+ int childrenNumber = 2 + random().nextInt(3);
StringBuilder builder = new StringBuilder();
for (int childIndex = 0; childIndex < childrenNumber; ++childIndex) {
String childName = parentName + "Child" + childIndex;