embulk-output-mailchimp 0.3.22 → 0.3.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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