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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 51ed7eebad223105fec15dadf53e133d90a57064
4
- data.tar.gz: 56112be8287c2be5bd5a5b6d9e92308e78ddbdce
2
+ SHA256:
3
+ metadata.gz: f2ca53e4caa266a4e9b4cd1fd5132626259629c1835c6923b8b5b252185884c5
4
+ data.tar.gz: d748f67df1abc442410de913a8b67b600264aeba55cef148ac01b0a7e863a7ce
5
5
  SHA512:
6
- metadata.gz: 48c97055bcef83b22669f8fdff05f29b425ae784bbf9d3efdc1d1e050d2f12fd805a30eca495c0ed9d665e0186f3672fac012874d0c73b403932c9e2b3435fb5
7
- data.tar.gz: 6ffcae7c68b5f27ff30230939049965d619b6ae044bbb713862d30f53ed3a3711b5a561fe4ec656be16b1f547fb513ed99aacb978f9716518d0c312499813c1a
6
+ metadata.gz: 65900548523763e0c448d8ceb8a08fdc96d8404fcef169db0724fc8ef50336a0bd4b50d622371eaf981ecc808d432c70b44b881a044903c7fa2f20bdacf23987
7
+ data.tar.gz: 8d157b0d6e3e82158c4c08c1bfed99e6ccb9c1d6ef287af81e20932c33adc82566a8df239fce2a227eea42b29f991b55499770ab85e87ca61b57afcc94b686d2
@@ -4,15 +4,17 @@ sudo: false
4
4
 
5
5
  env:
6
6
  global:
7
- - CC_TEST_REPORTER_ID=0af2487f1cc190d4a5e23cd76182514e5b62aac5d59b6208a02fd518487b9ed8
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
@@ -1,3 +1,7 @@
1
+ # 0.3.5
2
+ * Fix crash when not waiting for delivery handles
3
+ * Run specs on Ruby 2.5
4
+
1
5
  # 0.3.4
2
6
  * Bump librdkafka to 0.11.3
3
7
 
@@ -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
- delivery_handle = Rdkafka::Producer::DeliveryHandle.new(message[:_private])
158
- delivery_handle[:pending] = false
159
- delivery_handle[:response] = message[:err]
160
- delivery_handle[:partition] = message[:partition]
161
- delivery_handle[:offset] = message[:offset]
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
@@ -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]
@@ -1,4 +1,4 @@
1
1
  module Rdkafka
2
- VERSION = "0.3.4"
2
+ VERSION = "0.3.5"
3
3
  LIBRDKAFKA_VERSION = "0.11.3"
4
4
  end
@@ -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] = 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(:pending) { true }
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(:pending) { false }
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(:pending) { true }
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(:pending) { false }
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(:pending) { false }
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
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: 2017-12-05 00:00:00.000000000 Z
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.6.13
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