Hi all,

I'm writing this mail to let you know that there's a bug
<https://github.com/docker/for-mac/issues/5527> in Docker Desktop for Mac
which could lead to failure of bringing up MySQL service when running
Druid's integration-test.

I experienced this bug last week and spent days to dig out what happened.

Fortunately, this bug has been fixed in the latest release of Docker
Desktop 3.3.1 released in 2021-04-15.

It looks like this bug is introduced in 3.3.0, *So if your Docker Desktop
is that version, an upgrade of Docker Desktop to the latest is highly
recommended.*

Below is some information when this bug comes out during integration-test.

1. From console, exception log of mysql startup could be observed:
    *druid-metadata-storage    | 2021-04-16 11:39:29,469 INFO exited: mysql
(exit status 0; not expected)*
*    druid-metadata-storage    | 2021-04-16 11:39:30,471 INFO gave up:
mysql entered FATAL state, too many start retries too quickly*

2. Inside the druid-metadata-storage container, an exception log is
generated by MySQL to /tmp directory saying that it fails to create
/dev/null directory because of denied permission.

3. Since MySQL fails to start, Druid Coordinator prints lots of exception
message related to MySQL, and due to that, Coordinator exits unexpectedly
soon.
The last packet sent successfully to the server was 0 milliseconds ago. The
driver has not received any packets from the server.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) ~[?:1.8.0_282]
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
~[?:1.8.0_282]
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
~[?:1.8.0_282]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
~[?:1.8.0_282]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:335)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
~[mysql-connector-java.jar:5.1.48]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) ~[?:1.8.0_282]
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
~[?:1.8.0_282]
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
~[?:1.8.0_282]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
~[?:1.8.0_282]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
~[mysql-connector-java.jar:5.1.48]
        at
org.apache.druid.metadata.BasicDataSourceExt.lambda$createConnectionFactory$0(BasicDataSourceExt.java:185)
~[druid-server-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:205)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2162)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2148)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1903)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.skife.jdbi.v2.DataSourceConnectionFactory.openConnection(DataSourceConnectionFactory.java:36)
~[jdbi-2.63.1.jar:2.63.1]
        at org.skife.jdbi.v2.DBI.open(DBI.java:212)
~[jdbi-2.63.1.jar:2.63.1]
        at org.skife.jdbi.v2.DBI.withHandle(DBI.java:279)
~[jdbi-2.63.1.jar:2.63.1]
        at
org.apache.druid.metadata.SQLMetadataConnector.lookup(SQLMetadataConnector.java:600)
~[druid-server-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.getCurrentUserMapBytes(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:271)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.lambda$start$0(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:131)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:87)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:115)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:105)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.BasicAuthUtils.maybeInitialize(BasicAuthUtils.java:289)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.start(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:122)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        ... 10 more
Caused by: java.net.ConnectException: Connection refused (Connection
refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
~[?:1.8.0_282]
        at
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
~[?:1.8.0_282]
        at
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
~[?:1.8.0_282]
        at
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
~[?:1.8.0_282]
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
~[?:1.8.0_282]
        at java.net.Socket.connect(Socket.java:607) ~[?:1.8.0_282]
        at
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:211)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:299)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2187)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2220)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2015)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:768)
~[mysql-connector-java.jar:5.1.48]
        at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
~[mysql-connector-java.jar:5.1.48]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
Method) ~[?:1.8.0_282]
        at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
~[?:1.8.0_282]
        at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
~[?:1.8.0_282]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
~[?:1.8.0_282]
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:385)
~[mysql-connector-java.jar:5.1.48]
        at
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:323)
~[mysql-connector-java.jar:5.1.48]
        at
org.apache.druid.metadata.BasicDataSourceExt.lambda$createConnectionFactory$0(BasicDataSourceExt.java:185)
~[druid-server-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.commons.dbcp2.PoolableConnectionFactory.makeObject(PoolableConnectionFactory.java:205)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.validateConnectionFactory(BasicDataSource.java:2162)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.createPoolableConnectionFactory(BasicDataSource.java:2148)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.createDataSource(BasicDataSource.java:1903)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.apache.commons.dbcp2.BasicDataSource.getConnection(BasicDataSource.java:1413)
~[commons-dbcp2-2.0.1.jar:2.0.1]
        at
org.skife.jdbi.v2.DataSourceConnectionFactory.openConnection(DataSourceConnectionFactory.java:36)
~[jdbi-2.63.1.jar:2.63.1]
        at org.skife.jdbi.v2.DBI.open(DBI.java:212)
~[jdbi-2.63.1.jar:2.63.1]
        at org.skife.jdbi.v2.DBI.withHandle(DBI.java:279)
~[jdbi-2.63.1.jar:2.63.1]
        at
org.apache.druid.metadata.SQLMetadataConnector.lookup(SQLMetadataConnector.java:600)
~[druid-server-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.getCurrentUserMapBytes(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:271)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.lambda$start$0(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:131)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:87)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:115)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.java.util.common.RetryUtils.retry(RetryUtils.java:105)
~[druid-core-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.BasicAuthUtils.maybeInitialize(BasicAuthUtils.java:289)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        at
org.apache.druid.security.basic.authentication.db.updater.CoordinatorBasicAuthenticatorMetadataStorageUpdater.start(CoordinatorBasicAuthenticatorMetadataStorageUpdater.java:122)
~[druid-basic-security-0.22.0-SNAPSHOT.jar:0.22.0-SNAPSHOT]
        ... 10 more

Reply via email to