pokan 0.1.0rc2 → 0.2.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.
- data/.gitignore +35 -0
- data/lib/pokan/server.rb +20 -1
- data/lib/pokan/version.rb +1 -1
- metadata +14 -93
- data/pokan.gemspec +0 -45
data/.gitignore
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# rdoc generated
|
2
|
+
rdoc
|
3
|
+
|
4
|
+
# yard generated
|
5
|
+
doc
|
6
|
+
.yardoc
|
7
|
+
|
8
|
+
# bundler
|
9
|
+
.bundle
|
10
|
+
|
11
|
+
# RVM
|
12
|
+
.rvmrc
|
13
|
+
|
14
|
+
# jeweler generated
|
15
|
+
pkg
|
16
|
+
|
17
|
+
.DS_Store
|
18
|
+
|
19
|
+
*.tmproj
|
20
|
+
tmtags
|
21
|
+
|
22
|
+
*~
|
23
|
+
\#*
|
24
|
+
.\#*
|
25
|
+
|
26
|
+
*.swp
|
27
|
+
tags
|
28
|
+
|
29
|
+
tmp
|
30
|
+
|
31
|
+
.redcar
|
32
|
+
|
33
|
+
*.rbc
|
34
|
+
|
35
|
+
dump.rdb
|
data/lib/pokan/server.rb
CHANGED
@@ -40,7 +40,7 @@ module Pokan
|
|
40
40
|
|
41
41
|
include ServerMessages
|
42
42
|
|
43
|
-
ON_EVENTS = [:new_key, :key_changed, :key_removed]
|
43
|
+
ON_EVENTS = [:new_key, :key_changed, :key_removed, :start, :shutdown]
|
44
44
|
BEFORE_EVENTS = [:gossip, :sync]
|
45
45
|
AFTER_EVENTS = [:gossip, :sync]
|
46
46
|
|
@@ -156,6 +156,7 @@ module Pokan
|
|
156
156
|
else
|
157
157
|
@seed_address, @seed_port = parse_host_and_port(seed)
|
158
158
|
say_hello(@seed_address, @seed_port)
|
159
|
+
build_trap
|
159
160
|
|
160
161
|
sync_with(@seed_address, options[:redis])
|
161
162
|
@event_handler.emit :after_sync
|
@@ -202,15 +203,33 @@ module Pokan
|
|
202
203
|
RequestHandler.address = address
|
203
204
|
RequestHandler.port = udp_port
|
204
205
|
|
206
|
+
@event_handler.emit :start, :with => [@address, @tcp_port, @udp_port, @epoll,
|
207
|
+
@gossip_interval, @seed_address, @seed_port]
|
208
|
+
|
205
209
|
EventMachine.open_datagram_socket address, udp_port, RequestHandler
|
206
210
|
EventMachine.start_server address, tcp_port, RequestHandler
|
207
211
|
}
|
208
212
|
end
|
209
213
|
|
214
|
+
def make_trap
|
215
|
+
trap('INT') { prepare_to_die }
|
216
|
+
trap('TERM') { prepare_to_die }
|
217
|
+
trap('QUIT') { prepare_to_die }
|
218
|
+
end
|
219
|
+
|
210
220
|
def say_hello(address, port)
|
211
221
|
Network.tcp(hello_message, address, port)
|
212
222
|
end
|
213
223
|
|
224
|
+
def prepare_to_die
|
225
|
+
say_goodbye(@seed_address, @seed_port)
|
226
|
+
@event_handler.emit :shutdown
|
227
|
+
end
|
228
|
+
|
229
|
+
def say_goodbye(address, port)
|
230
|
+
Network.tcp(goodbye_message, address, port)
|
231
|
+
end
|
232
|
+
|
214
233
|
def gossip
|
215
234
|
EventMachine.add_periodic_timer(@gossip_interval) {
|
216
235
|
query = Query.new(Peer)
|
data/lib/pokan/version.rb
CHANGED
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pokan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Renato Mascarenhas
|
@@ -11,88 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-11-
|
14
|
+
date: 2011-11-14 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
17
|
-
name: eventmachine
|
18
|
-
requirement: &4402900 !ruby/object:Gem::Requirement
|
19
|
-
none: false
|
20
|
-
requirements:
|
21
|
-
- - ! '>='
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: '0'
|
24
|
-
type: :runtime
|
25
|
-
prerelease: false
|
26
|
-
version_requirements: *4402900
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: redis
|
29
|
-
requirement: &4401200 !ruby/object:Gem::Requirement
|
30
|
-
none: false
|
31
|
-
requirements:
|
32
|
-
- - ! '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '0'
|
35
|
-
type: :runtime
|
36
|
-
prerelease: false
|
37
|
-
version_requirements: *4401200
|
38
|
-
- !ruby/object:Gem::Dependency
|
39
|
-
name: rspec
|
40
|
-
requirement: &4400540 !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ! '>='
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
|
-
type: :development
|
47
|
-
prerelease: false
|
48
|
-
version_requirements: *4400540
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: bundler
|
51
|
-
requirement: &4399740 !ruby/object:Gem::Requirement
|
52
|
-
none: false
|
53
|
-
requirements:
|
54
|
-
- - ! '>='
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version: '0'
|
57
|
-
type: :development
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: *4399740
|
60
|
-
- !ruby/object:Gem::Dependency
|
61
|
-
name: jeweler
|
62
|
-
requirement: &4398600 !ruby/object:Gem::Requirement
|
63
|
-
none: false
|
64
|
-
requirements:
|
65
|
-
- - ! '>='
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version: '0'
|
68
|
-
type: :development
|
69
|
-
prerelease: false
|
70
|
-
version_requirements: *4398600
|
71
|
-
- !ruby/object:Gem::Dependency
|
72
|
-
name: guard
|
73
|
-
requirement: &4410060 !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
|
-
requirements:
|
76
|
-
- - ! '>='
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version: '0'
|
79
|
-
type: :development
|
80
|
-
prerelease: false
|
81
|
-
version_requirements: *4410060
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: guard-rspec
|
84
|
-
requirement: &4408100 !ruby/object:Gem::Requirement
|
85
|
-
none: false
|
86
|
-
requirements:
|
87
|
-
- - ! '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: *4408100
|
93
16
|
- !ruby/object:Gem::Dependency
|
94
17
|
name: json
|
95
|
-
requirement: &
|
18
|
+
requirement: &4674160 !ruby/object:Gem::Requirement
|
96
19
|
none: false
|
97
20
|
requirements:
|
98
21
|
- - ! '>='
|
@@ -100,10 +23,10 @@ dependencies:
|
|
100
23
|
version: '0'
|
101
24
|
type: :runtime
|
102
25
|
prerelease: false
|
103
|
-
version_requirements: *
|
26
|
+
version_requirements: *4674160
|
104
27
|
- !ruby/object:Gem::Dependency
|
105
28
|
name: eventmachine
|
106
|
-
requirement: &
|
29
|
+
requirement: &4673000 !ruby/object:Gem::Requirement
|
107
30
|
none: false
|
108
31
|
requirements:
|
109
32
|
- - ! '>='
|
@@ -111,10 +34,10 @@ dependencies:
|
|
111
34
|
version: '0'
|
112
35
|
type: :runtime
|
113
36
|
prerelease: false
|
114
|
-
version_requirements: *
|
37
|
+
version_requirements: *4673000
|
115
38
|
- !ruby/object:Gem::Dependency
|
116
39
|
name: redis
|
117
|
-
requirement: &
|
40
|
+
requirement: &4671840 !ruby/object:Gem::Requirement
|
118
41
|
none: false
|
119
42
|
requirements:
|
120
43
|
- - ! '>='
|
@@ -122,7 +45,7 @@ dependencies:
|
|
122
45
|
version: '0'
|
123
46
|
type: :runtime
|
124
47
|
prerelease: false
|
125
|
-
version_requirements: *
|
48
|
+
version_requirements: *4671840
|
126
49
|
description: ! "pokan is an implementation of the Gossip protocol \n (best described
|
127
50
|
in http://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf),\n which aims to
|
128
51
|
have a simple, event based API capable of being used in large,\n not previously
|
@@ -130,11 +53,10 @@ description: ! "pokan is an implementation of the Gossip protocol \n (best de
|
|
130
53
|
email: haze-gem@googlegroups.com
|
131
54
|
executables: []
|
132
55
|
extensions: []
|
133
|
-
extra_rdoc_files:
|
134
|
-
- LICENSE.txt
|
135
|
-
- README.rdoc
|
56
|
+
extra_rdoc_files: []
|
136
57
|
files:
|
137
58
|
- .document
|
59
|
+
- .gitignore
|
138
60
|
- .rspec
|
139
61
|
- Gemfile
|
140
62
|
- Gemfile.lock
|
@@ -154,7 +76,6 @@ files:
|
|
154
76
|
- lib/pokan/server.rb
|
155
77
|
- lib/pokan/server_messages.rb
|
156
78
|
- lib/pokan/version.rb
|
157
|
-
- pokan.gemspec
|
158
79
|
- spec/pokan/connection_spec.rb
|
159
80
|
- spec/pokan/entity_spec.rb
|
160
81
|
- spec/pokan/event_handler_spec.rb
|
@@ -180,13 +101,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
180
101
|
version: '0'
|
181
102
|
segments:
|
182
103
|
- 0
|
183
|
-
hash:
|
104
|
+
hash: 3581239812678751242
|
184
105
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
106
|
none: false
|
186
107
|
requirements:
|
187
|
-
- - ! '
|
108
|
+
- - ! '>='
|
188
109
|
- !ruby/object:Gem::Version
|
189
|
-
version:
|
110
|
+
version: '0'
|
190
111
|
requirements: []
|
191
112
|
rubyforge_project:
|
192
113
|
rubygems_version: 1.8.10
|
data/pokan.gemspec
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = "pokan"
|
8
|
-
s.version = "0.1.0rc1"
|
9
|
-
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Renato Mascarenhas", "Rafael Regis do Prado", "Fabio Lima Pereira"]
|
12
|
-
s.date = "2011-11-10"
|
13
|
-
s.description = "pokan is an implementation of the Gossip protocol \n (best described in http://www.cs.cornell.edu/home/rvr/papers/flowgossip.pdf),\n which aims to have a simple, event based API capable of being used in large,\n not previously known networks."
|
14
|
-
s.email = "haze-gem@googlegroups.com"
|
15
|
-
s.files = [
|
16
|
-
"pokan.gemspec"
|
17
|
-
]
|
18
|
-
s.homepage = "http://github.com/haze/pokan"
|
19
|
-
s.licenses = ["MIT"]
|
20
|
-
s.require_paths = ["lib"]
|
21
|
-
s.rubygems_version = "1.8.10"
|
22
|
-
s.summary = "Gossip-protocol implementation with an event based API"
|
23
|
-
|
24
|
-
if s.respond_to? :specification_version then
|
25
|
-
s.specification_version = 3
|
26
|
-
|
27
|
-
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
28
|
-
s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
|
29
|
-
s.add_runtime_dependency(%q<redis>, [">= 0"])
|
30
|
-
s.add_development_dependency(%q<rspec>, [">= 0"])
|
31
|
-
s.add_development_dependency(%q<bundler>, [">= 0"])
|
32
|
-
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
33
|
-
s.add_development_dependency(%q<guard>, [">= 0"])
|
34
|
-
s.add_development_dependency(%q<guard-rspec>, [">= 0"])
|
35
|
-
else
|
36
|
-
s.add_dependency(%q<eventmachine>, [">= 0"])
|
37
|
-
s.add_dependency(%q<redis>, [">= 0"])
|
38
|
-
s.add_dependency(%q<rspec>, [">= 0"])
|
39
|
-
s.add_dependency(%q<bundler>, [">= 0"])
|
40
|
-
s.add_dependency(%q<jeweler>, [">= 0"])
|
41
|
-
s.add_dependency(%q<guard>, [">= 0"])
|
42
|
-
s.add_dependency(%q<guard-rspec>, [">= 0"])
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|