consistent-hashing 0.2.1 → 1.0.0
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 +15 -0
- data/History.txt +5 -1
- data/README.md +5 -0
- data/lib/consistent_hashing/ring.rb +6 -1
- data/test/consistent_hashing/test_ring.rb +12 -0
- data/version.txt +1 -1
- metadata +13 -12
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MWE4MTk2NWU4MTcxMDMzMzA1NWU2MDlmZTc5NTdjMzQ2MTQ0NWYxYg==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MWU3ODg0ZTEyYjZiMTJjMjJjNmE4MzkwODA2MWZiZjFjMWVhYjE1Yg==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MjNlZmQyNTZlMTVkNmQ3MDRjODY3ODQ4OWQzODg5YTA3MTQyYzg0YmE5YWEy
|
10
|
+
ODc5MmMxZDg0ZmU3ZTVhZDg3ZWU5OWVkYjNiOGU1ZGM1NmYyN2MwZDE1OGUy
|
11
|
+
MjE1ZjNlZjE1ZmE5YjkzNzZiNDgwNTM4ZGJhZGQ5YjAwNDlkMzM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NmNhYjEyOGM3YjJkZDM2Yjk4ZmUyZDViNTdiODExZGNlNDg2YzljZTc5Mzc1
|
14
|
+
MGVjNTEzMmRlYmE1MGE0OWE3YWE4NjBlODZhYTZiOGExMGRkMjBhZmIzNzBm
|
15
|
+
NWI3NTZjNmIwYWRkY2IyMmU3OTI0NTlkOWM4NDBmMThjZWZiNWM=
|
data/History.txt
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
== 1.0.0 / 2013-12-06
|
2
|
+
|
3
|
+
* separated << and add methods for the ring, add no longer returns a self reference (potentionally critical on large rings)
|
4
|
+
|
1
5
|
== 0.2.1 / 2013-04-27
|
2
6
|
|
3
7
|
* fixed build, removed bones gem dependency
|
@@ -14,4 +18,4 @@
|
|
14
18
|
|
15
19
|
== 0.0.1 / 2012-04-15
|
16
20
|
|
17
|
-
* Birthday!
|
21
|
+
* Birthday!
|
data/README.md
CHANGED
@@ -29,6 +29,11 @@ ring.nodes # => ["192.168.1.101", "192.168.1.102"]
|
|
29
29
|
ring.points # => [#<ConsistentHashing::VirtualPoint>, #<ConsistentHashing::VirtualPoint>, ...]
|
30
30
|
```
|
31
31
|
|
32
|
+
## A note on large rings
|
33
|
+
|
34
|
+
For large amounts of nodes, avoid using the `<<` method. Use `add` instead to add the nodes to the ring. The reason for
|
35
|
+
this is, that each call to `<<` returns a reference to the complete ring, which can get quite big.
|
36
|
+
|
32
37
|
## Installation
|
33
38
|
|
34
39
|
* `[sudo] gem install consistent-hashing`
|
@@ -31,10 +31,15 @@ module ConsistentHashing
|
|
31
31
|
|
32
32
|
@ring[key] = VirtualPoint.new(node, key)
|
33
33
|
end
|
34
|
+
end
|
34
35
|
|
36
|
+
# Public: adds a new node into the hash ring like `add` but returns
|
37
|
+
# a reference to the ring to be used as a fluent interface
|
38
|
+
#
|
39
|
+
def <<(node)
|
40
|
+
add(node)
|
35
41
|
self
|
36
42
|
end
|
37
|
-
alias :<< :add
|
38
43
|
|
39
44
|
# Public: removes a node from the hash ring
|
40
45
|
#
|
@@ -25,6 +25,18 @@ class TestRing < ConsistentHashing::TestCase
|
|
25
25
|
assert_equal 6, ring.length
|
26
26
|
end
|
27
27
|
|
28
|
+
# builds a rather huge ring of 1024 nodes and 10 replicas each
|
29
|
+
#
|
30
|
+
def test_add_huge
|
31
|
+
replicas = 10
|
32
|
+
ring = ConsistentHashing::Ring.new([], replicas)
|
33
|
+
assert_equal 0, ring.length
|
34
|
+
|
35
|
+
(1..1024).map {|i| ring.add(i)}
|
36
|
+
|
37
|
+
assert_equal 10240, ring.length
|
38
|
+
end
|
39
|
+
|
28
40
|
def test_get_node
|
29
41
|
assert_equal "A", @ring.point_for(@examples["A"]).node
|
30
42
|
assert_equal "B", @ring.point_for(@examples["B"]).node
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
1.0.0
|
metadata
CHANGED
@@ -1,27 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: consistent-hashing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Dominik Liebler
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-12-06 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: avl_tree
|
16
|
-
requirement:
|
17
|
-
none: false
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
17
|
- - ! '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: 1.1.3
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
|
-
version_requirements:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.1.3
|
25
27
|
description: a Consistent Hashing implementation in pure Ruby using an AVL Tree
|
26
28
|
email: liebler.dominik@googlemail.com
|
27
29
|
executables: []
|
@@ -30,12 +32,12 @@ extra_rdoc_files:
|
|
30
32
|
- History.txt
|
31
33
|
files:
|
32
34
|
- lib/consistent_hashing/avl_tree.rb
|
33
|
-
- lib/consistent_hashing/ring.rb
|
34
35
|
- lib/consistent_hashing/virtual_point.rb
|
36
|
+
- lib/consistent_hashing/ring.rb
|
35
37
|
- lib/consistent_hashing.rb
|
38
|
+
- test/consistent_hashing/test_virtual_point.rb
|
36
39
|
- test/consistent_hashing/test_avl_tree.rb
|
37
40
|
- test/consistent_hashing/test_ring.rb
|
38
|
-
- test/consistent_hashing/test_virtual_point.rb
|
39
41
|
- test/test_consistent_hashing.rb
|
40
42
|
- benchmark/benchmark.rb
|
41
43
|
- README.md
|
@@ -44,6 +46,7 @@ files:
|
|
44
46
|
- version.txt
|
45
47
|
homepage: https://github.com/domnikl/consistent-hashing
|
46
48
|
licenses: []
|
49
|
+
metadata: {}
|
47
50
|
post_install_message:
|
48
51
|
rdoc_options:
|
49
52
|
- --main
|
@@ -51,25 +54,23 @@ rdoc_options:
|
|
51
54
|
require_paths:
|
52
55
|
- lib
|
53
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
-
none: false
|
55
57
|
requirements:
|
56
58
|
- - ! '>='
|
57
59
|
- !ruby/object:Gem::Version
|
58
60
|
version: '0'
|
59
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
60
|
-
none: false
|
61
62
|
requirements:
|
62
63
|
- - ! '>='
|
63
64
|
- !ruby/object:Gem::Version
|
64
65
|
version: '0'
|
65
66
|
requirements: []
|
66
67
|
rubyforge_project: consistent-hashing
|
67
|
-
rubygems_version:
|
68
|
+
rubygems_version: 2.0.3
|
68
69
|
signing_key:
|
69
70
|
specification_version: 3
|
70
71
|
summary: ''
|
71
72
|
test_files:
|
73
|
+
- test/consistent_hashing/test_virtual_point.rb
|
72
74
|
- test/consistent_hashing/test_avl_tree.rb
|
73
75
|
- test/consistent_hashing/test_ring.rb
|
74
|
-
- test/consistent_hashing/test_virtual_point.rb
|
75
76
|
- test/test_consistent_hashing.rb
|