Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fail during upgrade from 48.3 to 49.7 #41924

Open
ppavlov39 opened this issue Apr 27, 2024 · 11 comments
Open

Fail during upgrade from 48.3 to 49.7 #41924

ppavlov39 opened this issue Apr 27, 2024 · 11 comments
Labels
Operation/Database Migrations Issues with application DB migrations when launching Metabase Priority:P1 Security holes w/o exploit, crashing, setup/upgrade, login, broken common features, correctness Type:Bug Product defects

Comments

@ppavlov39
Copy link

Describe the bug

Hello! We use Metabase 0.48.3 with MariaDB 10.5 and have tried to update to the 0.49.7 version. During the updating process we got the migration error: Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract'.

As i got right the error refer to MariaDB. We found several issues with such problem:
https://jira.mariadb.org/browse/MDEV-30343
https://jira.mariadb.org/browse/MDEV-33437
In the new version of MariaDB this problem can be solved by new parameter - https://jira.mariadb.org/browse/MDEV-32854.

But the documentation says MariaDB 10.2 supported and migration process should be done without errors.

To Reproduce

Try to update the Metabase from 48.3 to 49.7.

Expected behavior

Migrations should be done without errors.

Logs

2024-04-27 09:33:49,912 ERROR liquibase.changelog :: ChangeSet migrations/001_update_migrations.yaml::v49.2024-01-22T11:52:00::qnkhuat encountered an exception.

UPDATE SUMMARY
Run:                         19
Previously run:             262
Filtered out:                 5
-------------------------------
Total change sets:          286


FILTERED CHANGE SETS SUMMARY
DBMS mismatch:                5

2024-04-27 09:33:50,809 ERROR metabase.core :: Metabase Initialization FAILED
liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset migrations/001_update_migrations.yaml::v49.2024-01-22T11:52:00::qnkhuat:
     Reason: clojure.lang.ExceptionInfo: (conn=23045451) Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375 {:toucan2/context-trace [["execute SQL with class com.mchange.v2.c3p0.impl.NewProxyConnection" {:toucan2.jdbc.query/sql-args ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}] {:toucan2.pipeline/rf #object[clojure.core$map$fn__5931$fn__5932 0x32fe84a5 "clojure.core$map$fn__5931$fn__5932@32fe84a5"]} ["with compiled query" {:toucan2.pipeline/compiled-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with built query" {:toucan2.pipeline/built-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with resolved query" {:toucan2.pipeline/resolved-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with parsed args" {:toucan2.pipeline/query-type :toucan.result-type/*, :toucan2.pipeline/parsed-args {:connectable nil, :queryable ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}}] ["with model" {:toucan2.pipeline/model nil}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}]]}
        at liquibase.command.CommandScope.execute(CommandScope.java:253)
        at liquibase.Liquibase.lambda$update$0(Liquibase.java:245)
        at liquibase.Scope.lambda$child$0(Scope.java:186)
        at liquibase.Scope.child(Scope.java:195)
        at liquibase.Scope.child(Scope.java:185)
        at liquibase.Scope.child(Scope.java:164)
        at liquibase.Liquibase.runInScope(Liquibase.java:1419)
        at liquibase.Liquibase.update(Liquibase.java:234)
        at liquibase.Liquibase.update(Liquibase.java:212)
        at liquibase.Liquibase.update(Liquibase.java:194)
        at metabase.db.liquibase$migrate_up_if_needed_BANG_.invokeStatic(liquibase.clj:305)
        at metabase.db.liquibase$migrate_up_if_needed_BANG_.invoke(liquibase.clj:287)
        at metabase.db.setup$migrate_BANG_$fn__51104.invoke(setup.clj:80)
        at metabase.db.liquibase$do_with_liquibase$f_STAR___48780.invoke(liquibase.clj:139)
        at metabase.db.liquibase$do_with_liquibase.invokeStatic(liquibase.clj:142)
        at metabase.db.liquibase$do_with_liquibase.invoke(liquibase.clj:130)
        at metabase.db.setup$migrate_BANG_.invokeStatic(setup.clj:75)
        at metabase.db.setup$migrate_BANG_.doInvoke(setup.clj:56)
        at clojure.lang.RestFn.invoke(RestFn.java:445)
        at metabase.db.setup$run_schema_migrations_BANG_.invokeStatic(setup.clj:147)
        at metabase.db.setup$run_schema_migrations_BANG_.invoke(setup.clj:141)
        at metabase.db.setup$setup_db_BANG_$fn__51132$fn__51133.invoke(setup.clj:165)
        at metabase.util.jvm$do_with_us_locale.invokeStatic(jvm.clj:239)
        at metabase.util.jvm$do_with_us_locale.invoke(jvm.clj:225)
        at metabase.db.setup$setup_db_BANG_$fn__51132.invoke(setup.clj:160)
        at metabase.db.setup$setup_db_BANG_.invokeStatic(setup.clj:159)
        at metabase.db.setup$setup_db_BANG_.invoke(setup.clj:153)
        at metabase.db$setup_db_BANG_$fn__51152.invoke(db.clj:69)
        at metabase.db$setup_db_BANG_.invokeStatic(db.clj:64)
        at metabase.db$setup_db_BANG_.invoke(db.clj:55)
        at metabase.core$init_BANG__STAR_.invokeStatic(core.clj:116)
        at metabase.core$init_BANG__STAR_.invoke(core.clj:101)
        at metabase.core$init_BANG_.invokeStatic(core.clj:159)
        at metabase.core$init_BANG_.invoke(core.clj:154)
        at metabase.core$start_normally.invokeStatic(core.clj:171)
        at metabase.core$start_normally.invoke(core.clj:165)
        at metabase.core$entrypoint.invokeStatic(core.clj:204)
        at metabase.core$entrypoint.doInvoke(core.clj:198)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at clojure.lang.AFn.applyToHelper(AFn.java:152)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.Var.applyTo(Var.java:705)
        at clojure.core$apply.invokeStatic(core.clj:667)
        at clojure.core$apply.invoke(core.clj:662)
        at metabase.bootstrap$_main.invokeStatic(bootstrap.clj:31)
        at metabase.bootstrap$_main.doInvoke(bootstrap.clj:28)
        at clojure.lang.RestFn.invoke(RestFn.java:397)
        at clojure.lang.AFn.applyToHelper(AFn.java:152)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at metabase.bootstrap.main(Unknown Source)
Caused by: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset migrations/001_update_migrations.yaml::v49.2024-01-22T11:52:00::qnkhuat:
     Reason: clojure.lang.ExceptionInfo: (conn=23045451) Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375 {:toucan2/context-trace [["execute SQL with class com.mchange.v2.c3p0.impl.NewProxyConnection" {:toucan2.jdbc.query/sql-args ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}] {:toucan2.pipeline/rf #object[clojure.core$map$fn__5931$fn__5932 0x32fe84a5 "clojure.core$map$fn__5931$fn__5932@32fe84a5"]} ["with compiled query" {:toucan2.pipeline/compiled-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with built query" {:toucan2.pipeline/built-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with resolved query" {:toucan2.pipeline/resolved-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with parsed args" {:toucan2.pipeline/query-type :toucan.result-type/*, :toucan2.pipeline/parsed-args {:connectable nil, :queryable ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}}] ["with model" {:toucan2.pipeline/model nil}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}]]}
        at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:151)
        at liquibase.command.core.AbstractUpdateCommandStep.lambda$run$0(AbstractUpdateCommandStep.java:110)
        at liquibase.Scope.lambda$child$0(Scope.java:186)
        at liquibase.Scope.child(Scope.java:195)
        at liquibase.Scope.child(Scope.java:185)
        at liquibase.Scope.child(Scope.java:164)
        at liquibase.command.core.AbstractUpdateCommandStep.run(AbstractUpdateCommandStep.java:108)
        at liquibase.command.core.UpdateCommandStep.run(UpdateCommandStep.java:105)
        at liquibase.command.CommandScope.execute(CommandScope.java:217)
        ... 49 more
Caused by: liquibase.exception.MigrationFailedException: Migration failed for changeset migrations/001_update_migrations.yaml::v49.2024-01-22T11:52:00::qnkhuat:
     Reason: clojure.lang.ExceptionInfo: (conn=23045451) Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375 {:toucan2/context-trace [["execute SQL with class com.mchange.v2.c3p0.impl.NewProxyConnection" {:toucan2.jdbc.query/sql-args ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}] {:toucan2.pipeline/rf #object[clojure.core$map$fn__5931$fn__5932 0x32fe84a5 "clojure.core$map$fn__5931$fn__5932@32fe84a5"]} ["with compiled query" {:toucan2.pipeline/compiled-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with built query" {:toucan2.pipeline/built-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with resolved query" {:toucan2.pipeline/resolved-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with parsed args" {:toucan2.pipeline/query-type :toucan.result-type/*, :toucan2.pipeline/parsed-args {:connectable nil, :queryable ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}}] ["with model" {:toucan2.pipeline/model nil}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}]]}
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:797)
        at liquibase.changelog.visitor.UpdateVisitor.executeAcceptedChange(UpdateVisitor.java:119)
        at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:68)
        at liquibase.changelog.ChangeLogIterator$2.lambda$run$0(ChangeLogIterator.java:133)
        at liquibase.Scope.lambda$child$0(Scope.java:186)
        at liquibase.Scope.child(Scope.java:195)
        at liquibase.Scope.child(Scope.java:185)
        at liquibase.Scope.child(Scope.java:164)
        at liquibase.changelog.ChangeLogIterator$2.run(ChangeLogIterator.java:122)
        at liquibase.Scope.lambda$child$0(Scope.java:186)
        at liquibase.Scope.child(Scope.java:195)
        at liquibase.Scope.child(Scope.java:185)
        at liquibase.Scope.child(Scope.java:164)
        at liquibase.Scope.child(Scope.java:252)
        at liquibase.Scope.child(Scope.java:256)
        at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:89)
        ... 57 more
Caused by: clojure.lang.ExceptionInfo: (conn=23045451) Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375 {:toucan2/context-trace [["execute SQL with class com.mchange.v2.c3p0.impl.NewProxyConnection" {:toucan2.jdbc.query/sql-args ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}] {:toucan2.pipeline/rf #object[clojure.core$map$fn__5931$fn__5932 0x32fe84a5 "clojure.core$map$fn__5931$fn__5932@32fe84a5"]} ["with compiled query" {:toucan2.pipeline/compiled-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with built query" {:toucan2.pipeline/built-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with resolved query" {:toucan2.pipeline/resolved-query ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}] ["with parsed args" {:toucan2.pipeline/query-type :toucan.result-type/*, :toucan2.pipeline/parsed-args {:connectable nil, :queryable ["UPDATE revision\n               SET object = JSON_SET(\n                   object,\n                   '$.type',\n                   CASE\n                       WHEN JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) = 'true' THEN 'model'\n                       ELSE 'question'\n                   END)\n               WHERE model = 'Card' AND JSON_UNQUOTE(JSON_EXTRACT(object, '$.dataset')) IS NOT NULL;;"]}}] ["with model" {:toucan2.pipeline/model nil}] ["resolve connection" {:toucan2.connection/connectable org.mariadb.jdbc.MariaDbConnection}] ["resolve connection" {:toucan2.connection/connectable nil}]]}
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:79)
        at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:158)
        at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:262)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:229)
        at org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:149)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)
        at toucan2.jdbc.query$reduce_jdbc_query.invokeStatic(query.clj:40)
        at toucan2.jdbc.query$reduce_jdbc_query.invoke(query.clj:22)
        at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invokeStatic(pipeline.clj:19)
        at toucan2.jdbc.pipeline$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invoke(pipeline.clj:9)
        at clojure.lang.AFn.applyToHelper(AFn.java:178)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$partial$fn__5908.doInvoke(core.clj:2639)
        at clojure.lang.RestFn.applyTo(RestFn.java:146)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:667)
        at clojure.core$apply.invoke(core.clj:662)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18237.invoke(threaded.clj:79)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.doInvoke(core.clj:2589)
        at clojure.lang.RestFn.applyTo(RestFn.java:146)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$apply.doInvoke(core.clj:662)
        at clojure.lang.RestFn.invoke(RestFn.java:533)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.doInvoke(threaded.clj:46)
        at clojure.lang.RestFn.applyTo(RestFn.java:151)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$apply.doInvoke(core.clj:662)
        at clojure.lang.RestFn.invoke(RestFn.java:533)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
        at methodical.impl.standard$invoke_multifn.doInvoke(standard.clj:47)
        at clojure.lang.RestFn.invoke(RestFn.java:594)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:199)
        at toucan2.pipeline$transduce_execute$with_connection_STAR___21462.invoke(pipeline.clj:78)
        at toucan2.connection$bind_current_connectable_fn$fn__21139.invoke(connection.clj:104)
        at toucan2.connection$bind_current_connectable_fn$fn__21139.invoke(connection.clj:104)
        at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invokeStatic(connection.clj:13)
        at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invoke(connection.clj:11)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18231.invoke(threaded.clj:70)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.invoke(core.clj:2587)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.invoke(threaded.clj:43)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
        at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:193)
        at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
        at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18231.invoke(threaded.clj:70)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.invoke(core.clj:2587)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.invoke(threaded.clj:43)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
        at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:193)
        at toucan2.pipeline$transduce_execute.invokeStatic(pipeline.clj:77)
        at toucan2.pipeline$transduce_execute.invoke(pipeline.clj:64)
        at clojure.lang.Var.invoke(Var.java:399)
        at toucan2.pipeline$transduce_compiled_query.invokeStatic(pipeline.clj:244)
        at toucan2.pipeline$transduce_compiled_query.invoke(pipeline.clj:240)
        at toucan2.pipeline$transduce_built_query.invokeStatic(pipeline.clj:252)
        at toucan2.pipeline$transduce_built_query.invoke(pipeline.clj:246)
        at toucan2.pipeline$transduce_query_primary_method_default.invokeStatic(pipeline.clj:272)
        at toucan2.pipeline$transduce_query_primary_method_default.invoke(pipeline.clj:269)
        at clojure.lang.AFn.applyToHelper(AFn.java:178)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$partial$fn__5908.doInvoke(core.clj:2639)
        at clojure.lang.RestFn.applyTo(RestFn.java:146)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:667)
        at clojure.core$apply.invoke(core.clj:662)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18237.invoke(threaded.clj:79)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.doInvoke(core.clj:2589)
        at clojure.lang.RestFn.applyTo(RestFn.java:146)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$apply.doInvoke(core.clj:662)
        at clojure.lang.RestFn.invoke(RestFn.java:533)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.doInvoke(threaded.clj:46)
        at clojure.lang.RestFn.applyTo(RestFn.java:151)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.applyTo(RestFn.java:137)
        at clojure.core$apply.invokeStatic(core.clj:675)
        at clojure.core$apply.doInvoke(core.clj:662)
        at clojure.lang.RestFn.invoke(RestFn.java:533)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)
        at methodical.impl.standard$invoke_multifn.doInvoke(standard.clj:47)
        at clojure.lang.RestFn.invoke(RestFn.java:594)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:199)
        at toucan2.pipeline$transduce_query_STAR_.invokeStatic(pipeline.clj:278)
        at toucan2.pipeline$transduce_query_STAR_.invoke(pipeline.clj:274)
        at toucan2.pipeline$transduce_with_model.invokeStatic(pipeline.clj:293)
        at toucan2.pipeline$transduce_with_model.invoke(pipeline.clj:280)
        at toucan2.pipeline$transduce_parsed.invokeStatic(pipeline.clj:309)
        at toucan2.pipeline$transduce_parsed.invoke(pipeline.clj:295)
        at toucan2.execute$fn__21578.invokeStatic(execute.clj:79)
        at toucan2.execute$fn__21578.invoke(execute.clj:77)
        at toucan2.execute$query_STAR_$query_STAR__STAR___21575.invoke(execute.clj:39)
        at toucan2.execute$query_STAR_$query_STAR__STAR___21575.invoke(execute.clj:33)
        at toucan2.execute$query_STAR_$query_STAR__STAR___21575.invoke(execute.clj:28)
        at toucan2.execute$query_STAR_$query_STAR__STAR___21575.invoke(execute.clj:25)
        at metabase.db.custom_migrations.CardRevisionAddType$with_connection_STAR___48530$with_transaction_STAR___48531.invoke(custom_migrations.clj:1011)
        at toucan2.connection$bind_current_connectable_fn$fn__21139.invoke(connection.clj:104)
        at metabase.db.connection$do_transaction$thunk__32319.invoke(connection.clj:150)
        at metabase.db.connection$do_transaction.invokeStatic(connection.clj:165)
        at metabase.db.connection$do_transaction.invoke(connection.clj:146)
        at metabase.db.connection$do_with_transaction_primary_method_java_sql_Connection.invokeStatic(connection.clj:199)
        at metabase.db.connection$do_with_transaction_primary_method_java_sql_Connection.invoke(connection.clj:172)
        at clojure.lang.AFn.applyToHelper(AFn.java:165)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:457)
        at clojure.core$partial$fn__5908.invoke(core.clj:2643)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18233.invoke(threaded.clj:71)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.invoke(core.clj:2588)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.invoke(threaded.clj:44)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invokeStatic(connection.clj:249)
        at toucan2.connection$do_with_transaction_around_method_toucan2_connection_default.invoke(connection.clj:245)
        at clojure.lang.AFn.applyToHelper(AFn.java:165)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:457)
        at clojure.core$partial$fn__5908.invoke(core.clj:2643)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:58)
        at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:195)
        at metabase.db.custom_migrations.CardRevisionAddType$with_connection_STAR___48530.invoke(custom_migrations.clj:996)
        at toucan2.connection$bind_current_connectable_fn$fn__21139.invoke(connection.clj:104)
        at toucan2.connection$bind_current_connectable_fn$fn__21139.invoke(connection.clj:104)
        at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invokeStatic(connection.clj:13)
        at toucan2.jdbc.connection$do_with_connection_primary_method_java_sql_Connection.invoke(connection.clj:11)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18231.invoke(threaded.clj:70)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.invoke(core.clj:2587)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.invoke(threaded.clj:43)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
        at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:193)
        at toucan2.connection$do_with_connection_primary_method_.invokeStatic(connection.clj:204)
        at toucan2.connection$do_with_connection_primary_method_.invoke(connection.clj:194)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.combo.threaded$fn__18229$fn__18230$fn__18231.invoke(threaded.clj:70)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199$fn__18203.invoke(threaded.clj:23)
        at clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)
        at clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)
        at clojure.core.protocols$fn__8244.invoke(protocols.clj:124)
        at clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)
        at clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)
        at clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)
        at clojure.core.protocols$fn__8236.invoke(protocols.clj:75)
        at clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)
        at clojure.core$reduce.invokeStatic(core.clj:6887)
        at clojure.core$reduce.invoke(core.clj:6869)
        at methodical.impl.combo.threaded$reducer_fn$fn__18199.invoke(threaded.clj:21)
        at clojure.core$comp$fn__5876.invoke(core.clj:2587)
        at methodical.impl.combo.threaded$combine_with_threader$fn__18209.invoke(threaded.clj:43)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)
        at toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)
        at clojure.lang.AFn.applyToHelper(AFn.java:160)
        at clojure.lang.AFn.applyTo(AFn.java:144)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:436)
        at clojure.core$partial$fn__5908.invoke(core.clj:2642)
        at clojure.lang.AFn.applyToHelper(AFn.java:156)
        at clojure.lang.RestFn.applyTo(RestFn.java:132)
        at clojure.lang.AFunction$1.doInvoke(AFunction.java:31)
        at clojure.lang.RestFn.invoke(RestFn.java:421)
        at methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)
        at methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)
        at methodical.impl.standard.StandardMultiFn.invoke(standard.clj:193)
        at metabase.db.custom_migrations.CardRevisionAddType.execute(custom_migrations.clj:996)
        at liquibase.change.custom.CustomChangeWrapper.generateStatements(CustomChangeWrapper.java:169)
        at liquibase.database.AbstractJdbcDatabase.executeStatements(AbstractJdbcDatabase.java:1271)
        at liquibase.changelog.ChangeSet.execute(ChangeSet.java:755)
        ... 72 more
Caused by: java.sql.SQLTransientConnectionException: (conn=23045451) Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375
        ... 418 more
Caused by: org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException: Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375
        at org.mariadb.jdbc.internal.util.exceptions.MariaDbSqlException.of(MariaDbSqlException.java:34)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:195)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:178)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:322)
        at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220)
        ... 414 more
Caused by: java.sql.SQLException: Limit of 32 on JSON nested strucures depth is reached in argument 1 to function 'json_extract' at position 1375
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1693)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1555)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1518)
        at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:319)
        ... 415 more
2024-04-27 09:33:50,827 INFO metabase.core :: Metabase Shutting Down ...
2024-04-27 09:33:50,828 INFO metabase.server :: Shutting Down Embedded Jetty Webserver
2024-04-27 09:33:50,837 WARN db.liquibase :: ()
2024-04-27 09:33:50,838 INFO metabase.core :: Metabase Shutdown COMPLETE

Information about your Metabase installation

{
  "browser-info": {
    "platform": "MacIntel",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "vendor": "Google Inc."
  },
  "system-info": {
    "file.encoding": "UTF-8",
    "java.runtime.name": "OpenJDK Runtime Environment",
    "java.runtime.version": "11.0.21+9",
    "java.vendor": "Eclipse Adoptium",
    "java.vendor.url": "https://adoptium.net/",
    "java.version": "11.0.21",
    "java.vm.name": "OpenJDK 64-Bit Server VM",
    "java.vm.version": "11.0.21+9",
    "os.name": "Linux",
    "os.version": "5.14.0-375.el9.x86_64",
    "user.language": "en"
  },
  "metabase-info": {
    "databases": [
      "exasol",
      "mysql",
      "clickhouse",
      "mongo"
    ],
    "hosting-env": "unknown",
    "application-database": "mysql",
    "application-database-details": {
      "database": {
        "name": "MariaDB",
        "version": "10.5.13-MariaDB-log"
      },
      "jdbc-driver": {
        "name": "MariaDB Connector/J",
        "version": "2.7.10"
      }
    },
    "run-mode": "prod",
    "version": {
      "date": "2024-01-11",
      "tag": "v0.48.3",
      "hash": "80d8323"
    }
  }
}

Severity

This blocks the use of the new version of Metabase

Additional context

No response

@paoliniluis
Copy link
Contributor

@qnkhuat tagging you as you might be more familiar with the matter here

@paoliniluis paoliniluis added Priority:P1 Security holes w/o exploit, crashing, setup/upgrade, login, broken common features, correctness Operation/Database Migrations Issues with application DB migrations when launching Metabase and removed .Needs Triage labels Apr 27, 2024
@darksciencebase
Copy link
Contributor

@paoliniluis this scope has been moved to another team, and @qnkhuat is OOO anyway.
cc @dpsutton

@mmoole
Copy link

mmoole commented May 3, 2024

about the same error here, upgrading from v0.48.7 to v0.49.8:

2024-05-03 10:04:42,467 [main] INFO metabase.db.liquibase - No migration lock found.
2024-05-03 10:04:42,887 [main] INFO metabase.db.liquibase - Running 58 migrations ...
2024-05-03 10:04:52,877 [QuartzScheduler_MetabaseScheduler-hostname1714730692766_MisfireHandler] ERRORorg.quartz.impl.jdbcjobstore.JobStoreTX - MisfireHandler: Error handling misfires: Couldn't store trigger 'DEFAULT.metabase.task.truncate-audit-log.trigger' for 'DEFAULT.metabase.task.truncate-audit-log.job' job:Couldn't retrieve job because a required class was not found: metabase.task.truncate_audit_log.TruncateAuditLog
org.quartz.JobPersistenceException: Couldn't store trigger 'DEFAULT.metabase.task.truncate-audit-log.trigger' for 'DEFAULT.metabase.task.truncate-audit-log.job' job:Couldn't retrieve job because a required class was not found: metabase.task.truncate_audit_log.TruncateAuditLog
[....]
2024-05-03 10:04:53,868 [main] ERRORliquibase.changelog - ChangeSet migrations/001_update_migrations.yaml::v49.2024-04-09T10:00:03::qnkhuat encountered an exception.
2024-05-03 10:04:53,912 [main] ERRORmetabase.core - Metabase Initialization FAILED
liquibase.exception.CommandExecutionException: java.lang.ClassCastException: class java.lang.ExceptionInInitializerError cannot be cast to class java.lang.Exception (java.lang.ExceptionInInitializerError and java.lang.Exception are in module java.base of loader 'bootstrap')
[...]
2024-05-03 10:04:53,919 [Thread-9] INFO metabase.core - Metabase Shutting Down ...
2024-05-03 10:04:53,919 [Thread-9] INFO metabase.server - Shutting Down Embedded Jetty Webserver
2024-05-03 10:04:53,941 [Thread-9] WARN metabase.db.liquibase - ()
2024-05-03 10:04:53,942 [Thread-9] INFO metabase.core - Metabase Shutdown COMPLETE

@ZencareJake
Copy link

Similar failure here:

Reason: clojure.lang.ExceptionInfo: Unexpected character ('T' (code 84)): Expected space separating root-level values
liquibase.exception.CommandExecutionException: liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for changeset migrations/001_update_migrations.yaml::v49.2024-04-09T10:00:03::qnkhuat:
2024-05-15 20:22:22,225 ERROR metabase.core :: Metabase Initialization FAILED
... 236 more
at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3]
Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('T' (code 84)): Expected space separating root-level values

@mmoole were you able ever to find a solution? I'm not certain that a downgrade is a viable supported solution so I hesitant to move back versions.

@mmoole
Copy link

mmoole commented May 15, 2024

I immediately retried the upgrade with v0.49.10 when it was available, and it gut stuck at the migration tasks. Restarting metabase didn't help: it complained about migration lock being present in the database.
Then I again reset the database to the state before the upgrade, and upgraded again - and this time it went totally smoothly.
I have no idea what prevented the first try. But now it's running ok.
I also tested to upgrade from an earlier version from last October, and this also went smoothly.

@ZencareJake
Copy link

@mmoole thank you! I'll see if this will work in my case.

Also, I just looked through some closed issues and saw that this issue may be resolved in 49.11
#42659 (comment)

@paoliniluis
Copy link
Contributor

@ZencareJake try with 49.11, your db details are encrypted and that might be the issue here

@paoliniluis
Copy link
Contributor

@darksciencebase should we close this? I don't know if we tackled this at some point

@qnkhuat
Copy link
Contributor

qnkhuat commented May 16, 2024

we didn't fix the issue with json extract limit.

@ZencareJake
Copy link

ZencareJake commented May 16, 2024

@ZencareJake try with 49.11, your db details are encrypted and that might be the issue here

I didn't specify in my original comment that those logs were from an attempt to initialize v1.49.10 via the metabase/metabase:latest docker image. Should I manually pop up to metabase/metabase:v1.49.11 manually? My assumption is that that's not tagged and released yet. Maybe I'm misunderstanding and there's a stable version I should downgrade to.

Edit: I realized that you're suggesting I should try with the fix coming up in 49.11, I will do that! Thank you!

@darksciencebase
Copy link
Contributor

@ZencareJake you're right, 49.11 is not out yet, but is expected to be released today.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Operation/Database Migrations Issues with application DB migrations when launching Metabase Priority:P1 Security holes w/o exploit, crashing, setup/upgrade, login, broken common features, correctness Type:Bug Product defects
Projects
None yet
Development

No branches or pull requests

6 participants