geode-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kirk Lund (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (GEODE-1842) Execution of query from GFSH or Pulse may kill a Server with StackOverflowError
Date Wed, 14 Sep 2016 21:51:20 GMT

     [ https://issues.apache.org/jira/browse/GEODE-1842?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Kirk Lund updated GEODE-1842:
-----------------------------
    Description: 
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}


  was:
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.

The following example will produce a StackOverflowError if an instance of Outer is fed into
TypedJson:
{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}



> 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, querying
>            Reporter: Kirk Lund
>            Assignee: Kirk Lund
>            Priority: Critical
>
> 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
(v6.3.4#6332)

Mime
View raw message