Details
-
Bug
-
Status: Resolved
-
P3
-
Resolution: Fixed
-
None
-
None
Description
With the following JdbcIO configuration, if the parallelism is greater than 1, we can have a Deadlock found when trying to get lock; try restarting transaction.
MysqlDataSource dbCfg = new MysqlDataSource(); dbCfg.setDatabaseName("db"); dbCfg.setUser("user"); dbCfg.setPassword("pass"); dbCfg.setServerName("localhost"); dbCfg.setPortNumber(3306); p.apply(Create.of(data)) .apply(JdbcIO.<Tuple5<Integer, Integer, ByteString, Long, Long>>write() .withDataSourceConfiguration(JdbcIO.DataSourceConfiguration.create(dbCfg)) .withStatement("INSERT INTO smth(loc,event_type,hash,begin_date,end_date) VALUES(?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE event_type=VALUES(event_type),end_date=VALUES(end_date)") .withPreparedStatementSetter(new JdbcIO.PreparedStatementSetter<Tuple5<Integer, Integer, ByteString, Long, Long>>() { public void setParameters(Tuple5<Integer, Integer, ByteString, Long, Long> element, PreparedStatement statement) throws Exception { statement.setInt(1, element.f0); statement.setInt(2, element.f1); statement.setBytes(3, element.f2.toByteArray()); statement.setLong(4, element.f3); statement.setLong(5, element.f4); } }));
This can happen due to the autocommit. I'm going to investigate.
Attachments
Issue Links
- links to