rdkafka 0.3.4 → 0.3.5
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 +5 -5
- data/.travis.yml +4 -1
- data/CHANGELOG.md +4 -0
- data/lib/rdkafka/bindings.rb +7 -5
- data/lib/rdkafka/producer.rb +2 -0
- data/lib/rdkafka/producer/delivery_handle.rb +10 -0
- data/lib/rdkafka/version.rb +1 -1
- data/spec/rdkafka/producer/delivery_handle_spec.rb +18 -6
- data/spec/rdkafka/producer_spec.rb +29 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f2ca53e4caa266a4e9b4cd1fd5132626259629c1835c6923b8b5b252185884c5
|
4
|
+
data.tar.gz: d748f67df1abc442410de913a8b67b600264aeba55cef148ac01b0a7e863a7ce
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65900548523763e0c448d8ceb8a08fdc96d8404fcef169db0724fc8ef50336a0bd4b50d622371eaf981ecc808d432c70b44b881a044903c7fa2f20bdacf23987
|
7
|
+
data.tar.gz: 8d157b0d6e3e82158c4c08c1bfed99e6ccb9c1d6ef287af81e20932c33adc82566a8df239fce2a227eea42b29f991b55499770ab85e87ca61b57afcc94b686d2
|
data/.travis.yml
CHANGED
@@ -4,15 +4,17 @@ sudo: false
|
|
4
4
|
|
5
5
|
env:
|
6
6
|
global:
|
7
|
-
- CC_TEST_REPORTER_ID=
|
7
|
+
- CC_TEST_REPORTER_ID=9f7f740ac1b6e264e1189fa07a6687a87bcdb9f3c0f4199d4344ab3b538e187e
|
8
8
|
|
9
9
|
rvm:
|
10
10
|
- 2.1
|
11
11
|
- 2.2
|
12
12
|
- 2.3
|
13
13
|
- 2.4
|
14
|
+
- 2.5
|
14
15
|
|
15
16
|
before_install:
|
17
|
+
- gem update --system
|
16
18
|
- wget http://www.us.apache.org/dist/kafka/1.0.0/kafka_2.12-1.0.0.tgz -O kafka.tgz
|
17
19
|
- mkdir -p kafka && tar xzf kafka.tgz -C kafka --strip-components 1
|
18
20
|
- nohup bash -c "cd kafka && bin/zookeeper-server-start.sh config/zookeeper.properties &"
|
@@ -30,3 +32,4 @@ script:
|
|
30
32
|
|
31
33
|
after_script:
|
32
34
|
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
35
|
+
- killall -9 java
|
data/CHANGELOG.md
CHANGED
data/lib/rdkafka/bindings.rb
CHANGED
@@ -154,11 +154,13 @@ module Rdkafka
|
|
154
154
|
:void, [:pointer, :pointer, :pointer]
|
155
155
|
) do |client_ptr, message_ptr, opaque_ptr|
|
156
156
|
message = Message.new(message_ptr)
|
157
|
-
|
158
|
-
delivery_handle
|
159
|
-
|
160
|
-
|
161
|
-
|
157
|
+
delivery_handle_ptr_address = message[:_private].address
|
158
|
+
if delivery_handle = Rdkafka::Producer::DeliveryHandle.remove(delivery_handle_ptr_address)
|
159
|
+
delivery_handle[:pending] = false
|
160
|
+
delivery_handle[:response] = message[:err]
|
161
|
+
delivery_handle[:partition] = message[:partition]
|
162
|
+
delivery_handle[:offset] = message[:offset]
|
163
|
+
end
|
162
164
|
end
|
163
165
|
end
|
164
166
|
end
|
data/lib/rdkafka/producer.rb
CHANGED
@@ -69,6 +69,7 @@ module Rdkafka
|
|
69
69
|
delivery_handle[:response] = -1
|
70
70
|
delivery_handle[:partition] = -1
|
71
71
|
delivery_handle[:offset] = -1
|
72
|
+
DeliveryHandle.register(delivery_handle.to_ptr.address, delivery_handle)
|
72
73
|
|
73
74
|
# Produce the message
|
74
75
|
response = Rdkafka::Bindings.rd_kafka_producev(
|
@@ -85,6 +86,7 @@ module Rdkafka
|
|
85
86
|
|
86
87
|
# Raise error if the produce call was not successfull
|
87
88
|
if response != 0
|
89
|
+
DeliveryHandle.remove(delivery_handle.to_ptr.address)
|
88
90
|
raise RdkafkaError.new(response)
|
89
91
|
end
|
90
92
|
|
@@ -8,6 +8,16 @@ module Rdkafka
|
|
8
8
|
:partition, :int,
|
9
9
|
:offset, :int64
|
10
10
|
|
11
|
+
REGISTRY = {}
|
12
|
+
|
13
|
+
def self.register(address, handle)
|
14
|
+
REGISTRY[address] = handle
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.remove(address)
|
18
|
+
REGISTRY.delete(address)
|
19
|
+
end
|
20
|
+
|
11
21
|
# Whether the delivery handle is still pending.
|
12
22
|
#
|
13
23
|
# @return [Boolean]
|
data/lib/rdkafka/version.rb
CHANGED
@@ -2,18 +2,30 @@ require "spec_helper"
|
|
2
2
|
|
3
3
|
describe Rdkafka::Producer::DeliveryHandle do
|
4
4
|
let(:response) { 0 }
|
5
|
+
|
5
6
|
subject do
|
6
7
|
Rdkafka::Producer::DeliveryHandle.new.tap do |handle|
|
7
|
-
handle[:pending] =
|
8
|
+
handle[:pending] = pending_handle
|
8
9
|
handle[:response] = response
|
9
10
|
handle[:partition] = 2
|
10
11
|
handle[:offset] = 100
|
11
12
|
end
|
12
13
|
end
|
13
14
|
|
15
|
+
describe ".register and .remove" do
|
16
|
+
let(:pending_handle) { true }
|
17
|
+
|
18
|
+
it "should register and remove a delivery handle" do
|
19
|
+
Rdkafka::Producer::DeliveryHandle.register(subject.to_ptr.address, subject)
|
20
|
+
removed = Rdkafka::Producer::DeliveryHandle.remove(subject.to_ptr.address)
|
21
|
+
expect(removed).to eq subject
|
22
|
+
expect(Rdkafka::Producer::DeliveryHandle::REGISTRY).to be_empty
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
14
26
|
describe "#pending?" do
|
15
27
|
context "when true" do
|
16
|
-
let(:
|
28
|
+
let(:pending_handle) { true }
|
17
29
|
|
18
30
|
it "should be true" do
|
19
31
|
expect(subject.pending?).to be true
|
@@ -21,7 +33,7 @@ describe Rdkafka::Producer::DeliveryHandle do
|
|
21
33
|
end
|
22
34
|
|
23
35
|
context "when not true" do
|
24
|
-
let(:
|
36
|
+
let(:pending_handle) { false }
|
25
37
|
|
26
38
|
it "should be false" do
|
27
39
|
expect(subject.pending?).to be false
|
@@ -30,7 +42,7 @@ describe Rdkafka::Producer::DeliveryHandle do
|
|
30
42
|
end
|
31
43
|
|
32
44
|
describe "#wait" do
|
33
|
-
let(:
|
45
|
+
let(:pending_handle) { true }
|
34
46
|
|
35
47
|
it "should wait until the timeout and then raise an error" do
|
36
48
|
expect {
|
@@ -39,7 +51,7 @@ describe Rdkafka::Producer::DeliveryHandle do
|
|
39
51
|
end
|
40
52
|
|
41
53
|
context "when not pending anymore and no error" do
|
42
|
-
let(:
|
54
|
+
let(:pending_handle) { false }
|
43
55
|
|
44
56
|
it "should return a delivery report" do
|
45
57
|
report = subject.wait
|
@@ -57,7 +69,7 @@ describe Rdkafka::Producer::DeliveryHandle do
|
|
57
69
|
end
|
58
70
|
|
59
71
|
context "when not pending anymore and there was an error" do
|
60
|
-
let(:
|
72
|
+
let(:pending_handle) { false }
|
61
73
|
let(:response) { 20 }
|
62
74
|
|
63
75
|
it "should raise an rdkafka error" do
|
@@ -3,6 +3,11 @@ require "spec_helper"
|
|
3
3
|
describe Rdkafka::Producer do
|
4
4
|
let(:producer) { rdkafka_config.producer }
|
5
5
|
|
6
|
+
after do
|
7
|
+
# Registry should always end up being empty
|
8
|
+
expect(Rdkafka::Producer::DeliveryHandle::REGISTRY).to be_empty
|
9
|
+
end
|
10
|
+
|
6
11
|
it "should require a topic" do
|
7
12
|
expect {
|
8
13
|
producer.produce(
|
@@ -138,6 +143,27 @@ describe Rdkafka::Producer do
|
|
138
143
|
expect(message.payload).to be_nil
|
139
144
|
end
|
140
145
|
|
146
|
+
it "should produce message that aren't waited for and not crash" do
|
147
|
+
5.times do
|
148
|
+
200.times do
|
149
|
+
producer.produce(
|
150
|
+
topic: "produce_test_topic",
|
151
|
+
payload: "payload not waiting",
|
152
|
+
key: "key not waiting"
|
153
|
+
)
|
154
|
+
end
|
155
|
+
|
156
|
+
# Allow some time for a GC run
|
157
|
+
sleep 1
|
158
|
+
end
|
159
|
+
|
160
|
+
# Wait for the delivery notifications
|
161
|
+
10.times do
|
162
|
+
break if Rdkafka::Producer::DeliveryHandle::REGISTRY.empty?
|
163
|
+
sleep 1
|
164
|
+
end
|
165
|
+
end
|
166
|
+
|
141
167
|
it "should raise an error when producing fails" do
|
142
168
|
expect(Rdkafka::Bindings).to receive(:rd_kafka_producev).and_return(20)
|
143
169
|
|
@@ -158,5 +184,8 @@ describe Rdkafka::Producer do
|
|
158
184
|
expect {
|
159
185
|
handle.wait(0)
|
160
186
|
}.to raise_error Rdkafka::Producer::DeliveryHandle::WaitTimeoutError
|
187
|
+
|
188
|
+
# Waiting a second time should work
|
189
|
+
handle.wait(5)
|
161
190
|
end
|
162
191
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdkafka
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thijs Cadier
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -155,7 +155,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
155
155
|
version: '0'
|
156
156
|
requirements: []
|
157
157
|
rubyforge_project:
|
158
|
-
rubygems_version: 2.
|
158
|
+
rubygems_version: 2.7.3
|
159
159
|
signing_key:
|
160
160
|
specification_version: 4
|
161
161
|
summary: Kafka client library wrapping librdkafka using the ffi gem and futures from
|