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

Error in migration on upgrade between 48-49 due to encryption key #42611

Closed
paoliniluis opened this issue May 13, 2024 · 1 comment
Closed

Error in migration on upgrade between 48-49 due to encryption key #42611

paoliniluis opened this issue May 13, 2024 · 1 comment
Assignees
Labels
.Escalation 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 .Regression Bugs that were previously fixed and/or bugs unintentionally shipped with new features. .Team/BackendComponents also known as BEC Type:Bug Product defects
Milestone

Comments

@paoliniluis
Copy link
Contributor

Describe the bug

A migration is complicating the upgrade to 49, with a weird error

To Reproduce

  1. Start a v48.9 with an MB_ENCRYPTION_SECRET_KEY and initialize it
  2. the move to 49.10

Expected behavior

It should migrate

Logs

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:
     Reason: clojure.lang.ExceptionInfo: Unexpected character ('H' (code 72)): Expected space separating root-level values
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3] {:toucan2/context-trace [["resolve connection" {:toucan2.connection/connectable org.postgresql.jdbc.PgConnection}] ["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__51146.invoke(setup.clj:80)
	at metabase.db.liquibase$do_with_liquibase$f_STAR___48822.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__51174$fn__51175.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__51174.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__51194.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-04-09T10:00:03::qnkhuat:
     Reason: clojure.lang.ExceptionInfo: Unexpected character ('H' (code 72)): Expected space separating root-level values
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3] {:toucan2/context-trace [["resolve connection" {:toucan2.connection/connectable org.postgresql.jdbc.PgConnection}] ["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-04-09T10:00:03::qnkhuat:
     Reason: clojure.lang.ExceptionInfo: Unexpected character ('H' (code 72)): Expected space separating root-level values
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3] {:toucan2/context-trace [["resolve connection" {:toucan2.connection/connectable org.postgresql.jdbc.PgConnection}] ["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: Unexpected character ('H' (code 72)): Expected space separating root-level values
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3] {:toucan2/context-trace [["resolve connection" {:toucan2.connection/connectable org.postgresql.jdbc.PgConnection}] ["resolve connection" {:toucan2.connection/connectable nil}]]}
	at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:2481)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:752)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:676)
	at com.fasterxml.jackson.core.base.ParserMinimalBase._reportMissingRootWS(ParserMinimalBase.java:724)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._verifyRootSpace(ReaderBasedJsonParser.java:1834)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser._parseUnsignedNumber(ReaderBasedJsonParser.java:1429)
	at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:809)
	at cheshire.parse$parse.invokeStatic(parse.clj:90)
	at cheshire.parse$parse.invoke(parse.clj:88)
	at cheshire.core$parse_string.invokeStatic(core.clj:208)
	at cheshire.core$parse_string.invoke(core.clj:194)
	at cheshire.core$parse_string.invokeStatic(core.clj:205)
	at cheshire.core$parse_string.invoke(core.clj:194)
	at metabase.db.custom_migrations.DeleteScanFieldValuesTriggerForDBThatTurnItOff$with_connection_STAR___48605$with_transaction_STAR___48606$fn__48607.invoke(custom_migrations.clj:1079)
	at clojure.core$filter$fn__5962.invoke(core.clj:2834)
	at clojure.lang.LazySeq.sval(LazySeq.java:42)
	at clojure.lang.LazySeq.seq(LazySeq.java:51)
	at clojure.lang.RT.seq(RT.java:535)
	at clojure.core$seq__5467.invokeStatic(core.clj:139)
	at clojure.core$seq__5467.invoke(core.clj:139)
	at metabase.db.custom_migrations.DeleteScanFieldValuesTriggerForDBThatTurnItOff$with_connection_STAR___48605$with_transaction_STAR___48606.invoke(custom_migrations.clj:1079)
	at toucan2.connection$bind_current_connectable_fn$fn__21143.invoke(connection.clj:104)
	at metabase.db.connection$do_transaction$thunk__32323.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__18233$fn__18234$fn__18237.invoke(threaded.clj:71)
	at methodical.impl.combo.threaded$reducer_fn$fn__18203$fn__18207.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__18203.invoke(threaded.clj:21)
	at clojure.core$comp$fn__5876.invoke(core.clj:2588)
	at methodical.impl.combo.threaded$combine_with_threader$fn__18213.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.DeleteScanFieldValuesTriggerForDBThatTurnItOff$with_connection_STAR___48605.invoke(custom_migrations.clj:1073)
	at toucan2.connection$bind_current_connectable_fn$fn__21143.invoke(connection.clj:104)
	at toucan2.connection$bind_current_connectable_fn$fn__21143.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__18233$fn__18234$fn__18235.invoke(threaded.clj:70)
	at methodical.impl.combo.threaded$reducer_fn$fn__18203$fn__18207.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__18203.invoke(threaded.clj:21)
	at clojure.core$comp$fn__5876.invoke(core.clj:2587)
	at methodical.impl.combo.threaded$combine_with_threader$fn__18213.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__18233$fn__18234$fn__18235.invoke(threaded.clj:70)
	at methodical.impl.combo.threaded$reducer_fn$fn__18203$fn__18207.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__18203.invoke(threaded.clj:21)
	at clojure.core$comp$fn__5876.invoke(core.clj:2587)
	at methodical.impl.combo.threaded$combine_with_threader$fn__18213.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.DeleteScanFieldValuesTriggerForDBThatTurnItOff.execute(custom_migrations.clj:1073)
	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: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('H' (code 72)): Expected space separating root-level values
 at [Source: REDACTED (`StreamReadFeature.INCLUDE_SOURCE_IN_LOCATION` disabled); line: 1, column: 3]
	... 236 more

Information about your Metabase installation

v49.10

Severity

P1

Additional context

No response

@paoliniluis paoliniluis added Type:Bug Product defects Priority:P1 Security holes w/o exploit, crashing, setup/upgrade, login, broken common features, correctness .Regression Bugs that were previously fixed and/or bugs unintentionally shipped with new features. .Escalation Operation/Database Migrations Issues with application DB migrations when launching Metabase labels May 13, 2024
@darksciencebase darksciencebase added the .Team/BackendComponents also known as BEC label May 14, 2024
@qnkhuat qnkhuat added this to the 0.49.11 milestone May 14, 2024
@qnkhuat
Copy link
Contributor

qnkhuat commented May 14, 2024

Fixed in #42617

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
.Escalation 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 .Regression Bugs that were previously fixed and/or bugs unintentionally shipped with new features. .Team/BackendComponents also known as BEC Type:Bug Product defects
Projects
None yet
Development

No branches or pull requests

3 participants