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.
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