The migration our App runs (full source):
ALTER TABLE permission
ADD COLUMN path VARCHAR(255);
UPDATE permission
SET path = (select name
from credential
where uuid = permission.credential_uuid);
(..)
This is the error in App log
2018-10-09T09:42:00.604Z [main] .... INFO --- VersionPrinter: Flyway Community Edition 5.0.7 by Boxfuse
2018-10-09T09:42:00.615Z [main] .... INFO --- HikariDataSource: HikariPool-1 - Starting...
2018-10-09T09:42:00.812Z [main] .... INFO --- HikariDataSource: HikariPool-1 - Start completed.
2018-10-09T09:42:00.819Z [main] .... INFO --- DatabaseFactory: Database: jdbc:mariadb://address=(host=galera-mgmt.service.consul)(port=3306)(type=master)/credhub (MySQL 10.1)
2018-10-09T09:42:01.008Z [main] .... INFO --- DbValidate: Successfully validated 65 migrations (execution time 00:00.114s)
2018-10-09T09:42:01.083Z [main] .... INFO --- DbMigrate: Current version of schema `credhub`: 48
2018-10-09T09:42:01.093Z [main] .... INFO --- DbMigrate: Migrating schema `credhub` to version 49 - add path to permission table
2018-10-09T09:42:06.728Z [main] .... WARN --- ProxyConnection: HikariPool-1 - Connection org.mariadb.jdbc.MariaDbConnection@6304101a marked as broken because of SQLSTATE(08), ErrorCode(0)
java.sql.SQLNonTransientConnectionException: (conn=15993114) unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.get(ExceptionMapper.java:175) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.util.exceptions.ExceptionMapper.getException(ExceptionMapper.java:110) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:228) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:334) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.MariaDbStatement.execute(MariaDbStatement.java:386) ~[mariadb-java-client-2.2.1.jar!/:?]
at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:95) ~[HikariCP-2.7.9.jar!/:?]
at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-2.7.9.jar!/:?]
at org.flywaydb.core.internal.util.jdbc.JdbcTemplate.executeStatement(JdbcTemplate.java:265) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.database.StandardSqlStatement.execute(StandardSqlStatement.java:41) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.database.ExecutableSqlScript.execute(ExecutableSqlScript.java:128) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:75) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.doMigrateGroup(DbMigrate.java:363) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.access$400(DbMigrate.java:52) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate$5.call(DbMigrate.java:297) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:75) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.applyMigrations(DbMigrate.java:294) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.migrateGroup(DbMigrate.java:259) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.access$300(DbMigrate.java:52) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate$4.call(DbMigrate.java:179) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate$4.call(DbMigrate.java:176) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.database.mysql.MySQLNamedLockTemplate.execute(MySQLNamedLockTemplate.java:60) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.database.mysql.MySQLConnection.lock(MySQLConnection.java:78) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.schemahistory.JdbcTableSchemaHistory.lock(JdbcTableSchemaHistory.java:148) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.migrateAll(DbMigrate.java:176) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.internal.command.DbMigrate.migrate(DbMigrate.java:145) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1206) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.Flyway$1.execute(Flyway.java:1168) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.Flyway.execute(Flyway.java:1655) ~[flyway-core-5.0.7.jar!/:?]
at org.flywaydb.core.Flyway.migrate(Flyway.java:1168) ~[flyway-core-5.0.7.jar!/:?]
at org.springframework.boot.autoconfigure.flyway.FlywayMigrationInitializer.afterPropertiesSet(FlywayMigrationInitializer.java:66) ~[spring-boot-autoconfigure-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1758) ~[spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1695) ~[spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:573) ~[spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:495) ~[spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) [spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) [spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:304) [spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) [spring-beans-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089) [spring-context-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:859) [spring-context-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) [spring-context-5.0.8.RELEASE.jar!/:5.0.8.RELEASE]
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:398) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:330) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1258) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.4.RELEASE.jar!/:2.0.4.RELEASE]
at org.cloudfoundry.credhub.CredentialManagerApp.main(CredentialManagerApp.java:29) [classes!/:?]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_181]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_181]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_181]
at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_181]
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [credhub.jar:?]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [credhub.jar:?]
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [credhub.jar:?]
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [credhub.jar:?]
Caused by: java.sql.SQLException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
Query is: ALTER TABLE permission
ADD COLUMN path VARCHAR(255)
at org.mariadb.jdbc.internal.util.LogQueryTool.exceptionWithQuery(LogQueryTool.java:119) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:198) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:328) ~[mariadb-java-client-2.2.1.jar!/:?]
... 54 more
Caused by: java.io.EOFException: unexpected end of stream, read 0 bytes from 4 (socket was closed by server)
at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacketArray(StandardPacketInputStream.java:239) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.io.input.StandardPacketInputStream.getPacket(StandardPacketInputStream.java:207) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:1346) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1327) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:195) ~[mariadb-java-client-2.2.1.jar!/:?]
at org.mariadb.jdbc.MariaDbStatement.executeInternal(MariaDbStatement.java:328) ~[mariadb-java-client-2.2.1.jar!/:?]
... 54 more
2018-10-09T09:42:06.739Z [main] .... ERROR --- TransactionTemplate: Unable to rollback transaction
I searched this error with DuckDuckGo and found Migrating from MySql: MariaDB server closing client connections unexpectedly
all the recommended solution were already in place in our setup. For example:
| wait_timeout | 28800 |
Then it must be some Galera replication issue.
(none)> show global variables like '%version%';
+-------------------------+---------------------------+
| Variable_name | Value |
+-------------------------+---------------------------+
| innodb_version | 5.6.39-83.1 |
| protocol_version | 10 |
| slave_type_conversions | |
| version | 10.1.34-MariaDB |
| version_comment | Source distribution |
| version_compile_machine | x86_64 |
| version_compile_os | Linux |
| version_malloc_library | system |
| version_ssl_library | OpenSSL 1.0.1f 6 Jan 2014 |
| wsrep_patch_version | wsrep_25.23 |
+-------------------------+---------------------------+
We use 3 node Galera cluster. With proxy we direct Apps to only one node. The "primary" has no log entries during this time.
node 1:
2018-10-09 9:42:20 140623337528064 [ERROR] Slave SQL: Error 'Duplicate column name 'path'' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
ADD COLUMN path VARCHAR(255)', Internal MariaDB error code: 1060
2018-10-09 9:42:20 140623337528064 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381109243
2018-10-09 9:42:20 140623337528064 [Warning] WSREP: Ignoring error for TO isolated action: source: 9f0f4ed6-aa9f-11e8-88d4-bb61e2d431d5 version: 3 local: 0 state: APPLYING flags: 65 conn_id: 137099 trx_id: -1 seqnos (l: 72883646, g: 381109243, s: 381109168, d: 381109242, ts: 3699202329934779)
2018-10-09 10:32:51 140623337528064 [ERROR] Slave SQL: Error 'Duplicate column name 'path'' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
ADD COLUMN path VARCHAR(255)', Internal MariaDB error code: 1060
2018-10-09 10:32:51 140623337528064 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381173176
2018-10-09 10:32:51 140623337528064 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009494 trx_id: -1 seqnos (l: 72948512, g: 381173176, s: 381173175, d: 381173175, ts: 3702645177012081)
2018-10-09 10:34:30 140623337528064 [ERROR] Slave SQL: Error 'Duplicate column name 'path'' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
ADD COLUMN path VARCHAR(255)', Internal MariaDB error code: 1060
2018-10-09 10:34:30 140623337528064 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381175187
2018-10-09 10:34:30 140623337528064 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009893 trx_id: -1 seqnos (l: 72950553, g: 381175187, s: 381175186, d: 381175186, ts: 3702744192862858)
2018-10-09 10:38:23 140623337528064 [ERROR] Slave SQL: Error 'Can't DROP 'path'; check that column/key exists' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
DROP COLUMN path', Internal MariaDB error code: 1091
2018-10-09 10:38:23 140623337528064 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381180154
2018-10-09 10:38:23 140623337528064 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009214 trx_id: -1 seqnos (l: 72955600, g: 381180154, s: 381180153, d: 381180153, ts: 3702978039461852)
node 2:
2018-10-09 10:32:51 139950574152448 [ERROR] Slave SQL: Error 'Duplicate column name 'path'' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
ADD COLUMN path VARCHAR(255)', Internal MariaDB error code: 1060
2018-10-09 10:32:51 139950574152448 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381173176
2018-10-09 10:32:51 139950574152448 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009494 trx_id: -1 seqnos (l: 72941962, g: 381173176, s: 381173175, d: 381173175, ts: 3702645177012081)
2018-10-09 10:34:30 139950574152448 [ERROR] Slave SQL: Error 'Duplicate column name 'path'' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
ADD COLUMN path VARCHAR(255)', Internal MariaDB error code: 1060
2018-10-09 10:34:30 139950574152448 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381175187
2018-10-09 10:34:30 139950574152448 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009893 trx_id: -1 seqnos (l: 72944003, g: 381175187, s: 381175186, d: 381175186, ts: 3702744192862858)
2018-10-09 10:38:23 139950574152448 [ERROR] Slave SQL: Error 'Can't DROP 'path'; check that column/key exists' on query. Default database: 'credhub'. Query: 'ALTER TABLE permission
DROP COLUMN path', Internal MariaDB error code: 1091
2018-10-09 10:38:23 139950574152448 [Warning] WSREP: RBR event 1 Query apply warning: 1, 381180154
2018-10-09 10:38:23 139950574152448 [Warning] WSREP: Ignoring error for TO isolated action: source: 2e608d33-aa9f-11e8-ad98-87453d4293df version: 3 local: 0 state: APPLYING flags: 65 conn_id: 16009214 trx_id: -1 seqnos (l: 72949050, g: 381180154, s: 381180153, d: 381180153, ts: 3702978039461852)
The table in question is tiny:
MariaDB [credhub]> select count(*) from permission;
+----------+
| count(*) |
+----------+
| 308 |
+----------+
1 row in set (0.00 sec)
MariaDB [credhub]> show create table permission;
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| permission | CREATE TABLE `permission` (
`uuid` binary(16) NOT NULL,
`actor` varchar(255) NOT NULL,
`read_permission` tinyint(1) NOT NULL DEFAULT '0',
`write_permission` tinyint(1) NOT NULL DEFAULT '0',
`delete_permission` tinyint(1) NOT NULL DEFAULT '0',
`read_acl_permission` tinyint(1) NOT NULL DEFAULT '0',
`write_acl_permission` tinyint(1) NOT NULL DEFAULT '0',
`path` varchar(255) NOT NULL,
PRIMARY KEY (`uuid`),
UNIQUE KEY `permission_path_actor_uindex` (`path`,`actor`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
MariaDB [credhub]> SELECT TABLE_NAME AS `Table`, ROUND((DATA_LENGTH + INDEX_LENGTH) / 1024 / 1024) AS `Size (MB)` FROM information_schema.TABLES WHERE TABLE_SCHEMA = "credhub" ORDER BY (DATA_LENGTH + INDEX_LENGTH) DESC;
+------------------------+-----------+
| Table | Size (MB) |
+------------------------+-----------+
| encrypted_value | 7 |
| credential_version | 0 |
| credential | 0 |
| permission | 0 |
| certificate_credential | 0 |
| password_credential | 0 |
| user_credential | 0 |
| flyway_schema_history | 0 |
| encryption_key_canary | 0 |
| rsa_credential | 0 |
| ssh_credential | 0 |
+------------------------+-----------+
11 rows in set (0.01 sec)
Any idea howto fix this issue?