ruby-kafka 0.7.0 → 0.7.1.beta1
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 +4 -4
- data/.circleci/config.yml +3 -3
- data/.gitignore +1 -0
- data/CHANGELOG.md +4 -0
- data/lib/kafka.rb +32 -0
- data/lib/kafka/broker.rb +18 -0
- data/lib/kafka/client.rb +38 -4
- data/lib/kafka/cluster.rb +60 -37
- data/lib/kafka/consumer.rb +2 -2
- data/lib/kafka/fetch_operation.rb +18 -59
- data/lib/kafka/fetched_batch.rb +9 -9
- data/lib/kafka/fetched_batch_generator.rb +114 -0
- data/lib/kafka/fetched_offset_resolver.rb +48 -0
- data/lib/kafka/fetcher.rb +2 -2
- data/lib/kafka/produce_operation.rb +52 -14
- data/lib/kafka/producer.rb +82 -2
- data/lib/kafka/protocol.rb +68 -48
- data/lib/kafka/protocol/add_partitions_to_txn_request.rb +34 -0
- data/lib/kafka/protocol/add_partitions_to_txn_response.rb +47 -0
- data/lib/kafka/protocol/decoder.rb +3 -6
- data/lib/kafka/protocol/encoder.rb +6 -11
- data/lib/kafka/protocol/end_txn_request.rb +29 -0
- data/lib/kafka/protocol/end_txn_response.rb +19 -0
- data/lib/kafka/protocol/fetch_request.rb +3 -1
- data/lib/kafka/protocol/fetch_response.rb +37 -18
- data/lib/kafka/protocol/init_producer_id_request.rb +26 -0
- data/lib/kafka/protocol/init_producer_id_response.rb +27 -0
- data/lib/kafka/protocol/list_offset_request.rb +8 -2
- data/lib/kafka/protocol/list_offset_response.rb +11 -6
- data/lib/kafka/protocol/record.rb +9 -0
- data/lib/kafka/protocol/record_batch.rb +17 -1
- data/lib/kafka/ssl_context.rb +19 -5
- data/lib/kafka/transaction_manager.rb +261 -0
- data/lib/kafka/transaction_state_machine.rb +72 -0
- data/lib/kafka/version.rb +1 -1
- data/ruby-kafka.gemspec +1 -1
- metadata +20 -4
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Kafka
|
4
|
+
class TransactionStateMachine
|
5
|
+
class InvalidTransitionError < StandardError; end
|
6
|
+
class InvalidStateError < StandardError; end
|
7
|
+
|
8
|
+
STATES = [
|
9
|
+
UNINITIALIZED = :uninitialized,
|
10
|
+
READY = :ready,
|
11
|
+
IN_TRANSACTION = :in_trasaction,
|
12
|
+
COMMITTING_TRANSACTION = :committing_transaction,
|
13
|
+
ABORTING_TRANSACTION = :aborting_transaction,
|
14
|
+
ERROR = :error
|
15
|
+
]
|
16
|
+
|
17
|
+
TRANSITIONS = {
|
18
|
+
UNINITIALIZED => [READY, ERROR],
|
19
|
+
READY => [UNINITIALIZED, COMMITTING_TRANSACTION, ABORTING_TRANSACTION],
|
20
|
+
IN_TRANSACTION => [READY],
|
21
|
+
COMMITTING_TRANSACTION => [IN_TRANSACTION],
|
22
|
+
ABORTING_TRANSACTION => [IN_TRANSACTION],
|
23
|
+
# Any states can transition to error state
|
24
|
+
ERROR => STATES
|
25
|
+
}
|
26
|
+
|
27
|
+
def initialize(logger:)
|
28
|
+
@state = UNINITIALIZED
|
29
|
+
@mutex = Mutex.new
|
30
|
+
@logger = logger
|
31
|
+
end
|
32
|
+
|
33
|
+
def transition_to!(next_state)
|
34
|
+
raise InvalidStateError unless STATES.include?(next_state)
|
35
|
+
unless TRANSITIONS[next_state].include?(@state)
|
36
|
+
raise InvalidTransitionError, "Could not transition from state '#{@state}' to state '#{next_state}'"
|
37
|
+
end
|
38
|
+
@logger.debug("Transaction state changed to '#{next_state}'!")
|
39
|
+
@mutex.synchronize { @state = next_state }
|
40
|
+
end
|
41
|
+
|
42
|
+
def uninitialized?
|
43
|
+
in_state?(UNINITIALIZED)
|
44
|
+
end
|
45
|
+
|
46
|
+
def ready?
|
47
|
+
in_state?(READY)
|
48
|
+
end
|
49
|
+
|
50
|
+
def in_transaction?
|
51
|
+
in_state?(IN_TRANSACTION)
|
52
|
+
end
|
53
|
+
|
54
|
+
def committing_transaction?
|
55
|
+
in_state?(COMMITTING_TRANSACTION)
|
56
|
+
end
|
57
|
+
|
58
|
+
def aborting_transaction?
|
59
|
+
in_state?(ABORTING_TRANSACTION)
|
60
|
+
end
|
61
|
+
|
62
|
+
def error?
|
63
|
+
in_state?(ERROR)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def in_state?(state)
|
69
|
+
@mutex.synchronize { @state == state }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/lib/kafka/version.rb
CHANGED
data/ruby-kafka.gemspec
CHANGED
@@ -41,7 +41,7 @@ Gem::Specification.new do |spec|
|
|
41
41
|
spec.add_development_dependency "extlz4"
|
42
42
|
spec.add_development_dependency "colored"
|
43
43
|
spec.add_development_dependency "rspec_junit_formatter", "0.2.2"
|
44
|
-
spec.add_development_dependency "dogstatsd-ruby", ">= 3.0.0"
|
44
|
+
spec.add_development_dependency "dogstatsd-ruby", ">= 3.0.0", "<4.0.0"
|
45
45
|
spec.add_development_dependency "statsd-ruby"
|
46
46
|
spec.add_development_dependency "ruby-prof"
|
47
47
|
spec.add_development_dependency "timecop"
|
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.7.
|
4
|
+
version: 0.7.1.beta1
|
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-08-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: digest-crc
|
@@ -199,6 +199,9 @@ dependencies:
|
|
199
199
|
- - ">="
|
200
200
|
- !ruby/object:Gem::Version
|
201
201
|
version: 3.0.0
|
202
|
+
- - "<"
|
203
|
+
- !ruby/object:Gem::Version
|
204
|
+
version: 4.0.0
|
202
205
|
type: :development
|
203
206
|
prerelease: false
|
204
207
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -206,6 +209,9 @@ dependencies:
|
|
206
209
|
- - ">="
|
207
210
|
- !ruby/object:Gem::Version
|
208
211
|
version: 3.0.0
|
212
|
+
- - "<"
|
213
|
+
- !ruby/object:Gem::Version
|
214
|
+
version: 4.0.0
|
209
215
|
- !ruby/object:Gem::Dependency
|
210
216
|
name: statsd-ruby
|
211
217
|
requirement: !ruby/object:Gem::Requirement
|
@@ -338,7 +344,9 @@ files:
|
|
338
344
|
- lib/kafka/datadog.rb
|
339
345
|
- lib/kafka/fetch_operation.rb
|
340
346
|
- lib/kafka/fetched_batch.rb
|
347
|
+
- lib/kafka/fetched_batch_generator.rb
|
341
348
|
- lib/kafka/fetched_message.rb
|
349
|
+
- lib/kafka/fetched_offset_resolver.rb
|
342
350
|
- lib/kafka/fetcher.rb
|
343
351
|
- lib/kafka/gzip_codec.rb
|
344
352
|
- lib/kafka/heartbeat.rb
|
@@ -353,6 +361,8 @@ files:
|
|
353
361
|
- lib/kafka/produce_operation.rb
|
354
362
|
- lib/kafka/producer.rb
|
355
363
|
- lib/kafka/protocol.rb
|
364
|
+
- lib/kafka/protocol/add_partitions_to_txn_request.rb
|
365
|
+
- lib/kafka/protocol/add_partitions_to_txn_response.rb
|
356
366
|
- lib/kafka/protocol/alter_configs_request.rb
|
357
367
|
- lib/kafka/protocol/alter_configs_response.rb
|
358
368
|
- lib/kafka/protocol/api_versions_request.rb
|
@@ -370,12 +380,16 @@ files:
|
|
370
380
|
- lib/kafka/protocol/describe_groups_request.rb
|
371
381
|
- lib/kafka/protocol/describe_groups_response.rb
|
372
382
|
- lib/kafka/protocol/encoder.rb
|
383
|
+
- lib/kafka/protocol/end_txn_request.rb
|
384
|
+
- lib/kafka/protocol/end_txn_response.rb
|
373
385
|
- lib/kafka/protocol/fetch_request.rb
|
374
386
|
- lib/kafka/protocol/fetch_response.rb
|
375
387
|
- lib/kafka/protocol/find_coordinator_request.rb
|
376
388
|
- lib/kafka/protocol/find_coordinator_response.rb
|
377
389
|
- lib/kafka/protocol/heartbeat_request.rb
|
378
390
|
- lib/kafka/protocol/heartbeat_response.rb
|
391
|
+
- lib/kafka/protocol/init_producer_id_request.rb
|
392
|
+
- lib/kafka/protocol/init_producer_id_response.rb
|
379
393
|
- lib/kafka/protocol/join_group_request.rb
|
380
394
|
- lib/kafka/protocol/join_group_response.rb
|
381
395
|
- lib/kafka/protocol/leave_group_request.rb
|
@@ -412,6 +426,8 @@ files:
|
|
412
426
|
- lib/kafka/ssl_context.rb
|
413
427
|
- lib/kafka/ssl_socket_with_timeout.rb
|
414
428
|
- lib/kafka/statsd.rb
|
429
|
+
- lib/kafka/transaction_manager.rb
|
430
|
+
- lib/kafka/transaction_state_machine.rb
|
415
431
|
- lib/kafka/version.rb
|
416
432
|
- lib/ruby-kafka.rb
|
417
433
|
- ruby-kafka.gemspec
|
@@ -430,9 +446,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
430
446
|
version: 2.1.0
|
431
447
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
432
448
|
requirements:
|
433
|
-
- - "
|
449
|
+
- - ">"
|
434
450
|
- !ruby/object:Gem::Version
|
435
|
-
version:
|
451
|
+
version: 1.3.1
|
436
452
|
requirements: []
|
437
453
|
rubyforge_project:
|
438
454
|
rubygems_version: 2.7.6
|