kafkat 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NjhlMGY5MzIyYWFhZjdlZmE3YjlmM2M3MTc3MGU0MjQyYzQ2YjA5Zg==
4
+ MzRmNjZhMzY3YjRlNzRkZWFiMjhlNzE2ZTE3YWQyMTAzMDZkMmNiZQ==
5
5
  data.tar.gz: !binary |-
6
- NDNlMjdjNDAxMjc4NTcyZDE2YzliNjI5OTBkNmJkMDA2OGM3Yjc0Zg==
6
+ MDg5MDkwMTk1ZjU1MDBlYWIzYThmY2ZhYTg3OWY3ODYxZDY1ZTJlNQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MDdkOWI2ZjBhNjU2ZWM3NmI5YTMwNTFjYTA3MjQ5NjJiNDVjOTFiMGRkMDMw
10
- ZmNkNThiNGJhYzYyNjIwYzczOTY0MjNhY2ZlYzA1MTQ2Y2Y4YTQxZDcwNTVm
11
- NWU4YjA0NGYzMDQ1Mjc3ZjBiMGUxMTllM2U0N2QwMDdkODYzOGQ=
9
+ NzA4ODM1NDRkMGNkNmYxODZlMzNkMDQ0YWEyYTY0MGRiNTQ4Njg5MGEyOWU2
10
+ YzVhYjI2ZjM4YjZjYjUzYWRhYjA0YTIxMDcyNTM2MTVhZjJjYjVkZTNiYzM0
11
+ ZjQ4Y2FiZTBiZWJmOGEyNDUxMjQyM2IxZTkyYjFmZTQ0Y2M4NDQ=
12
12
  data.tar.gz: !binary |-
13
- MzU2ODcyZWFmY2VjMmFiM2NkMDMxNDRjNmQ4NGU5Y2JhOTE5MDczMzYzZGFj
14
- MjhmOGE5MjVjNzViZWM3ZDJjMTkzZmZhZGYxMjI1Y2Q1NWEzMDU3ODc5MWUy
15
- NzAyMTBlNmExN2E5M2U2MGM5YWZkY2FkNTkxZTAyMjY3NDE2ZTI=
13
+ YWMxYTY2ZDVjMjMzYTRlMWIwN2E2NWQyNTE4NTdkYTM5NTVmNjBkNWUwMzJk
14
+ ZTE4MmE5ZDJjNjBlZGQyYWI1NzA1NmNmN2U4ZjBkMGNkNjQ5ZDFmMjhjYjAw
15
+ ZGFlMjc5M2FkYzNkMTVlYzNmNDYzMjdiYzJlNTM5M2JjOGE2OTY=
data/.gitignore CHANGED
@@ -3,5 +3,5 @@
3
3
  *.iws
4
4
  *.iml
5
5
  *.ipr
6
-
6
+ Gemfile.lock
7
7
  reports
@@ -6,7 +6,7 @@ module Kafkat
6
6
  usage 'drain <broker id> [--topic <t>] [--brokers <ids>]',
7
7
  'Reassign partitions from a specific broker to destination brokers.'
8
8
 
9
- # For each partition (of speicified topic) on the source broker, the command is to
9
+ # For each partition (of specified topic) on the source broker, the command is to
10
10
  # assign the partition to one of the destination brokers that does not already have
11
11
  # this partition, along with existing brokers to achieve minimal movement of data.
12
12
  # To help distribute data evenly, if there are more than one destination brokers
@@ -57,6 +57,7 @@ module Kafkat
57
57
  t.partitions.each do |p|
58
58
  if p.replicas.include? source_broker
59
59
  replicas = p.replicas - [source_broker]
60
+ source_broker_is_leader = p.replicas.first == source_broker
60
61
  potential_broker_ids = destination_brokers - replicas
61
62
  if potential_broker_ids.empty?
62
63
  print "ERROR: Not enough destination brokers to reassign topic \"#{t.name}\".\n"
@@ -66,7 +67,11 @@ module Kafkat
66
67
  num_partitions_on_potential_broker =
67
68
  partitions_by_broker.select { |id, _| potential_broker_ids.include? id }
68
69
  assigned_broker_id = num_partitions_on_potential_broker.min_by{ |id, num| num }[0]
69
- replicas << assigned_broker_id
70
+ if source_broker_is_leader
71
+ replicas.unshift(assigned_broker_id)
72
+ else
73
+ replicas << assigned_broker_id
74
+ end
70
75
  partitions_by_broker[assigned_broker_id] += 1
71
76
 
72
77
  assignments << Assignment.new(t.name, p.id, replicas)
@@ -2,7 +2,7 @@ module Kafkat
2
2
  module Formatting
3
3
  def justify(field, width=2)
4
4
  field = field.to_s
5
- count = [width - (field.length / 8), 0].max
5
+ count = [width - (field.length / 8), 1].max
6
6
  field + "\t" * count
7
7
  end
8
8
 
@@ -1,3 +1,3 @@
1
1
  module Kafkat
2
- VERSION = '0.0.11'
2
+ VERSION = '0.0.12'
3
3
  end
@@ -4,35 +4,35 @@ module Kafkat
4
4
  name "topic_name"
5
5
 
6
6
  factory :topic_with_one_empty_broker do
7
- partitions {[Partition.new(name, 0, [0], 0, 0),
8
- Partition.new(name, 1, [1], 1, 1),
9
- Partition.new(name, 2, [0], 0, 0),
10
- Partition.new(name, 3, [0], 0, 0),
11
- Partition.new(name, 4, [1], 1, 1)]}
7
+ partitions {[Partition.new(name, 0, [0], 0, [0]),
8
+ Partition.new(name, 1, [1], 1, [1]),
9
+ Partition.new(name, 2, [0], 0, [0]),
10
+ Partition.new(name, 3, [0], 0, [0]),
11
+ Partition.new(name, 4, [1], 1, [1])]}
12
12
  end
13
13
 
14
14
  factory :topic_rep_factor_one do
15
- partitions {[Partition.new(name, 0, [0], 0, 0),
16
- Partition.new(name, 1, [1], 1, 1),
17
- Partition.new(name, 2, [2], 2, 2),
18
- Partition.new(name, 3, [0], 0, 0),
19
- Partition.new(name, 4, [1], 1, 1)]}
15
+ partitions {[Partition.new(name, 0, [0], 0, [0]),
16
+ Partition.new(name, 1, [1], 1, [1]),
17
+ Partition.new(name, 2, [2], 2, [2]),
18
+ Partition.new(name, 3, [0], 0, [0]),
19
+ Partition.new(name, 4, [1], 1, [1])]}
20
20
  end
21
21
 
22
22
  factory :topic_rep_factor_two do
23
- partitions {[Partition.new(name, 0, [0, 1], 0, 0),
24
- Partition.new(name, 1, [0, 2], 2, 2),
25
- Partition.new(name, 2, [1, 2], 1, 1),
26
- Partition.new(name, 3, [0, 1], 0, 0),
27
- Partition.new(name, 4, [0, 2], 2, 2)]}
23
+ partitions {[Partition.new(name, 0, [0, 1], 0, [0]),
24
+ Partition.new(name, 1, [0, 2], 2, [2]),
25
+ Partition.new(name, 2, [1, 2], 1, [1]),
26
+ Partition.new(name, 3, [0, 1], 0, [0]),
27
+ Partition.new(name, 4, [0, 2], 2, [2])]}
28
28
  end
29
29
 
30
30
  factory :topic_rep_factor_three do
31
- partitions {[Partition.new(name, 0, [0, 1, 2], 0, 0),
32
- Partition.new(name, 1, [0, 1, 2], 1, 1),
33
- Partition.new(name, 2, [0, 1, 2], 2, 2),
34
- Partition.new(name, 3, [0, 1, 2], 0, 0),
35
- Partition.new(name, 4, [0, 1, 2], 1, 1)]}
31
+ partitions {[Partition.new(name, 0, [0, 1, 2], 0, [0]),
32
+ Partition.new(name, 1, [0, 1, 2], 1, [1]),
33
+ Partition.new(name, 2, [0, 1, 2], 2, [2]),
34
+ Partition.new(name, 3, [0, 1, 2], 0, [0]),
35
+ Partition.new(name, 4, [0, 1, 2], 1, [1])]}
36
36
  end
37
37
  end
38
38
  end
@@ -13,7 +13,7 @@ module Kafkat
13
13
  assignments = drain.generate_assignments(broker_id,
14
14
  {"topic_name" => topic_rep_factor_one},
15
15
  destination_broker_ids)
16
- expect(assignments).to have_exactly(2).Partition
16
+ expect(assignments).to have_exactly(2).items
17
17
  expect(assignments[0].replicas).to eq([2])
18
18
  expect(assignments[1].replicas).to eq([1])
19
19
  end
@@ -25,11 +25,11 @@ module Kafkat
25
25
  assignments = drain.generate_assignments(broker_id,
26
26
  {"topic_name" => topic_rep_factor_two},
27
27
  destination_broker_ids)
28
- expect(assignments).to have_exactly(4).Partition
29
- expect(assignments[0].replicas).to eq([1, 2])
30
- expect(assignments[1].replicas).to eq([2, 1])
31
- expect(assignments[2].replicas).to eq([1, 2])
32
- expect(assignments[3].replicas).to eq([2, 1])
28
+ expect(assignments).to have_exactly(4).items
29
+ expect(assignments[0].replicas).to eq([2, 1])
30
+ expect(assignments[1].replicas).to eq([1, 2])
31
+ expect(assignments[2].replicas).to eq([2, 1])
32
+ expect(assignments[3].replicas).to eq([1, 2])
33
33
  end
34
34
  end
35
35
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kafkat
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nelson Gauthier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-26 00:00:00.000000000 Z
11
+ date: 2016-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: zk
@@ -181,7 +181,6 @@ files:
181
181
  - .simplecov
182
182
  - .travis.yml
183
183
  - Gemfile
184
- - Gemfile.lock
185
184
  - LICENSE.txt
186
185
  - README.md
187
186
  - Rakefile
@@ -247,3 +246,4 @@ test_files:
247
246
  - spec/factories/topic.rb
248
247
  - spec/lib/kafkat/command/drain_spec.rb
249
248
  - spec/spec_helper.rb
249
+ has_rdoc:
data/Gemfile.lock DELETED
@@ -1,69 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- kafkat (0.0.11)
5
- colored (~> 1.2)
6
- highline (~> 1.6, >= 1.6.21)
7
- retryable (~> 1.3, >= 1.3.5)
8
- trollop (~> 2.0)
9
- zk (~> 1.9, >= 1.9.4)
10
-
11
- GEM
12
- remote: https://rubygems.org/
13
- specs:
14
- activesupport (4.2.1)
15
- i18n (~> 0.7)
16
- json (~> 1.7, >= 1.7.7)
17
- minitest (~> 5.1)
18
- thread_safe (~> 0.3, >= 0.3.4)
19
- tzinfo (~> 1.1)
20
- colored (1.2)
21
- diff-lcs (1.2.5)
22
- docile (1.1.5)
23
- factory_girl (4.5.0)
24
- activesupport (>= 3.0.0)
25
- highline (1.7.2)
26
- i18n (0.7.0)
27
- json (1.8.3)
28
- minitest (5.7.0)
29
- multi_json (1.11.1)
30
- rake (10.4.2)
31
- retryable (1.3.6)
32
- rspec (3.2.0)
33
- rspec-core (~> 3.2.0)
34
- rspec-expectations (~> 3.2.0)
35
- rspec-mocks (~> 3.2.0)
36
- rspec-collection_matchers (1.1.2)
37
- rspec-expectations (>= 2.99.0.beta1)
38
- rspec-core (3.2.3)
39
- rspec-support (~> 3.2.0)
40
- rspec-expectations (3.2.1)
41
- diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.2.0)
43
- rspec-mocks (3.2.1)
44
- diff-lcs (>= 1.2.0, < 2.0)
45
- rspec-support (~> 3.2.0)
46
- rspec-support (3.2.2)
47
- simplecov (0.9.0)
48
- docile (~> 1.1.0)
49
- multi_json
50
- simplecov-html (~> 0.8.0)
51
- simplecov-html (0.8.0)
52
- thread_safe (0.3.5)
53
- trollop (2.1.2)
54
- tzinfo (1.2.2)
55
- thread_safe (~> 0.1)
56
- zk (1.9.6)
57
- zookeeper (~> 1.4.0)
58
- zookeeper (1.4.11)
59
-
60
- PLATFORMS
61
- ruby
62
-
63
- DEPENDENCIES
64
- factory_girl (~> 4.5.0)
65
- kafkat!
66
- rake
67
- rspec (~> 3.2.0)
68
- rspec-collection_matchers (~> 1.1.0)
69
- simplecov