[
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]