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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +3 -3
  3. data/.gitignore +1 -0
  4. data/CHANGELOG.md +4 -0
  5. data/lib/kafka.rb +32 -0
  6. data/lib/kafka/broker.rb +18 -0
  7. data/lib/kafka/client.rb +38 -4
  8. data/lib/kafka/cluster.rb +60 -37
  9. data/lib/kafka/consumer.rb +2 -2
  10. data/lib/kafka/fetch_operation.rb +18 -59
  11. data/lib/kafka/fetched_batch.rb +9 -9
  12. data/lib/kafka/fetched_batch_generator.rb +114 -0
  13. data/lib/kafka/fetched_offset_resolver.rb +48 -0
  14. data/lib/kafka/fetcher.rb +2 -2
  15. data/lib/kafka/produce_operation.rb +52 -14
  16. data/lib/kafka/producer.rb +82 -2
  17. data/lib/kafka/protocol.rb +68 -48
  18. data/lib/kafka/protocol/add_partitions_to_txn_request.rb +34 -0
  19. data/lib/kafka/protocol/add_partitions_to_txn_response.rb +47 -0
  20. data/lib/kafka/protocol/decoder.rb +3 -6
  21. data/lib/kafka/protocol/encoder.rb +6 -11
  22. data/lib/kafka/protocol/end_txn_request.rb +29 -0
  23. data/lib/kafka/protocol/end_txn_response.rb +19 -0
  24. data/lib/kafka/protocol/fetch_request.rb +3 -1
  25. data/lib/kafka/protocol/fetch_response.rb +37 -18
  26. data/lib/kafka/protocol/init_producer_id_request.rb +26 -0
  27. data/lib/kafka/protocol/init_producer_id_response.rb +27 -0
  28. data/lib/kafka/protocol/list_offset_request.rb +8 -2
  29. data/lib/kafka/protocol/list_offset_response.rb +11 -6
  30. data/lib/kafka/protocol/record.rb +9 -0
  31. data/lib/kafka/protocol/record_batch.rb +17 -1
  32. data/lib/kafka/ssl_context.rb +19 -5
  33. data/lib/kafka/transaction_manager.rb +261 -0
  34. data/lib/kafka/transaction_state_machine.rb +72 -0
  35. data/lib/kafka/version.rb +1 -1
  36. data/ruby-kafka.gemspec +1 -1
  37. 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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Kafka
4
- VERSION = "0.7.0"
4
+ VERSION = "0.7.1.beta1"
5
5
  end
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.0
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-14 00:00:00.000000000 Z
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: '0'
451
+ version: 1.3.1
436
452
  requirements: []
437
453
  rubyforge_project:
438
454
  rubygems_version: 2.7.6