embulk-output-mailchimp 0.3.22 → 0.3.23

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: 4fc26e821ca35cc96b7cb4b5525f53dd73643e2c
4
- data.tar.gz: b895e9c6c3936faa4f07689cb270b3d312326d08
3
+ metadata.gz: f18ee80430139a3e22677d7e18e3fd80eed89665
4
+ data.tar.gz: 1c3ebcd7abeaae441d926103f0920ca7d5d6ac6d
5
5
  SHA512:
6
- metadata.gz: f0e97a31cd7b726fc993c9b96c79ff244e5b885ac9de3d68e2503c6beb2def9d5e2ad045c6c472fd58cfe8c7b61172ef56a4c4acde6fa62bdb841e017648780f
7
- data.tar.gz: eb162f943bebab1a3f83c584659d5ac092dc4c057b787c8e44e15fb370e40c9bdfee179770cf59f9d5da29a32833ab07145af7672cf38f67349450cf8008215a
6
+ metadata.gz: ae75be9b1e060a13d6f0bcb4dfa71cea026f653832944bbcfd023df5987b819407decfac00fbdb84c8f31431c7c30dfe1dd8f2b16dcfa47f813ada7a93ba8a64
7
+ data.tar.gz: 960ede6f290226c7f35d3d2554175669e14db0a2ecc8ec89f87a8e2548b63f4438b54651f1e04a5a4122853709473a8a15acbae35e5f9e654cda87a62b062200
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  dist: precise
2
2
  language: java
3
3
  jdk:
4
- - openjdk7
4
+ - oraclejdk8
5
5
  script:
6
6
  - ./gradlew clean checkstyle check jacocoTestReport
7
7
  addons:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 0.3.23 - 2018-09-12
2
+ - Introduce an option to fail the job when there is an error returning from Mailchimp. Previous versions marked the job as success with
3
+ detail error in log
1
4
  ## 0.3.22 - 2018-03-07
2
5
  - Fixed bug NPE when checking interest categories [#41](https://github.com/treasure-data/embulk-output-mailchimp/pull/41)
3
6
 
data/README.md CHANGED
@@ -25,6 +25,7 @@ add e-mail to List in MailChimp.
25
25
  - **grouping_columns**: Array for group names in MailChimp dashboard(array, default: nil)
26
26
  - **language_column**: column name for language (string, optional, default: nil)
27
27
  - **double_optin**: control whether to send an opt-in confirmation email (boolean, default: true)
28
+ - **atomic_upsert** : Control the atomicity for the job. Job will be marked as success only when there is no error from Mailchimp. Default as false.
28
29
  - **max_records_per_request**: The max records per batch request. MailChimp API enables max records is 500 per batch request (int, default: 500)
29
30
  - **sleep_between_requests_millis**: The time to sleep between requests to avoid flood MailChimp API (int, default: 3000)
30
31
 
@@ -38,6 +39,7 @@ out:
38
39
  list_id: 'XXXXXXXXXX'
39
40
  update_existing: false
40
41
  double_optin: false
42
+ atomic_upsert: false
41
43
  email_column: e-mail
42
44
  fname_column: first name
43
45
  lname_column: lname
data/build.gradle CHANGED
@@ -18,7 +18,7 @@ configurations {
18
18
  provided
19
19
  }
20
20
 
21
- version = "0.3.22"
21
+ version = "0.3.23"
22
22
 
23
23
  sourceCompatibility = 1.7
24
24
  targetCompatibility = 1.7
@@ -1,6 +1,7 @@
1
1
  package org.embulk.output.mailchimp;
2
2
 
3
3
  import com.google.common.base.Optional;
4
+ import com.google.common.base.Throwables;
4
5
  import org.embulk.base.restclient.RestClientOutputPluginDelegate;
5
6
  import org.embulk.base.restclient.RestClientOutputTaskBase;
6
7
  import org.embulk.base.restclient.jackson.JacksonServiceRequestMapper;
@@ -13,6 +14,7 @@ import org.embulk.config.ConfigDiff;
13
14
  import org.embulk.config.ConfigException;
14
15
  import org.embulk.config.TaskReport;
15
16
  import org.embulk.output.mailchimp.model.AuthMethod;
17
+ import org.embulk.spi.DataException;
16
18
  import org.embulk.spi.Exec;
17
19
  import org.embulk.spi.Schema;
18
20
  import org.slf4j.Logger;
@@ -96,6 +98,10 @@ public class MailChimpOutputPluginDelegate
96
98
  @ConfigDefault("false")
97
99
  boolean getUpdateExisting();
98
100
 
101
+ @Config("atomic_upsert")
102
+ @ConfigDefault("false")
103
+ boolean getAtomicUpsert();
104
+
99
105
  @Config("replace_interests")
100
106
  @ConfigDefault("true")
101
107
  boolean getReplaceInterests();
@@ -146,6 +152,9 @@ public class MailChimpOutputPluginDelegate
146
152
  if (!checkExistColumns(schema, task.getEmailColumn(), task.getFnameColumn(), task.getLnameColumn())) {
147
153
  throw new ConfigException("Columns ['email', 'fname', 'lname'] must not be null or empty string");
148
154
  }
155
+ if (task.getAtomicUpsert()) {
156
+ LOG.info(" Treating upsert as atomic operation");
157
+ }
149
158
  }
150
159
 
151
160
  @Override
@@ -167,14 +176,21 @@ public class MailChimpOutputPluginDelegate
167
176
  final List<TaskReport> taskReports)
168
177
  {
169
178
  long totalInserted = 0;
179
+ int totalError = 0;
170
180
  for (TaskReport taskReport : taskReports) {
171
181
  if (taskReport.has("pushed")) {
172
182
  totalInserted += taskReport.get(Long.class, "pushed");
173
183
  }
184
+ if (taskReport.has("error_count")) {
185
+ totalError += taskReport.get(Integer.class, "error_count");
186
+ }
174
187
  }
175
-
176
188
  LOG.info("Pushed completed. {} records", totalInserted);
177
-
189
+ // When atomic upsert is true, client expects all records are done properly.
190
+ if (task.getAtomicUpsert() && totalError > 0) {
191
+ LOG.info("Job requires atomic operation for all records. And there were {} errors in processing => Error as job's status", totalError);
192
+ throw Throwables.propagate(new DataException("Some records are not properly processed at MailChimp. See log for detail"));
193
+ }
178
194
  return Exec.newConfigDiff();
179
195
  }
180
196
  }
@@ -54,6 +54,7 @@ public class MailChimpRecordBuffer
54
54
  private final ObjectMapper mapper;
55
55
  private final Schema schema;
56
56
  private int requestCount;
57
+ private int errorCount;
57
58
  private long totalCount;
58
59
  private List<JsonNode> records;
59
60
  private Map<String, Map<String, InterestResponse>> categories;
@@ -129,8 +130,7 @@ public class MailChimpRecordBuffer
129
130
  uniqueRecords = new ArrayList<>();
130
131
  duplicatedRecords = new ArrayList<>();
131
132
  }
132
-
133
- return Exec.newTaskReport().set("pushed", totalCount);
133
+ return Exec.newTaskReport().set("pushed", totalCount).set("error_count", errorCount);
134
134
  }
135
135
  catch (JsonProcessingException jpe) {
136
136
  throw new DataException(jpe);
@@ -304,6 +304,7 @@ public class MailChimpRecordBuffer
304
304
  records.size(), reportResponse.getTotalCreated(),
305
305
  reportResponse.getTotalUpdated(),
306
306
  reportResponse.getErrorCount(), System.currentTimeMillis() - startTime);
307
+ errorCount += reportResponse.getErrors().size();
307
308
  mailChimpClient.handleErrors(reportResponse.getErrors());
308
309
 
309
310
  mailChimpClient.avoidFloodAPI("Process next request", task.getSleepBetweenRequestsMillis());
@@ -98,6 +98,12 @@ public class TestMailChimpOutputPlugin
98
98
  ConfigSource config = baseConfig.set("list_id", "");
99
99
  doSetUpSchemaAndRun(config, plugin);
100
100
  }
101
+ @Test(expected = ConfigException.class)
102
+ public void test_config_atomicUpsert()
103
+ {
104
+ ConfigSource config = baseConfig.set("atomic_upsert", true);
105
+ doSetUpSchemaAndRun(config, plugin);
106
+ }
101
107
 
102
108
  @Test(expected = ConfigException.class)
103
109
  public void test_config_invalidWithColumnEmailRequires()
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-mailchimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.22
4
+ version: 0.3.23
5
5
  platform: ruby
6
6
  authors:
7
7
  - Thang Nguyen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-07 00:00:00.000000000 Z
11
+ date: 2018-09-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
15
- version_requirements: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ~>
18
- - !ruby/object:Gem::Version
19
- version: '1.0'
20
14
  requirement: !ruby/object:Gem::Requirement
21
15
  requirements:
22
16
  - - ~>
23
17
  - !ruby/object:Gem::Version
24
18
  version: '1.0'
19
+ name: bundler
25
20
  prerelease: false
26
21
  type: :development
27
- - !ruby/object:Gem::Dependency
28
- name: rake
29
22
  version_requirements: !ruby/object:Gem::Requirement
30
23
  requirements:
31
- - - '>='
24
+ - - ~>
32
25
  - !ruby/object:Gem::Version
33
- version: '10.0'
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
30
  - - '>='
37
31
  - !ruby/object:Gem::Version
38
32
  version: '10.0'
33
+ name: rake
39
34
  prerelease: false
40
35
  type: :development
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
41
  description: Dumps records to MailChimp.
42
42
  email:
43
43
  - thang@treasure-data.com
@@ -88,13 +88,13 @@ files:
88
88
  - test/embulk/output/test_mailchimp.rb
89
89
  - test/override_assert_raise.rb
90
90
  - test/run-test.rb
91
- - classpath/jetty-io-9.2.14.v20151106.jar
92
- - classpath/jetty-util-9.2.14.v20151106.jar
93
- - classpath/embulk-output-mailchimp-0.3.22.jar
94
- - classpath/jetty-http-9.2.14.v20151106.jar
95
- - classpath/jetty-client-9.2.14.v20151106.jar
96
91
  - classpath/embulk-base-restclient-0.5.3.jar
92
+ - classpath/embulk-output-mailchimp-0.3.23.jar
97
93
  - classpath/embulk-util-retryhelper-jetty92-0.5.3.jar
94
+ - classpath/jetty-client-9.2.14.v20151106.jar
95
+ - classpath/jetty-http-9.2.14.v20151106.jar
96
+ - classpath/jetty-io-9.2.14.v20151106.jar
97
+ - classpath/jetty-util-9.2.14.v20151106.jar
98
98
  homepage: https://github.com/treasure-data/embulk-output-mailchimp
99
99
  licenses:
100
100
  - MIT