ruby-kafka 0.7.0 → 0.7.1.beta1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|