[ 
https://issues.apache.org/jira/browse/LUCENE-5775?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14035880#comment-14035880
 ] 

Michael McCandless commented on LUCENE-5775:
--------------------------------------------

Simple patch fixes it:

{noformat}
Index: 
lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellTernarySearchTrie.java
===================================================================
--- 
lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellTernarySearchTrie.java
      (revision 1603490)
+++ 
lucene/suggest/src/java/org/apache/lucene/search/suggest/jaspell/JaspellTernarySearchTrie.java
      (working copy)
@@ -98,7 +98,9 @@
     @Override
     public long ramBytesUsed() {
       long mem = RamUsageEstimator.shallowSizeOf(this) + 
RamUsageEstimator.shallowSizeOf(relatives);
-      for (TSTNode node : relatives) {
+      // We don't need to add parent since our parent added itself:
+      for (int i=1;i<4;i++) {
+        TSTNode node = relatives[i];
         if (node != null) {
           mem += node.ramBytesUsed();
         }
{noformat}

Basically just sum up "downwards" in the tree ... I'll commit this & deprecate 
in 4.x, and remove in trunk.

> JaspellTernarySearchTrie.ramBytesUsed hits StackOverflowError
> -------------------------------------------------------------
>
>                 Key: LUCENE-5775
>                 URL: https://issues.apache.org/jira/browse/LUCENE-5775
>             Project: Lucene - Core
>          Issue Type: Bug
>            Reporter: Michael McCandless
>            Assignee: Michael McCandless
>
> I hit this when trying to run LookupBenchmarkTest for LUCENE-5752:
> {noformat}
>    [junit4]   2> NOTE: reproduce with: ant test  
> -Dtestcase=LookupBenchmarkTest -Dtests.method=testStorageNeeds 
> -Dtests.seed=EA0FADB2EE37D385 -Dtests.locale=es_ES 
> -Dtests.timezone=Etc/Greenwich -Dtests.file.encoding=UTF-8
>    [junit4] ERROR   1.89s | LookupBenchmarkTest.testStorageNeeds <<<
>    [junit4]    > Throwable #1: java.lang.StackOverflowError
>    [junit4]    >      at 
> __randomizedtesting.SeedInfo.seed([EA0FADB2EE37D385:DF8106BCB29C472F]:0)
>    [junit4]    >      at java.lang.Class.getMethod0(Class.java:2774)
>    [junit4]    >      at 
> java.lang.Class.isCheckMemberAccessOverridden(Class.java:2214)
>    [junit4]    >      at java.lang.Class.checkMemberAccess(Class.java:2233)
>    [junit4]    >      at java.lang.Class.getDeclaredFields(Class.java:1805)
>    [junit4]    >      at 
> org.apache.lucene.util.RamUsageEstimator.shallowSizeOfInstance(RamUsageEstimator.java:351)
>    [junit4]    >      at 
> org.apache.lucene.util.RamUsageEstimator.shallowSizeOf(RamUsageEstimator.java:329)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:100)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
>    [junit4]    >      at 
> org.apache.lucene.search.suggest.jaspell.JaspellTernarySearchTrie$TSTNode.ramBytesUsed(JaspellTernarySearchTrie.java:103)
> {noformat}
> I think we should just remove/deprecate this suggester?  The FST based 
> suggesters are far more RAM efficient...



--
This message was sent by Atlassian JIRA
(v6.2#6252)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to