[
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.
The following example will produce a StackOverflowError if an instance of Outer
is fed into TypedJson:
{noformat}
public class Outer {
public Outer getOuter() {
return this;
}
public Inner getInner() {
return Inner.getInnerStatic();
}
}
public class Inner {
public Inner getInner() {
return this;
}
public static Inner getInnerStatic() {
return new Inner();
}
}
{noformat}
This example will go into an infinite loop until it produces OutOfMemoryError:
{noformat}
public class Replicator {
public Replicator getReplicator() {
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}
private static class Outer {
public Outer getOuter() {
return this;
}
public Inner getInner() {
return Inner.getInnerStatic();
}
}
private static class Inner {
public Inner getInner() {
return this;
}
public static Inner getInnerStatic() {
return new Inner();
}
}
{noformat}
> TypedJson may throw a VirtualMachineError and should be replaced with Jackson
> -----------------------------------------------------------------------------
>
> 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.
> The following example will produce a StackOverflowError if an instance of
> Outer is fed into TypedJson:
> {noformat}
> public class Outer {
> public Outer getOuter() {
> return this;
> }
> public Inner getInner() {
> return Inner.getInnerStatic();
> }
> }
> public class Inner {
> public Inner getInner() {
> return this;
> }
> public static Inner getInnerStatic() {
> return new Inner();
> }
> }
> {noformat}
> This example will go into an infinite loop until it produces OutOfMemoryError:
> {noformat}
> public class Replicator {
> public Replicator getReplicator() {
> return new Replicator();
> }
> }
> {noformat}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)