You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beam.apache.org by "Jean-Baptiste Onofré (JIRA)" <ji...@apache.org> on 2016/10/21 04:23:58 UTC
[jira] [Created] (BEAM-793) JdbcIO can create a deadlock when
parallelism is greater than 1
Jean-Baptiste Onofré created BEAM-793:
-----------------------------------------
Summary: JdbcIO can create a deadlock when parallelism is greater than 1
Key: BEAM-793
URL: https://issues.apache.org/jira/browse/BEAM-793
Project: Beam
Issue Type: Bug
Components: sdk-java-extensions
Reporter: Jean-Baptiste Onofré
Assignee: Jean-Baptiste Onofré
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}}.
{code}
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);
}
}));
{code}
This can happen due to the {{autocommit}}. I'm going to investigate.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)