ruby-kafka 0.6.1 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 950e6f73c5b6fb41427e44152ad455c77de4203c61154f9c57e43fbc271ccd42
4
- data.tar.gz: 9bc22f6883763ed70242010a4cf56681f6e26d4ac0763a14a0af112967baa273
3
+ metadata.gz: c1f2b126f35425a1fde1e65ae5cac8d8e969416c77c00002a6eac744b23f91bf
4
+ data.tar.gz: 07dfce70a3e142e4e1efe95fa089466f7d8dd2200f8e25787b9f917b2b6084ff
5
5
  SHA512:
6
- metadata.gz: 38b5a863223994c0f162138dbb6fd00f5ad5a922613f706434d2939d67f9a97cffd42fb2c0136c295cb11a8406f09cfe310cdfd7e1bdb49662b66cb60783572c
7
- data.tar.gz: ddbaf973082ff746a0368ad884ba4eb8a396b43c10da70f4f4cb1b50a1204b0e0f1d329486e24f9aa9659062d85d2a3d46007d57418f825ab0ff11ec72cb5c46
6
+ metadata.gz: 247ada1eb577419262b6d50aa82b3a39fadcd34e0fad625002786f50e26082c06f13d62ff69ec5a4f0c4791d10a922895e3af179ef38d2cf08e8621171966c03
7
+ data.tar.gz: 5b12bcb7277c39ba03308074b6f0998019f4535a8484275b4b19614e7b9bca539f4e14a9edb8eea1b82439d872deec362c5305034d6d7c4d9b1bdb475025dd2b
@@ -4,6 +4,9 @@ Changes and additions to the library will be listed here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ - Add list groups API (#582).
8
+ - Use mutable String constructor (#584).
9
+
7
10
  ## v0.6.1
8
11
 
9
12
  - Fix bug with exponential pausing causing pauses never to stop.
@@ -146,6 +146,12 @@ module Kafka
146
146
  send_request(request)
147
147
  end
148
148
 
149
+ def list_groups
150
+ request = Protocol::ListGroupsRequest.new
151
+
152
+ send_request(request)
153
+ end
154
+
149
155
  def api_versions
150
156
  request = Protocol::ApiVersionsRequest.new
151
157
 
@@ -559,6 +559,13 @@ module Kafka
559
559
  @cluster.list_topics
560
560
  end
561
561
 
562
+ # Lists all consumer groups in the cluster
563
+ #
564
+ # @return [Array<String>] the list of group ids
565
+ def groups
566
+ @cluster.list_groups
567
+ end
568
+
562
569
  def has_topic?(topic)
563
570
  @cluster.clear_target_topics
564
571
  @cluster.add_target_topics([topic])
@@ -337,6 +337,15 @@ module Kafka
337
337
  end.map(&:topic_name)
338
338
  end
339
339
 
340
+ def list_groups
341
+ refresh_metadata_if_necessary!
342
+ cluster_info.brokers.map do |broker|
343
+ response = connect_to_broker(broker.node_id).list_groups
344
+ Protocol.handle_error(response.error_code)
345
+ response.groups.map(&:group_id)
346
+ end.flatten.uniq
347
+ end
348
+
340
349
  def disconnect
341
350
  @broker_pool.close
342
351
  end
@@ -25,6 +25,7 @@ module Kafka
25
25
  HEARTBEAT_API = 12
26
26
  LEAVE_GROUP_API = 13
27
27
  SYNC_GROUP_API = 14
28
+ LIST_GROUPS_API = 16
28
29
  SASL_HANDSHAKE_API = 17
29
30
  API_VERSIONS_API = 18
30
31
  CREATE_TOPICS_API = 19
@@ -177,3 +178,5 @@ require "kafka/protocol/alter_configs_request"
177
178
  require "kafka/protocol/alter_configs_response"
178
179
  require "kafka/protocol/create_partitions_request"
179
180
  require "kafka/protocol/create_partitions_response"
181
+ require "kafka/protocol/list_groups_request"
182
+ require "kafka/protocol/list_groups_response"
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kafka
4
+ module Protocol
5
+ class ListGroupsRequest
6
+ def api_key
7
+ LIST_GROUPS_API
8
+ end
9
+
10
+ def api_version
11
+ 0
12
+ end
13
+
14
+ def response_class
15
+ Protocol::ListGroupsResponse
16
+ end
17
+
18
+ def encode(encoder)
19
+ # noop
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Kafka
4
+ module Protocol
5
+ class ListGroupsResponse
6
+ class GroupEntry
7
+ attr_reader :group_id, :protocol_type
8
+
9
+ def initialize(group_id:, protocol_type:)
10
+ @group_id = group_id
11
+ @protocol_type = protocol_type
12
+ end
13
+ end
14
+
15
+ attr_reader :error_code, :groups
16
+
17
+ def initialize(error_code:, groups:)
18
+ @error_code = error_code
19
+ @groups = groups
20
+ end
21
+
22
+ def self.decode(decoder)
23
+ error_code = decoder.int16
24
+ groups = decoder.array do
25
+ GroupEntry.new(
26
+ group_id: decoder.string,
27
+ protocol_type: decoder.string
28
+ )
29
+ end
30
+
31
+ new(error_code: error_code, groups: groups)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -90,13 +90,14 @@ module Kafka
90
90
  # @raise [Errno::ETIMEDOUT] if the timeout is exceeded.
91
91
  # @return [String] the data that was read from the socket.
92
92
  def read(num_bytes)
93
- buffer = ''
93
+ buffer = String.new
94
+
94
95
  until buffer.length >= num_bytes
95
96
  begin
96
- # unlike plain tcp sockets, ssl sockets don't support IO.select
97
+ # Unlike plain TCP sockets, SSL sockets don't support IO.select
97
98
  # properly.
98
99
  # Instead, timeouts happen on a per read basis, and we have to
99
- # catch exceptions from read_nonblock, and gradually build up
100
+ # catch exceptions from read_nonblock and gradually build up
100
101
  # our read buffer.
101
102
  buffer << @ssl_socket.read_nonblock(num_bytes - buffer.length)
102
103
  rescue IO::WaitReadable
@@ -113,6 +114,7 @@ module Kafka
113
114
  end
114
115
  end
115
116
  end
117
+
116
118
  buffer
117
119
  end
118
120
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kafka
4
- VERSION = "0.6.1"
4
+ VERSION = "0.6.2"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Schierbeck
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-04 00:00:00.000000000 Z
11
+ date: 2018-05-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -362,6 +362,8 @@ files:
362
362
  - lib/kafka/protocol/join_group_response.rb
363
363
  - lib/kafka/protocol/leave_group_request.rb
364
364
  - lib/kafka/protocol/leave_group_response.rb
365
+ - lib/kafka/protocol/list_groups_request.rb
366
+ - lib/kafka/protocol/list_groups_response.rb
365
367
  - lib/kafka/protocol/list_offset_request.rb
366
368
  - lib/kafka/protocol/list_offset_response.rb
367
369
  - lib/kafka/protocol/member_assignment.rb