ruby-kafka 0.6.1 → 0.6.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
  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