embulk-output-aerospike 0.3.1 → 0.3.2

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: 13abe937c76a27f33bc023971f909464cbcb616b
4
- data.tar.gz: 3ad97e3420a42ca3de5af08b1d2c2586d3ad67b8
3
+ metadata.gz: c4a1acaffea6df8cbf6035f159eed41ca0309754
4
+ data.tar.gz: e663c8a6e0d909ecb991eeffc75e8565491b4ea0
5
5
  SHA512:
6
- metadata.gz: 00f36b928015f69e3af871a52fdecfdbbd0d688ebb3d1143c2e8d8f1e7dca9d27467991c16349daebb24c4abc8c0805ef6727a8840ad0b91c300fed39a031c24
7
- data.tar.gz: 94f0b593e7c7e926ba85a613723e1bf95fba2c6d0812bd4e4efee2890848b881dd92ac7df5a39f1a0b4815ac124ff4173019852be89a8f01308ded40a2881d20
6
+ metadata.gz: fe02878851b13d8fc585d93298f90436aedef1135c1b87cc5c90ea0fe01854ba019761189acd8fb20458f369058bc1702727a7e47bdc55d8eb73bc72c639ccae
7
+ data.tar.gz: 2482bb08fa0d7956ea94027f68311b17d4fcde9a260015ac49339ceb92d8c01792ede4c1bcec10c3931e4a15f675ff35b815301849762b71b2c598e610420cbd
data/build.gradle CHANGED
@@ -17,7 +17,7 @@ configurations {
17
17
  provided
18
18
  }
19
19
 
20
- version = "0.3.1"
20
+ version = "0.3.2"
21
21
 
22
22
  dependencies {
23
23
  compile "org.embulk:embulk-core:0.7.5"
@@ -1,5 +1,6 @@
1
1
  package org.embulk.output.aerospike
2
2
 
3
+ import java.util.concurrent.{ CountDownLatch, ConcurrentLinkedQueue }
3
4
  import java.util.concurrent.atomic.AtomicLong
4
5
 
5
6
  import aerospiker._
@@ -16,6 +17,7 @@ import org.embulk.spi.time.Timestamp
16
17
  import scala.collection.concurrent.TrieMap
17
18
  import scala.collection.mutable.{ Map => MMap, ListBuffer }
18
19
  import scala.collection.JavaConversions._
20
+ import scalaz.{ \/-, -\/ }
19
21
  import scalaz.concurrent.Task
20
22
  import scalaz.stream._
21
23
 
@@ -134,53 +136,63 @@ class AerospikePageOutput(taskSource: TaskSource, schema: Schema, taskIndex: Int
134
136
  }
135
137
 
136
138
  val updater: Sink[Task, Seq[Map[String, Any]]] = sink.lift[Task, Seq[Map[String, Any]]] { records =>
137
- val t = Task.gatherUnordered {
138
- records map { record =>
139
- val keyObj = record.getOrElse(tsk.getKeyName.get, "")
140
- val deRec = record - tsk.getKeyName.get
141
- if (tsk.getSingleBinName.isPresent)
142
- aerospike.put(keyObj.toString, Map(tsk.getSingleBinName.get() -> deRec))
143
- else
144
- aerospike.put(keyObj.toString, deRec)
145
- }
146
- } run
139
+ val latch = new CountDownLatch(records.size)
140
+ val queue = new ConcurrentLinkedQueue[Throwable Xor String]()
141
+ records foreach { record =>
142
+ val keyObj = record.getOrElse(tsk.getKeyName.get, "")
143
+ val deRec = record - tsk.getKeyName.get
144
+ if (tsk.getSingleBinName.isPresent)
145
+ aerospike.put(keyObj.toString, Map(tsk.getSingleBinName.get() -> deRec)) runAsync {
146
+ case -\/(e) => queue.add(Xor.left(e)); latch.countDown()
147
+ case \/-(r) => queue.add(r); latch.countDown()
148
+ }
149
+ else
150
+ aerospike.put(keyObj.toString, deRec) runAsync {
151
+ case -\/(e) => queue.add(Xor.left(e)); latch.countDown()
152
+ case \/-(r) => queue.add(r); latch.countDown()
153
+ }
154
+ }
155
+
156
+ latch.await()
147
157
 
148
158
  Task.delay {
149
- for ( r <- t ) {
150
- r match {
151
- case Left(e @ PutError(key, cause)) =>
152
- log.error(e.toString, e)
153
- failures += key -> cause.getMessage
154
- failCount.addAndGet(1L)
155
- case Left(e) =>
156
- log.error(e.toString, e)
157
- failures += e.getMessage -> e.getMessage
158
- failCount.addAndGet(1L)
159
- case Right(_) =>
160
- successCount.addAndGet(1L)
161
- }
159
+ queue foreach {
160
+ case Left(e @ PutError(key, cause)) =>
161
+ log.error(e.toString, e)
162
+ failures += key -> cause.getMessage
163
+ failCount.addAndGet(1L)
164
+ case Left(e) =>
165
+ log.error(e.toString, e)
166
+ failures += e.getMessage -> e.getMessage
167
+ failCount.addAndGet(1L)
168
+ case Right(_) =>
169
+ successCount.addAndGet(1L)
162
170
  }
163
171
  }
164
172
  }
165
173
 
166
174
  val deleter: Sink[Task, Seq[Map[String, Any]]] = sink.lift[Task, Seq[Map[String, Any]]] { records =>
167
- val t = Task.gatherUnordered {
168
- records map { record =>
169
- val keyObj = record.getOrElse(tsk.getKeyName.get, "")
170
- aerospike.delete(keyObj.toString)
175
+ val latch = new CountDownLatch(records.size)
176
+ val queue = new ConcurrentLinkedQueue[DeleteError Xor Boolean]()
177
+ records foreach { record =>
178
+ val keyObj = record.getOrElse(tsk.getKeyName.get, "")
179
+ val key = keyObj.toString
180
+ aerospike.delete(key) runAsync {
181
+ case -\/(e) => queue.add(Xor.left(DeleteError(key, e))); latch.countDown()
182
+ case \/-(r) => queue.add(r); latch.countDown()
171
183
  }
172
- } run
184
+ }
185
+
186
+ latch.await()
173
187
 
174
188
  Task.delay {
175
- for ( r <- t ) {
176
- r match {
177
- case Left(DeleteError(key, cause)) =>
178
- log.error(key, cause)
179
- failures += key -> cause.getMessage
180
- failCount.addAndGet(1L)
181
- case Right(_) =>
182
- successCount.addAndGet(1L)
183
- }
189
+ queue foreach {
190
+ case Left(DeleteError(key, cause)) =>
191
+ log.error(key, cause)
192
+ failures += key -> cause.getMessage
193
+ failCount.addAndGet(1L)
194
+ case Right(_) =>
195
+ successCount.addAndGet(1L)
184
196
  }
185
197
  }
186
198
  }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-aerospike
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takeru Sato
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-19 00:00:00.000000000 Z
11
+ date: 2015-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -77,7 +77,7 @@ files:
77
77
  - classpath/circe-jawn_2.11-0.1.1.jar
78
78
  - classpath/commons-math3-3.2.jar
79
79
  - classpath/discipline_2.11-0.3.jar
80
- - classpath/embulk-output-aerospike-0.3.1.jar
80
+ - classpath/embulk-output-aerospike-0.3.2.jar
81
81
  - classpath/gnu-crypto-2.0.1.jar
82
82
  - classpath/jawn-parser_2.11-0.8.0.jar
83
83
  - classpath/jbcrypt-0.3m.jar