embulk-output-jdbc 0.8.3 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c01d9d1c8f2babb4d908929c0118a5a9c28d87f
4
- data.tar.gz: c16e74184b0f5a59b8cac366bcfca99e5a38cb1c
3
+ metadata.gz: 9ac7ae92de373b40dfa5153d7d3e0e3bf3f99600
4
+ data.tar.gz: eea167726affb1c31c282cc9aee5c2b45c445d67
5
5
  SHA512:
6
- metadata.gz: 5a3b33623d041ced79d8c4cb885ddbe8505da46395cb1953523874e58b4eb8a630eed4e9ca8a6c16eb4051bc44dd2c973dbb6cad3f6023daebddf8892eabaffa
7
- data.tar.gz: 3df9712d68feca663e6bcbf053c8856ee2dc8779a80515da63457040a7bf0261d1a018e50eac461d10dd0fe4ba408c8e20bd58a4bfefbc6d076f7926f187d79f
6
+ metadata.gz: 48698e261cc369c0c594a4f7e50c9768e22b1ed6e527669688c95ec6d5dc0e8b8e1f7c114f18e15a77e1066334a966aa5aecd756cc627b2e8da533aff00e635b
7
+ data.tar.gz: f872b344503f72a42428fe20437ca9528cee34ad66db9d402be58806bf1ca2c71d0fbb210cd80bf300f2717e589f0ea869d1ecb9b87109f3397d4a073acd1fa2
@@ -15,6 +15,7 @@ import java.net.URL;
15
15
  import java.nio.charset.Charset;
16
16
  import java.nio.file.Path;
17
17
  import java.nio.file.Paths;
18
+ import java.sql.Statement;
18
19
  import java.sql.Types;
19
20
  import java.sql.ResultSet;
20
21
  import java.sql.DatabaseMetaData;
@@ -1200,12 +1201,18 @@ public abstract class AbstractJdbcOutputPlugin
1200
1201
  protected void retryColumnsSetters() throws IOException, SQLException
1201
1202
  {
1202
1203
  int size = columnVisitors.size();
1204
+ int[] updateCounts = batch.getLastUpdateCounts();
1205
+ int index = 0;
1203
1206
  for (Record record : pageReader.getReadRecords()) {
1204
- for (int i = 0; i < size; i++) {
1205
- ColumnSetterVisitor columnVisitor = new ColumnSetterVisitor(record, columnSetters.get(i));
1206
- columns.get(i).visit(columnVisitor);
1207
+ // retry failed records
1208
+ if (index >= updateCounts.length || updateCounts[index] == Statement.EXECUTE_FAILED) {
1209
+ for (int i = 0; i < size; i++) {
1210
+ ColumnSetterVisitor columnVisitor = new ColumnSetterVisitor(record, columnSetters.get(i));
1211
+ columns.get(i).visit(columnVisitor);
1212
+ }
1213
+ batch.add();
1207
1214
  }
1208
- batch.add();
1215
+ index++;
1209
1216
  }
1210
1217
  }
1211
1218
  }
@@ -18,6 +18,9 @@ public interface BatchInsert
18
18
 
19
19
  public void flush() throws IOException, SQLException;
20
20
 
21
+ // should be implemented for retry
22
+ public int[] getLastUpdateCounts();
23
+
21
24
  public void finish() throws IOException, SQLException;
22
25
 
23
26
  public void setNull(int sqlType) throws IOException, SQLException;
@@ -3,6 +3,7 @@ package org.embulk.output.jdbc;
3
3
  import java.util.Calendar;
4
4
  import java.io.IOException;
5
5
  import java.math.BigDecimal;
6
+ import java.sql.BatchUpdateException;
6
7
  import java.sql.PreparedStatement;
7
8
  import java.sql.SQLException;
8
9
  import java.sql.Date;
@@ -26,6 +27,7 @@ public class StandardBatchInsert
26
27
  private int batchWeight;
27
28
  private int batchRows;
28
29
  private long totalRows;
30
+ private int[] lastUpdateCounts;
29
31
 
30
32
  public StandardBatchInsert(JdbcOutputConnector connector, Optional<MergeConfig> mergeConfig) throws IOException, SQLException
31
33
  {
@@ -70,17 +72,24 @@ public class StandardBatchInsert
70
72
 
71
73
  public void flush() throws IOException, SQLException
72
74
  {
75
+ lastUpdateCounts = new int[]{};
76
+
73
77
  if (batchWeight == 0) return;
74
78
 
75
79
  logger.info(String.format("Loading %,d rows", batchRows));
76
80
  long startTime = System.currentTimeMillis();
77
81
  try {
78
- batch.executeBatch(); // here can't use returned value because MySQL Connector/J returns SUCCESS_NO_INFO as a batch result
82
+ lastUpdateCounts = batch.executeBatch(); // here can't use returned value because MySQL Connector/J returns SUCCESS_NO_INFO as a batch result
79
83
  double seconds = (System.currentTimeMillis() - startTime) / 1000.0;
80
84
 
81
85
  totalRows += batchRows;
82
86
  logger.info(String.format("> %.2f seconds (loaded %,d rows in total)", seconds, totalRows));
83
87
 
88
+ } catch (BatchUpdateException e) {
89
+ // will be used for retry
90
+ lastUpdateCounts = e.getUpdateCounts();
91
+ throw e;
92
+
84
93
  } finally {
85
94
  // clear for retry
86
95
  batch.clearBatch();
@@ -89,6 +98,12 @@ public class StandardBatchInsert
89
98
  }
90
99
  }
91
100
 
101
+ @Override
102
+ public int[] getLastUpdateCounts()
103
+ {
104
+ return lastUpdateCounts;
105
+ }
106
+
92
107
  public void finish() throws IOException, SQLException
93
108
  {
94
109
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-jdbc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-07 00:00:00.000000000 Z
11
+ date: 2019-05-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -19,7 +19,7 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - classpath/embulk-output-jdbc-0.8.3.jar
22
+ - classpath/embulk-output-jdbc-0.8.4.jar
23
23
  - lib/embulk/output/jdbc.rb
24
24
  - src/main/java/org/embulk/output/JdbcOutputPlugin.java
25
25
  - src/main/java/org/embulk/output/jdbc/AbstractJdbcOutputConnector.java