LoadIonsFailed caused by StackOverflowError in clj-antlr


#1

I’m getting a very mysterious error that seems related to my deployments failing randomly (I’m saying randomly because application versions which used to be loaded successfully now fail).

What’s strange is that I’m getting a log saying that my Clojure code starts being loaded, and then I’m getting this error.

{
    "Msg": "LoadIonsFailed",
    "Ex": {
        "Cause": null,
        "Via": [
            {
                "Type": "clojure.lang.Compiler$CompilerException",
                "Message": "java.lang.StackOverflowError, compiling:(clj_antlr/common.clj:43:12)",
                "At": [
                    "clojure.lang.Compiler",
                    "analyzeSeq",
                    "Compiler.java",
                    7010
                ]
            },
            {
                "Type": "java.lang.StackOverflowError",
                "Message": null,
                "At": [
                    "java.lang.ClassLoader",
                    "findLoadedClass",
                    "ClassLoader.java",
                    1038
                ]
            }
        ],
        "Trace": [
            [
                "java.lang.ClassLoader",
                "findLoadedClass",
                "ClassLoader.java",
                1038
            ]
           ...
            [
                "clojure.lang.DynamicClassLoader",
                "loadClass",
                "DynamicClassLoader.java",
                77
            ],
            [
                "java.lang.ClassLoader",
                "loadClass",
                "ClassLoader.java",
                357
            ],
            [
                "java.lang.Class",
                "forName0",
                "Class.java",
                -2
            ],
            [
                "java.lang.Class",
                "forName",
                "Class.java",
                348
            ],
            [
                "clojure.lang.RT",
                "classForName",
                "RT.java",
                2204
            ],
            [
                "clojure.lang.RT",
                "classForNameNonLoading",
                "RT.java",
                2217
            ],
            [
                "clojure.lang.Compiler$HostExpr",
                "maybeClass",
                "Compiler.java",
                1041
            ],
            [
                "clojure.lang.Compiler$HostExpr$Parser",
                "parse",
                "Compiler.java",
                982
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6998
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$IfExpr$Parser",
                "parse",
                "Compiler.java",
                2817
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6420
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$FnMethod",
                "parse",
                "Compiler.java",
                5460
            ],
            [
                "clojure.lang.Compiler$FnExpr",
                "parse",
                "Compiler.java",
                4022
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7001
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$InvokeExpr",
                "parse",
                "Compiler.java",
                3813
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7005
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6330
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$IfExpr$Parser",
                "parse",
                "Compiler.java",
                2817
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6420
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$IfExpr$Parser",
                "parse",
                "Compiler.java",
                2822
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6420
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$IfExpr$Parser",
                "parse",
                "Compiler.java",
                2822
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6420
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6420
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$FnMethod",
                "parse",
                "Compiler.java",
                5460
            ],
            [
                "clojure.lang.Compiler$FnExpr",
                "parse",
                "Compiler.java",
                4022
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7001
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$NewExpr$Parser",
                "parse",
                "Compiler.java",
                2659
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7003
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6729
            ],
            [
                "clojure.lang.Compiler$BodyExpr$Parser",
                "parse",
                "Compiler.java",
                6100
            ],
            [
                "clojure.lang.Compiler$FnMethod",
                "parse",
                "Compiler.java",
                5460
            ],
            [
                "clojure.lang.Compiler$FnExpr",
                "parse",
                "Compiler.java",
                4022
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                7001
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "analyzeSeq",
                "Compiler.java",
                6991
            ],
            [
                "clojure.lang.Compiler",
                "analyze",
                "Compiler.java",
                6773
            ],
            [
                "clojure.lang.Compiler",
                "access$300",
                "Compiler.java",
                38
            ],
            [
                "clojure.lang.Compiler$LetExpr$Parser",
                "parse",
                "Compiler.java",
                6368
            ],
 ...
            [
                "clojure.lang.Compiler",
                "eval",
                "Compiler.java",
                7062
            ],
            [
                "clojure.lang.Compiler",
                "eval",
                "Compiler.java",
                7051
            ],
           ...
                "clojure.core$load_lib$fn__6493",
                "invoke",
                "core.clj",
                5888
            ],
            [
                "clojure.core$load_lib",
                "invokeStatic",
                "core.clj",
                5887
            ],
            [
                "clojure.core$load_lib",
                "doInvoke",
                "core.clj",
                5868
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                142
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$load_libs",
                "invokeStatic",
                "core.clj",
                5925
            ],
            [
                "clojure.core$load_libs",
                "doInvoke",
                "core.clj",
                5909
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                137
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$require",
                "invokeStatic",
                "core.clj",
                5947
            ],
            [
                "clojure.core$require",
                "doInvoke",
                "core.clj",
                5947
            ],
            [
                "clojure.lang.RestFn",
                "invoke",
                "RestFn.java",
                421
            ],
            [
                "linnaeus.web$eval3963$loading__6434__auto____3964",
                "invoke",
                "web.clj",
                1
            ],
            [
                "linnaeus.web$eval3963",
                "invokeStatic",
                "web.clj",
                1
            ],
            [
                "linnaeus.web$eval3963",
                "invoke",
                "web.clj",
                1
            ],
            [
                "clojure.lang.Compiler",
                "eval",
                "Compiler.java",
                7062
            ],
            [
                "clojure.lang.Compiler",
                "eval",
                "Compiler.java",
                7051
            ],
            [
                "clojure.lang.Compiler",
                "load",
                "Compiler.java",
                7514
            ],
            [
                "clojure.lang.RT",
                "loadResourceScript",
                "RT.java",
                379
            ],
            [
                "clojure.lang.RT",
                "loadResourceScript",
                "RT.java",
                370
            ],
            [
                "clojure.lang.RT",
                "load",
                "RT.java",
                460
            ],
            [
                "clojure.lang.RT",
                "load",
                "RT.java",
                426
            ],
            [
                "clojure.core$load$fn__6548",
                "invoke",
                "core.clj",
                6046
            ],
            [
                "clojure.core$load",
                "invokeStatic",
                "core.clj",
                6045
            ],
            [
                "clojure.core$load",
                "doInvoke",
                "core.clj",
                6029
            ],
            [
                "clojure.lang.RestFn",
                "invoke",
                "RestFn.java",
                408
            ],
            [
                "clojure.core$load_one",
                "invokeStatic",
                "core.clj",
                5848
            ],
            [
                "clojure.core$load_one",
                "invoke",
                "core.clj",
                5843
            ],
            [
                "clojure.core$load_lib$fn__6493",
                "invoke",
                "core.clj",
                5888
            ],
            [
                "clojure.core$load_lib",
                "invokeStatic",
                "core.clj",
                5887
            ],
            [
                "clojure.core$load_lib",
                "doInvoke",
                "core.clj",
                5868
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                142
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$load_libs",
                "invokeStatic",
                "core.clj",
                5925
            ],
            [
                "clojure.core$load_libs",
                "doInvoke",
                "core.clj",
                5909
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                137
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$require",
                "invokeStatic",
                "core.clj",
                5947
            ],
            [
                "clojure.core$require",
                "doInvoke",
                "core.clj",
                5947
            ],
            [
                "clojure.lang.RestFn",
                "invoke",
                "RestFn.java",
                408
            ],
            [
                "integrant.core$try_require",
                "invokeStatic",
                "core.cljc",
                171
            ],
            [
                "integrant.core$try_require",
                "invoke",
                "core.cljc",
                170
            ],
            [
                "clojure.core$keep$fn__8200",
                "invoke",
                "core.clj",
                7261
            ],
            [
                "clojure.lang.LazySeq",
                "sval",
                "LazySeq.java",
                40
            ],
            [
                "clojure.lang.LazySeq",
                "seq",
                "LazySeq.java",
                56
            ],
            [
                "clojure.lang.Cons",
                "next",
                "Cons.java",
                39
            ],
            [
                "clojure.lang.RT",
                "next",
                "RT.java",
                706
            ],
            [
                "clojure.core$next__5108",
                "invokeStatic",
                "core.clj",
                64
            ],
            [
                "clojure.core$dorun",
                "invokeStatic",
                "core.clj",
                3134
            ],
            [
                "clojure.core$doall",
                "invokeStatic",
                "core.clj",
                3140
            ],
            [
                "clojure.core$doall",
                "invoke",
                "core.clj",
                3140
            ],
            [
                "integrant.core$load_namespaces",
                "invokeStatic",
                "core.cljc",
                184
            ],
            [
                "integrant.core$load_namespaces",
                "invoke",
                "core.cljc",
                175
            ],
            [
                "integrant.core$load_namespaces",
                "invokeStatic",
                "core.cljc",
                182
            ],
            [
                "integrant.core$load_namespaces",
                "invoke",
                "core.cljc",
                175
            ],
            [
                "linnaeus.lambdas$fn__1489",
                "invokeStatic",
                "lambdas.clj",
                39
            ],
            [
                "linnaeus.lambdas$fn__1489",
                "invoke",
                "lambdas.clj",
                22
            ],
            [
                "clojure.lang.AFn",
                "applyToHelper",
                "AFn.java",
                152
            ],
            [
                "clojure.lang.AFn",
                "applyTo",
                "AFn.java",
                144
            ],
            [
                "clojure.lang.Compiler$InvokeExpr",
                "eval",
                "Compiler.java",
                3695
            ],
            [
                "clojure.lang.Compiler$DefExpr",
                "eval",
                "Compiler.java",
                457
            ],
            [
                "clojure.lang.Compiler",
                "eval",
                "Compiler.java",
                7067
            ],
            [
                "clojure.lang.Compiler",
                "load",
                "Compiler.java",
                7514
            ],
            [
                "clojure.lang.RT",
                "loadResourceScript",
                "RT.java",
                379
            ],
            [
                "clojure.lang.RT",
                "loadResourceScript",
                "RT.java",
                370
            ],
            [
                "clojure.lang.RT",
                "load",
                "RT.java",
                460
            ],
            [
                "clojure.lang.RT",
                "load",
                "RT.java",
                426
            ],
            [
                "clojure.core$load$fn__6548",
                "invoke",
                "core.clj",
                6046
            ],
            [
                "clojure.core$load",
                "invokeStatic",
                "core.clj",
                6045
            ],
            [
                "clojure.core$load",
                "doInvoke",
                "core.clj",
                6029
            ],
            [
                "clojure.lang.RestFn",
                "invoke",
                "RestFn.java",
                408
            ],
            [
                "clojure.core$load_one",
                "invokeStatic",
                "core.clj",
                5848
            ],
            [
                "clojure.core$load_one",
                "invoke",
                "core.clj",
                5843
            ],
            [
                "clojure.core$load_lib$fn__6493",
                "invoke",
                "core.clj",
                5888
            ],
            [
                "clojure.core$load_lib",
                "invokeStatic",
                "core.clj",
                5887
            ],
            [
                "clojure.core$load_lib",
                "doInvoke",
                "core.clj",
                5868
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                142
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$load_libs",
                "invokeStatic",
                "core.clj",
                5925
            ],
            [
                "clojure.core$load_libs",
                "doInvoke",
                "core.clj",
                5909
            ],
            [
                "clojure.lang.RestFn",
                "applyTo",
                "RestFn.java",
                137
            ],
            [
                "clojure.core$apply",
                "invokeStatic",
                "core.clj",
                659
            ],
            [
                "clojure.core$require",
                "invokeStatic",
                "core.clj",
                5947
            ],
            [
                "clojure.core$require",
                "doInvoke",
                "core.clj",
                5947
            ],
            [
                "clojure.lang.RestFn",
                "invoke",
                "RestFn.java",
                408
            ],
            [
                "datomic.ion.resolver$preload_BANG_",
                "invokeStatic",
                "resolver.clj",
                90
            ],
            [
                "datomic.ion.resolver$preload_BANG_",
                "invoke",
                "resolver.clj",
                84
            ],
            [
                "datomic.cluster_node$preload_ions",
                "invokeStatic",
                "cluster_node.clj",
                559
            ],
            [
                "datomic.cluster_node$preload_ions",
                "invoke",
                "cluster_node.clj",
                552
            ],
            [
                "datomic.cluster_node$perform_startup_tasks_BANG_$fn__38548",
                "invoke",
                "cluster_node.clj",
                597
            ],
            ...
        ]
    },
    "Type": "Event",
    "Tid": 64,
    "Timestamp": 1545219676192
}

#2

Is this a Solo or Production instance of Datomic?

Are you able to test your Ion locally using the same memory settings as your deployment (https://docs.datomic.com/cloud/ions/ions-reference.html#jvm-settings), particularly the stack (-Xss) setting.


#3

We have identified a misconfiguration in our deployment that results in the thread stack size not being set to the values that are listed in the documentation. We are working on a fix for this in a future release, but for now you can:

Download and edit the CFT for your compute stack (i.e. the compute stack for 454-8573 is at https://s3.amazonaws.com/datomic-cloud-1/cft/454-8573/datomic-production-compute-454-8573.json).

Find the line:

"JvmFlags": "-Dclojure.spec.skip-macros=true -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:MaxDirectMemorySize=256m"

And add -Xss1024k to the end, inside the string:

"JvmFlags": "-Dclojure.spec.skip-macros=true -XX:+UseG1GC -XX:MaxGCPauseMillis=50 -XX:MaxDirectMemorySize=256m -Xss1024k"

Then use the “Update Stack” function on your compute stack, replace the template with your modified one and launch it.

This will get your java thread stack set to a larger size.

We will update this thread when a fix for this is included in a future release.

NOTE: You should use the -Xss settings specified in the table here: https://docs.datomic.com/cloud/ions/ions-reference.html#jvm-settings (512k for solo, 1m for production)