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

ASF subversion and git services commented on GEODE-1842:
--------------------------------------------------------

Commit efa4757126a7e642fd87f4c7ab6a227fa9f81d28 in geode's branch 
refs/heads/feature/GEODE-6196 from Bruce Schuchardt
[ https://gitbox.apache.org/repos/asf?p=geode.git;h=efa4757 ]

removed TypedJson, replacing with QueryResultFormatter

most of TypedJson's internals were replaced so I just renamed it to
QueryResultFormatter to better show its intended purpose.

Object traversal depth is now limited to the element-count being passed
by the QueryDataFunction function.  This will prevent the stack-overflow
problems seen in GEODE-1842.


> Execution of query from GFSH or Pulse may kill a Server with 
> StackOverflowError
> -------------------------------------------------------------------------------
>
>                 Key: GEODE-1842
>                 URL: https://issues.apache.org/jira/browse/GEODE-1842
>             Project: Geode
>          Issue Type: Bug
>          Components: gfsh, pulse
>            Reporter: Kirk Lund
>            Assignee: Jinmei Liao
>            Priority: Critical
>              Labels: SmallFeature, StackOverflowError, gfsh, json, 
> pull-request-available, starter
>             Fix For: 1.8.0
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> TypedJson is prone to StackOverflowErrors which results in SystemFailure 
> shutdown of any Geode server that hits this problem. Below is the latest 
> error stack reported against TypedJson:
> {noformat}
> java.lang.StackOverflowError
> at java.lang.Class.getEnclosingMethodInfo(Class.java:1072)
> at java.lang.Class.getEnclosingClass(Class.java:1272)
> at java.lang.Class.getSimpleBinaryName(Class.java:1443)
> at java.lang.Class.getSimpleName(Class.java:1309)
> at java.lang.Class.getCanonicalName(Class.java:1399)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.internalToExternal(TypedJson.java:626)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeType(TypedJson.java:610)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeKeyValue(TypedJson.java:345)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.visitSpecialObjects(TypedJson.java:517)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeKeyValue(TypedJson.java:353)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.visitChildrens(TypedJson.java:670)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.addVal(TypedJson.java:323)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeVal(TypedJson.java:314)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeKeyValue(TypedJson.java:357)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.visitChildrens(TypedJson.java:670)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.addVal(TypedJson.java:323)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeVal(TypedJson.java:314)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeKeyValue(TypedJson.java:357)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.visitSpecialObjects(TypedJson.java:517)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeKeyValue(TypedJson.java:353)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.visitChildrens(TypedJson.java:670)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.addVal(TypedJson.java:323)
> at 
> com.gemstone.gemfire.management.internal.cli.json.TypedJson.writeVal(TypedJson.java:314)
> {noformat}
> QueryDataFunction uses TypedJson to serialize query results into JSON to 
> return to GFSH or Pulse. Rather than maintain a broken custom JSON parser, we 
> should replace TypedJson with Jackson.
> This example will go into infinite recursion until it produces a 
> StackOverflowError:
> {noformat}
> public class Root {
>   public Root getRoot() {
>     return this;
>   }
>   public Child getChild() { // getter that returns unique instances
>     return new Child();
>   }
> }
> public class Child {
>   public Child getChild() {
>     return this;
>   }
> }
> {noformat}
> This example will go into an infinite loop until it produces OutOfMemoryError:
> {noformat}
> public class Replicator {
>   public Replicator getReplicator() { // getter that returns unique instances
>     return new Replicator();
>   }
> }
> {noformat}



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to