rdkafka 0.3.1 → 0.3.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -0
- data/lib/rdkafka/consumer.rb +2 -2
- data/lib/rdkafka/consumer/topic_partition_list.rb +7 -1
- data/lib/rdkafka/error.rb +9 -3
- data/lib/rdkafka/version.rb +1 -1
- data/spec/rdkafka/consumer/topic_partition_list_spec.rb +25 -0
- data/spec/rdkafka/error_spec.rb +28 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67acc1069396798fdb93129b30145d277af826c3
|
4
|
+
data.tar.gz: 664621fc32610b18703d393c34e72d64d7f34527
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 471c14981fe5ba4c4b2a14d724236d498d483cb02b4f93c75217be5455e0c14c2bef319b5186ffd2b74504dfe5175c9727776d28493d4f9b0da2a335572b90b6
|
7
|
+
data.tar.gz: ee82ae7f498c4fbcb553df0368f9a3bcb9df1045b7b413e1cab6aff70a5f93fb57e309f5abb096cc8886b9393cda88dc444f6eed9ed828714bd6bb12933a0e5f
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
# 0.3.2
|
2
|
+
* `add_topic` now supports using a partition count
|
3
|
+
* Add way to make errors clearer with an extra message
|
4
|
+
* Show topics in subscribe error message
|
5
|
+
* Show partition and topic in query watermark offsets error message
|
6
|
+
|
1
7
|
# 0.3.1
|
2
8
|
* Bump librdkafka to 0.11.1
|
3
9
|
* Officially support ranges in `add_topic` for topic partition list.
|
data/lib/rdkafka/consumer.rb
CHANGED
@@ -39,7 +39,7 @@ module Rdkafka
|
|
39
39
|
# Subscribe to topic partition list and check this was successful
|
40
40
|
response = Rdkafka::Bindings.rd_kafka_subscribe(@native_kafka, tpl)
|
41
41
|
if response != 0
|
42
|
-
raise Rdkafka::RdkafkaError.new(response)
|
42
|
+
raise Rdkafka::RdkafkaError.new(response, "Error subscribing to '#{topics.join(', ')}'")
|
43
43
|
end
|
44
44
|
ensure
|
45
45
|
# Clean up the topic partition list
|
@@ -117,7 +117,7 @@ module Rdkafka
|
|
117
117
|
timeout_ms
|
118
118
|
)
|
119
119
|
if response != 0
|
120
|
-
raise Rdkafka::RdkafkaError.new(response)
|
120
|
+
raise Rdkafka::RdkafkaError.new(response, "Error querying watermark offsets for partition #{partition} of #{topic}")
|
121
121
|
end
|
122
122
|
|
123
123
|
return low.read_int64, high.read_int64
|
@@ -37,11 +37,17 @@ module Rdkafka
|
|
37
37
|
# @example Add a topic with assigned partitions
|
38
38
|
# tpl.add_topic("topic", (0..8))
|
39
39
|
#
|
40
|
+
# @example Add a topic with all topics up to a count
|
41
|
+
# tpl.add_topic("topic", 9)
|
42
|
+
#
|
40
43
|
# @param topic [String] The topic's name
|
41
|
-
# @param partition [Array<Integer>, Range<Integer
|
44
|
+
# @param partition [Array<Integer>, Range<Integer>, Integer] The topic's partitions or partition count
|
42
45
|
#
|
43
46
|
# @return [nil]
|
44
47
|
def add_topic(topic, partitions=nil)
|
48
|
+
if partitions.is_a? Integer
|
49
|
+
partitions = (0..partitions - 1)
|
50
|
+
end
|
45
51
|
if partitions.nil?
|
46
52
|
Rdkafka::Bindings.rd_kafka_topic_partition_list_add(
|
47
53
|
@tpl,
|
data/lib/rdkafka/error.rb
CHANGED
@@ -3,12 +3,13 @@ module Rdkafka
|
|
3
3
|
class RdkafkaError < RuntimeError
|
4
4
|
# The underlying raw error response
|
5
5
|
# @return [Integer]
|
6
|
-
attr_reader :rdkafka_response
|
6
|
+
attr_reader :rdkafka_response, :message
|
7
7
|
|
8
8
|
# @private
|
9
|
-
def initialize(response)
|
9
|
+
def initialize(response, message=nil)
|
10
10
|
raise TypeError.new("Response has to be an integer") unless response.is_a? Integer
|
11
11
|
@rdkafka_response = response
|
12
|
+
@message = message
|
12
13
|
end
|
13
14
|
|
14
15
|
# This error's code, for example `:partition_eof`, `:msg_size_too_large`.
|
@@ -25,7 +26,12 @@ module Rdkafka
|
|
25
26
|
# Human readable representation of this error.
|
26
27
|
# @return [String]
|
27
28
|
def to_s
|
28
|
-
|
29
|
+
message_part = if message
|
30
|
+
"#{message} - "
|
31
|
+
else
|
32
|
+
''
|
33
|
+
end
|
34
|
+
"#{message_part}#{Rdkafka::Bindings.rd_kafka_err2str(@rdkafka_response)} (#{code})"
|
29
35
|
end
|
30
36
|
|
31
37
|
# Whether this error indicates the partition is EOF.
|
data/lib/rdkafka/version.rb
CHANGED
@@ -87,6 +87,31 @@ describe Rdkafka::Consumer::TopicPartitionList do
|
|
87
87
|
])
|
88
88
|
end
|
89
89
|
|
90
|
+
it "should create a new list and add assigned topics as a count" do
|
91
|
+
list = Rdkafka::Consumer::TopicPartitionList.new
|
92
|
+
|
93
|
+
expect(list.count).to eq 0
|
94
|
+
expect(list.empty?).to be true
|
95
|
+
|
96
|
+
list.add_topic("topic1", 3)
|
97
|
+
list.add_topic("topic2", 2)
|
98
|
+
|
99
|
+
expect(list.count).to eq 5
|
100
|
+
expect(list.empty?).to be false
|
101
|
+
|
102
|
+
hash = list.to_h
|
103
|
+
expect(hash.count).to eq 2
|
104
|
+
expect(hash["topic1"]).to eq([
|
105
|
+
Rdkafka::Consumer::Partition.new(0, -1001),
|
106
|
+
Rdkafka::Consumer::Partition.new(1, -1001),
|
107
|
+
Rdkafka::Consumer::Partition.new(2, -1001)
|
108
|
+
])
|
109
|
+
expect(hash["topic2"]).to eq([
|
110
|
+
Rdkafka::Consumer::Partition.new(0, -1001),
|
111
|
+
Rdkafka::Consumer::Partition.new(1, -1001)
|
112
|
+
])
|
113
|
+
end
|
114
|
+
|
90
115
|
describe "#to_s" do
|
91
116
|
it "should return a human readable representation" do
|
92
117
|
list = Rdkafka::Consumer::TopicPartitionList.new
|
data/spec/rdkafka/error_spec.rb
CHANGED
@@ -7,6 +7,10 @@ describe Rdkafka::RdkafkaError do
|
|
7
7
|
}.to raise_error TypeError
|
8
8
|
end
|
9
9
|
|
10
|
+
it "should create an error with a message" do
|
11
|
+
expect(Rdkafka::RdkafkaError.new(10, "message").message).to eq "message"
|
12
|
+
end
|
13
|
+
|
10
14
|
describe "#code" do
|
11
15
|
it "should handle an invalid response" do
|
12
16
|
expect(Rdkafka::RdkafkaError.new(933975).code).to eq :err_933975?
|
@@ -29,6 +33,10 @@ describe Rdkafka::RdkafkaError do
|
|
29
33
|
it "should return error messages from rdkafka" do
|
30
34
|
expect(Rdkafka::RdkafkaError.new(10).to_s).to eq "Broker: Message size too large (msg_size_too_large)"
|
31
35
|
end
|
36
|
+
|
37
|
+
it "should show the message if present" do
|
38
|
+
expect(Rdkafka::RdkafkaError.new(10, "Error explanation").to_s).to eq "Error explanation - Broker: Message size too large (msg_size_too_large)"
|
39
|
+
end
|
32
40
|
end
|
33
41
|
|
34
42
|
describe "#is_partition_eof?" do
|
@@ -40,4 +48,24 @@ describe Rdkafka::RdkafkaError do
|
|
40
48
|
expect(Rdkafka::RdkafkaError.new(-191).is_partition_eof?).to be true
|
41
49
|
end
|
42
50
|
end
|
51
|
+
|
52
|
+
describe "#==" do
|
53
|
+
subject { Rdkafka::RdkafkaError.new(10, "Error explanation") }
|
54
|
+
|
55
|
+
it "should equal another error with the same content" do
|
56
|
+
expect(subject).to eq Rdkafka::RdkafkaError.new(10, "Error explanation")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not equal another error with a different error code" do
|
60
|
+
expect(subject).to eq Rdkafka::RdkafkaError.new(20, "Error explanation")
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should not equal another error with a different message" do
|
64
|
+
expect(subject).to eq Rdkafka::RdkafkaError.new(10, "Different error explanation")
|
65
|
+
end
|
66
|
+
|
67
|
+
it "should not equal another error with no message" do
|
68
|
+
expect(subject).to eq Rdkafka::RdkafkaError.new(10)
|
69
|
+
end
|
70
|
+
end
|
43
71
|
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.2
|
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-10-
|
11
|
+
date: 2017-10-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|