Got an error writing communication packets (regular error)

Hello everyone,

I have regularly faced with the problem pointed out in the topic title. Some of the questions in the dashboard do not properly load (error: "got an error writing communication packets"). The page reloading often helps to execute such questions but it is a bit annoying to do reloading regularly.

The problem often occurs with specific questions (not with all questions). Time execution of corresponding queries is about 2-3 seconds (native queries without filters).

I am attaching the text of the typical error. What may be a potential reason of the problem?

P.S. I do not see any error in nginx or mysql error logs when questions fail.

status :failed,
 :class java.sql.SQLException,
 :stacktrace
 ["org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:1695)"
  "org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1557)"
  "org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1520)"
  "org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:318)"
  "org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220)"
  "org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:149)"
  "com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.execute(NewProxyPreparedStatement.java:67)"
  "toucan2.jdbc.query$reduce_jdbc_query.invokeStatic(query.clj:40)"
  "toucan2.jdbc.query$reduce_jdbc_query.invoke(query.clj:22)"
  "toucan2.query_execution_backend.jdbc$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invokeStatic(jdbc.clj:21)"
  "toucan2.query_execution_backend.jdbc$transduce_execute_with_connection_primary_method_java_sql_Connection_default_default.invoke(jdbc.clj:11)"
  "clojure.lang.AFn.applyToHelper(AFn.java:178)"
  "clojure.lang.AFn.applyTo(AFn.java:144)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.applyTo(RestFn.java:137)"
  "clojure.core$apply.invokeStatic(core.clj:675)"
  "clojure.core$partial$fn__5908.doInvoke(core.clj:2639)"
  "clojure.lang.RestFn.applyTo(RestFn.java:146)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.applyTo(RestFn.java:137)"
  "clojure.core$apply.invokeStatic(core.clj:667)"
  "clojure.core$apply.invoke(core.clj:662)"
  "methodical.impl.combo.threaded$fn__19588$fn__19589$fn__19596.invoke(threaded.clj:79)"
  "methodical.impl.combo.threaded$reducer_fn$fn__19558$fn__19562.invoke(threaded.clj:23)"
  "clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)"
  "clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)"
  "clojure.core.protocols$fn__8244.invoke(protocols.clj:124)"
  "clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)"
  "clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)"
  "clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)"
  "clojure.core.protocols$fn__8236.invoke(protocols.clj:75)"
  "clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)"
  "clojure.core$reduce.invokeStatic(core.clj:6886)"
  "clojure.core$reduce.invoke(core.clj:6868)"
  "methodical.impl.combo.threaded$reducer_fn$fn__19558.invoke(threaded.clj:21)"
  "clojure.core$comp$fn__5876.doInvoke(core.clj:2589)"
  "clojure.lang.RestFn.applyTo(RestFn.java:146)"
  "clojure.core$apply.invokeStatic(core.clj:675)"
  "clojure.core$apply.doInvoke(core.clj:662)"
  "clojure.lang.RestFn.invoke(RestFn.java:533)"
  "methodical.impl.combo.threaded$combine_with_threader$fn__19568.doInvoke(threaded.clj:46)"
  "clojure.lang.RestFn.applyTo(RestFn.java:151)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.applyTo(RestFn.java:137)"
  "clojure.core$apply.invokeStatic(core.clj:675)"
  "clojure.core$apply.doInvoke(core.clj:662)"
  "clojure.lang.RestFn.invoke(RestFn.java:533)"
  "methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:65)"
  "methodical.impl.standard$invoke_multifn.doInvoke(standard.clj:47)"
  "clojure.lang.RestFn.invoke(RestFn.java:594)"
  "methodical.impl.standard.StandardMultiFn.invoke(standard.clj:199)"
  "toucan2.pipeline$transduce_execute$with_connection_STAR___24262.invoke(pipeline.clj:86)"
  "toucan2.connection$bind_current_connectable_fn$fn__23875.invoke(connection.clj:104)"
  "toucan2.connection$bind_current_connectable_fn$fn__23875.invoke(connection.clj:104)"
  "toucan2.connection$bind_current_connectable_fn$fn__23875.invoke(connection.clj:104)"
  "toucan2.connection$do_with_connection_primary_method_javax_sql_DataSource.invokeStatic(connection.clj:213)"
  "toucan2.connection$do_with_connection_primary_method_javax_sql_DataSource.invoke(connection.clj:210)"
  "clojure.lang.AFn.applyToHelper(AFn.java:160)"
  "clojure.lang.AFn.applyTo(AFn.java:144)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.invoke(RestFn.java:436)"
  "clojure.core$partial$fn__5908.invoke(core.clj:2642)"
  "clojure.lang.AFn.applyToHelper(AFn.java:156)"
  "clojure.lang.RestFn.applyTo(RestFn.java:132)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.invoke(RestFn.java:421)"
  "methodical.impl.combo.threaded$fn__19588$fn__19589$fn__19590.invoke(threaded.clj:70)"
  "methodical.impl.combo.threaded$reducer_fn$fn__19558$fn__19562.invoke(threaded.clj:23)"
  "clojure.lang.ArrayChunk.reduce(ArrayChunk.java:58)"
  "clojure.core.protocols$fn__8244.invokeStatic(protocols.clj:136)"
  "clojure.core.protocols$fn__8244.invoke(protocols.clj:124)"
  "clojure.core.protocols$fn__8204$G__8199__8213.invoke(protocols.clj:19)"
  "clojure.core.protocols$seq_reduce.invokeStatic(protocols.clj:31)"
  "clojure.core.protocols$fn__8236.invokeStatic(protocols.clj:75)"
  "clojure.core.protocols$fn__8236.invoke(protocols.clj:75)"
  "clojure.core.protocols$fn__8178$G__8173__8191.invoke(protocols.clj:13)"
  "clojure.core$reduce.invokeStatic(core.clj:6886)"
  "clojure.core$reduce.invoke(core.clj:6868)"
  "methodical.impl.combo.threaded$reducer_fn$fn__19558.invoke(threaded.clj:21)"
  "clojure.core$comp$fn__5876.invoke(core.clj:2587)"
  "methodical.impl.combo.threaded$combine_with_threader$fn__19568.invoke(threaded.clj:43)"
  "clojure.lang.AFn.applyToHelper(AFn.java:156)"
  "clojure.lang.RestFn.applyTo(RestFn.java:132)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.invoke(RestFn.java:421)"
  "toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invokeStatic(connection.clj:118)"
  "toucan2.connection$do_with_connection_around_method_toucan2_connection_default.invoke(connection.clj:106)"
  "clojure.lang.AFn.applyToHelper(AFn.java:160)"
  "clojure.lang.AFn.applyTo(AFn.java:144)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.invoke(RestFn.java:436)"
  "clojure.core$partial$fn__5908.invoke(core.clj:2642)"
  "clojure.lang.AFn.applyToHelper(AFn.java:156)"
  "clojure.lang.RestFn.applyTo(RestFn.java:132)"
  "clojure.lang.AFunction$1.doInvoke(AFunction.java:31)"
  "clojure.lang.RestFn.invoke(RestFn.java:421)"
  "methodical.impl.standard$invoke_multifn.invokeStatic(standard.clj:55)"
  "methodical.impl.standard$invoke_multifn.invoke(standard.clj:47)"
  "methodical.impl.standard.StandardMultiFn.invoke(standard.clj:193)"
  "--> db.connection$do_with_connection_primary_method_default.invokeStatic(connection.clj:139)"
  "db.connection$do_with_connection_primary_method_default.invoke(connection.clj:137)"
  "query_processor.store$fn__53045$fetch_and_store_database_BANG___53050$fn__53051.invoke(store.clj:172)"
  "query_processor.store$fn__53045$fetch_and_store_database_BANG___53050.invoke(store.clj:160)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_STAR_.invokeStatic(resolve_database_and_driver.clj:14)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_STAR_.invoke(resolve_database_and_driver.clj:11)"
  "query_processor.middleware.resolve_database_and_driver$resolve_database_and_driver$fn__69082.invoke(resolve_database_and_driver.clj:25)"
  "query_processor.middleware.fetch_source_query$resolve_card_id_source_tables$fn__64952.invoke(fetch_source_query.clj:310)"
  "query_processor.middleware.store$initialize_store$fn__65130$fn__65131.invoke(store.clj:12)"
  "query_processor.store$do_with_store.invokeStatic(store.clj:47)"
  "query_processor.store$do_with_store.invoke(store.clj:41)"
  "query_processor.middleware.store$initialize_store$fn__65130.invoke(store.clj:11)"
  "query_processor.middleware.normalize_query$normalize$fn__69371.invoke(normalize_query.clj:25)"
  "query_processor.middleware.constraints$add_default_userland_constraints$fn__66308.invoke(constraints.clj:54)"
  "query_processor.middleware.process_userland_query$process_userland_query$fn__69307.invoke(process_userland_query.clj:150)"
  "query_processor.middleware.catch_exceptions$catch_exceptions$fn__69684.invoke(catch_exceptions.clj:171)"
  "query_processor.reducible$async_qp$qp_STAR___59455$thunk__59457.invoke(reducible.clj:103)"
  "query_processor.reducible$async_qp$qp_STAR___59455$fn__59459.invoke(reducible.clj:108)"],
 :card_id 348,
 :context :dashboard,
 :error "Got an error writing communication packets",
 :row_count 0,
 :running_time 0,
 :data {:rows [], :cols []}}

Diagnostic info

{
  "browser-info": {
    "language": "en-US",
    "platform": "Win32",
    "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.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.18+10-post-Ubuntu-0ubuntu120.04.1",
    "java.vendor": "Ubuntu",
    "java.vendor.url": "https://ubuntu.com/",
    "java.version": "11.0.18",
    "java.vm.name": "OpenJDK 64-Bit Server VM",
    "java.vm.version": "11.0.18+10-post-Ubuntu-0ubuntu120.04.1",
    "os.name": "Linux",
    "os.version": "5.4.0-125-generic",
    "user.language": "en",
    "user.timezone": "Europe/Minsk"
  },
  "metabase-info": {
    "databases": [
      "h2",
      "mysql"
    ],
    "hosting-env": "unknown",
    "application-database": "mysql",
    "application-database-details": {
      "database": {
        "name": "MySQL",
        "version": "8.0.32-0ubuntu0.20.04.2"
      },
      "jdbc-driver": {
        "name": "MariaDB Connector/J",
        "version": "2.7.6"
      }
    },
    "run-mode": "prod",
    "version": {
      "date": "2023-04-05",
      "tag": "v0.46.1",
      "branch": "release-x.46.x",
      "hash": "12a6e1d"
    },
    "settings": {
      "report-timezone": null
    }
  }
}

Hi, do you have those questions identified? Can you send those here? I would really like to reproduce this problem

When I mean send the question I mean send the dump of the entire row in the app db of that question

Sorry for the delay.

The problem was solved. I connected to multiple databases via one user which led to problem but without error like 'exceeding max_user_connections'. I slightly increased the 'max_user_connections' and 'max_connections' parameters and also reconnect to customer databases via different mysql users.

Now everything works fine.