beetle 0.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. data/README.rdoc +18 -8
  2. data/beetle.gemspec +37 -121
  3. data/bin/beetle +9 -0
  4. data/examples/README.rdoc +0 -2
  5. data/examples/rpc.rb +3 -2
  6. data/ext/mkrf_conf.rb +19 -0
  7. data/lib/beetle.rb +2 -2
  8. data/lib/beetle/base.rb +1 -8
  9. data/lib/beetle/client.rb +16 -14
  10. data/lib/beetle/commands.rb +30 -0
  11. data/lib/beetle/commands/configuration_client.rb +73 -0
  12. data/lib/beetle/commands/configuration_server.rb +85 -0
  13. data/lib/beetle/configuration.rb +70 -7
  14. data/lib/beetle/deduplication_store.rb +50 -38
  15. data/lib/beetle/handler.rb +2 -5
  16. data/lib/beetle/logging.rb +7 -0
  17. data/lib/beetle/message.rb +11 -13
  18. data/lib/beetle/publisher.rb +12 -4
  19. data/lib/beetle/r_c.rb +2 -1
  20. data/lib/beetle/redis_configuration_client.rb +136 -0
  21. data/lib/beetle/redis_configuration_server.rb +301 -0
  22. data/lib/beetle/redis_ext.rb +79 -0
  23. data/lib/beetle/redis_master_file.rb +35 -0
  24. data/lib/beetle/redis_server_info.rb +65 -0
  25. data/lib/beetle/subscriber.rb +4 -1
  26. data/test/beetle/configuration_test.rb +14 -2
  27. data/test/beetle/deduplication_store_test.rb +61 -43
  28. data/test/beetle/message_test.rb +28 -4
  29. data/test/beetle/publisher_test.rb +17 -3
  30. data/test/beetle/redis_configuration_client_test.rb +97 -0
  31. data/test/beetle/redis_configuration_server_test.rb +278 -0
  32. data/test/beetle/redis_ext_test.rb +71 -0
  33. data/test/beetle/redis_master_file_test.rb +39 -0
  34. data/test/test_helper.rb +13 -1
  35. metadata +162 -69
  36. data/.gitignore +0 -5
  37. data/MIT-LICENSE +0 -20
  38. data/Rakefile +0 -114
  39. data/TODO +0 -7
  40. data/etc/redis-master.conf +0 -189
  41. data/etc/redis-slave.conf +0 -189
  42. data/examples/redis_failover.rb +0 -65
  43. data/script/start_rabbit +0 -29
  44. data/snafu.rb +0 -55
  45. data/test/beetle.yml +0 -81
  46. data/test/beetle/bla.rb +0 -0
  47. data/tmp/master/.gitignore +0 -2
  48. data/tmp/slave/.gitignore +0 -3
data/test/test_helper.rb CHANGED
@@ -2,7 +2,10 @@ require 'rubygems'
2
2
  require 'active_support'
3
3
  require 'active_support/testing/declarative'
4
4
  require 'test/unit'
5
- require 'redgreen' unless ENV['TM_FILENAME'] rescue nil
5
+ begin
6
+ require 'redgreen' unless ENV['TM_FILENAME']
7
+ rescue MissingSourceFile
8
+ end
6
9
  require 'mocha'
7
10
  require File.expand_path(File.dirname(__FILE__) + '/../lib/beetle')
8
11
 
@@ -10,7 +13,9 @@ class Test::Unit::TestCase
10
13
  extend ActiveSupport::Testing::Declarative
11
14
  end
12
15
 
16
+
13
17
  Beetle.config.logger = Logger.new(File.dirname(__FILE__) + '/../test.log')
18
+ Beetle.config.redis_server = "localhost:6379"
14
19
 
15
20
  def header_with_params(opts = {})
16
21
  beetle_headers = Beetle::Message.publishing_options(opts)
@@ -18,3 +23,10 @@ def header_with_params(opts = {})
18
23
  header.stubs(:properties).returns(beetle_headers)
19
24
  header
20
25
  end
26
+
27
+ def redis_stub(name, opts = {})
28
+ default_port = opts['port'] || "1234"
29
+ default_host = opts['host'] || "foo"
30
+ opts = {'host' => default_host, 'port' => default_port, 'server' => "#{default_host}:#{default_port}"}.update(opts)
31
+ stub(name, opts)
32
+ end
metadata CHANGED
@@ -1,133 +1,221 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beetle
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
5
11
  platform: ruby
6
12
  authors:
7
13
  - Stefan Kaes
8
14
  - Pascal Friederich
9
15
  - Ali Jelveh
16
+ - Sebastian Roebke
10
17
  autorequire:
11
18
  bindir: bin
12
19
  cert_chain: []
13
20
 
14
- date: 2010-04-14 00:00:00 +02:00
15
- default_executable:
21
+ date: 2010-07-22 00:00:00 +02:00
22
+ default_executable: beetle
16
23
  dependencies:
17
24
  - !ruby/object:Gem::Dependency
18
25
  name: uuid4r
19
- type: :runtime
20
- version_requirement:
21
- version_requirements: !ruby/object:Gem::Requirement
26
+ prerelease: false
27
+ requirement: &id001 !ruby/object:Gem::Requirement
28
+ none: false
22
29
  requirements:
23
30
  - - ">="
24
31
  - !ruby/object:Gem::Version
32
+ hash: 25
33
+ segments:
34
+ - 0
35
+ - 1
36
+ - 1
25
37
  version: 0.1.1
26
- version:
38
+ type: :runtime
39
+ version_requirements: *id001
27
40
  - !ruby/object:Gem::Dependency
28
41
  name: bunny
29
- type: :runtime
30
- version_requirement:
31
- version_requirements: !ruby/object:Gem::Requirement
42
+ prerelease: false
43
+ requirement: &id002 !ruby/object:Gem::Requirement
44
+ none: false
32
45
  requirements:
33
46
  - - ">="
34
47
  - !ruby/object:Gem::Version
48
+ hash: 7
49
+ segments:
50
+ - 0
51
+ - 6
52
+ - 0
35
53
  version: 0.6.0
36
- version:
54
+ type: :runtime
55
+ version_requirements: *id002
37
56
  - !ruby/object:Gem::Dependency
38
57
  name: redis
39
- type: :runtime
40
- version_requirement:
41
- version_requirements: !ruby/object:Gem::Requirement
58
+ prerelease: false
59
+ requirement: &id003 !ruby/object:Gem::Requirement
60
+ none: false
42
61
  requirements:
43
62
  - - ">="
44
63
  - !ruby/object:Gem::Version
45
- version: 0.1.2
46
- version:
64
+ hash: 9
65
+ segments:
66
+ - 2
67
+ - 0
68
+ - 3
69
+ version: 2.0.3
70
+ type: :runtime
71
+ version_requirements: *id003
47
72
  - !ruby/object:Gem::Dependency
48
73
  name: amqp
49
- type: :runtime
50
- version_requirement:
51
- version_requirements: !ruby/object:Gem::Requirement
74
+ prerelease: false
75
+ requirement: &id004 !ruby/object:Gem::Requirement
76
+ none: false
52
77
  requirements:
53
78
  - - ">="
54
79
  - !ruby/object:Gem::Version
80
+ hash: 9
81
+ segments:
82
+ - 0
83
+ - 6
84
+ - 7
55
85
  version: 0.6.7
56
- version:
86
+ type: :runtime
87
+ version_requirements: *id004
57
88
  - !ruby/object:Gem::Dependency
58
89
  name: activesupport
59
- type: :runtime
60
- version_requirement:
61
- version_requirements: !ruby/object:Gem::Requirement
90
+ prerelease: false
91
+ requirement: &id005 !ruby/object:Gem::Requirement
92
+ none: false
62
93
  requirements:
63
94
  - - ">="
64
95
  - !ruby/object:Gem::Version
96
+ hash: 11
97
+ segments:
98
+ - 2
99
+ - 3
100
+ - 4
65
101
  version: 2.3.4
66
- version:
102
+ type: :runtime
103
+ version_requirements: *id005
104
+ - !ruby/object:Gem::Dependency
105
+ name: daemons
106
+ prerelease: false
107
+ requirement: &id006 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ hash: 3
113
+ segments:
114
+ - 1
115
+ - 0
116
+ - 10
117
+ version: 1.0.10
118
+ type: :runtime
119
+ version_requirements: *id006
67
120
  - !ruby/object:Gem::Dependency
68
121
  name: mocha
69
- type: :development
70
- version_requirement:
71
- version_requirements: !ruby/object:Gem::Requirement
122
+ prerelease: false
123
+ requirement: &id007 !ruby/object:Gem::Requirement
124
+ none: false
72
125
  requirements:
73
126
  - - ">="
74
127
  - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
75
131
  version: "0"
76
- version:
132
+ type: :development
133
+ version_requirements: *id007
77
134
  - !ruby/object:Gem::Dependency
78
135
  name: rcov
136
+ prerelease: false
137
+ requirement: &id008 !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
79
146
  type: :development
80
- version_requirement:
81
- version_requirements: !ruby/object:Gem::Requirement
147
+ version_requirements: *id008
148
+ - !ruby/object:Gem::Dependency
149
+ name: cucumber
150
+ prerelease: false
151
+ requirement: &id009 !ruby/object:Gem::Requirement
152
+ none: false
82
153
  requirements:
83
154
  - - ">="
84
155
  - !ruby/object:Gem::Version
156
+ hash: 7
157
+ segments:
158
+ - 0
159
+ - 7
160
+ - 2
161
+ version: 0.7.2
162
+ type: :development
163
+ version_requirements: *id009
164
+ - !ruby/object:Gem::Dependency
165
+ name: daemon_controller
166
+ prerelease: false
167
+ requirement: &id010 !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ hash: 3
173
+ segments:
174
+ - 0
85
175
  version: "0"
86
- version:
176
+ type: :development
177
+ version_requirements: *id010
87
178
  description: A highly available, reliable messaging infrastructure
88
179
  email: developers@xing.com
89
- executables: []
90
-
91
- extensions: []
92
-
180
+ executables:
181
+ - beetle
182
+ extensions:
183
+ - ext/mkrf_conf.rb
93
184
  extra_rdoc_files:
94
185
  - README.rdoc
95
- - TODO
96
186
  files:
97
- - .gitignore
98
- - MIT-LICENSE
99
- - README.rdoc
100
- - Rakefile
101
- - TODO
102
- - beetle.gemspec
103
- - doc/redundant_queues.graffle
104
- - etc/redis-master.conf
105
- - etc/redis-slave.conf
106
- - examples/README.rdoc
107
187
  - examples/attempts.rb
108
188
  - examples/handler_class.rb
109
189
  - examples/handling_exceptions.rb
110
190
  - examples/multiple_exchanges.rb
111
191
  - examples/multiple_queues.rb
112
- - examples/redis_failover.rb
113
192
  - examples/redundant.rb
114
193
  - examples/rpc.rb
115
194
  - examples/simple.rb
116
- - lib/beetle.rb
195
+ - ext/mkrf_conf.rb
117
196
  - lib/beetle/base.rb
118
197
  - lib/beetle/client.rb
198
+ - lib/beetle/commands/configuration_client.rb
199
+ - lib/beetle/commands/configuration_server.rb
200
+ - lib/beetle/commands.rb
119
201
  - lib/beetle/configuration.rb
120
202
  - lib/beetle/deduplication_store.rb
121
203
  - lib/beetle/handler.rb
204
+ - lib/beetle/logging.rb
122
205
  - lib/beetle/message.rb
123
206
  - lib/beetle/publisher.rb
124
207
  - lib/beetle/r_c.rb
208
+ - lib/beetle/redis_configuration_client.rb
209
+ - lib/beetle/redis_configuration_server.rb
210
+ - lib/beetle/redis_ext.rb
211
+ - lib/beetle/redis_master_file.rb
212
+ - lib/beetle/redis_server_info.rb
125
213
  - lib/beetle/subscriber.rb
126
- - script/start_rabbit
127
- - snafu.rb
128
- - test/beetle.yml
214
+ - lib/beetle.rb
215
+ - beetle.gemspec
216
+ - examples/README.rdoc
217
+ - README.rdoc
129
218
  - test/beetle/base_test.rb
130
- - test/beetle/bla.rb
131
219
  - test/beetle/client_test.rb
132
220
  - test/beetle/configuration_test.rb
133
221
  - test/beetle/deduplication_store_test.rb
@@ -135,42 +223,52 @@ files:
135
223
  - test/beetle/message_test.rb
136
224
  - test/beetle/publisher_test.rb
137
225
  - test/beetle/r_c_test.rb
226
+ - test/beetle/redis_configuration_client_test.rb
227
+ - test/beetle/redis_configuration_server_test.rb
228
+ - test/beetle/redis_ext_test.rb
229
+ - test/beetle/redis_master_file_test.rb
138
230
  - test/beetle/subscriber_test.rb
139
231
  - test/beetle_test.rb
140
232
  - test/test_helper.rb
141
- - tmp/master/.gitignore
142
- - tmp/slave/.gitignore
233
+ - bin/beetle
143
234
  has_rdoc: true
144
235
  homepage: http://xing.github.com/beetle/
145
236
  licenses: []
146
237
 
147
- post_install_message:
238
+ post_install_message: " *********************************************************************************************\n\n If you're running a ruby version < 1.9 we silently installed the SystemTimer gem for you.\n See: http://ph7spot.com/musings/system-timer\n\n *********************************************************************************************\n"
148
239
  rdoc_options:
149
240
  - --charset=UTF-8
150
241
  require_paths:
151
242
  - lib
152
243
  required_ruby_version: !ruby/object:Gem::Requirement
244
+ none: false
153
245
  requirements:
154
246
  - - ">="
155
247
  - !ruby/object:Gem::Version
248
+ hash: 3
249
+ segments:
250
+ - 0
156
251
  version: "0"
157
- version:
158
252
  required_rubygems_version: !ruby/object:Gem::Requirement
253
+ none: false
159
254
  requirements:
160
255
  - - ">="
161
256
  - !ruby/object:Gem::Version
162
- version: "0"
163
- version:
257
+ hash: 25
258
+ segments:
259
+ - 1
260
+ - 3
261
+ - 1
262
+ version: 1.3.1
164
263
  requirements: []
165
264
 
166
265
  rubyforge_project:
167
- rubygems_version: 1.3.5
266
+ rubygems_version: 1.3.7
168
267
  signing_key:
169
268
  specification_version: 3
170
269
  summary: High Availability AMQP Messaging with Redundant Queues
171
270
  test_files:
172
271
  - test/beetle/base_test.rb
173
- - test/beetle/bla.rb
174
272
  - test/beetle/client_test.rb
175
273
  - test/beetle/configuration_test.rb
176
274
  - test/beetle/deduplication_store_test.rb
@@ -178,15 +276,10 @@ test_files:
178
276
  - test/beetle/message_test.rb
179
277
  - test/beetle/publisher_test.rb
180
278
  - test/beetle/r_c_test.rb
279
+ - test/beetle/redis_configuration_client_test.rb
280
+ - test/beetle/redis_configuration_server_test.rb
281
+ - test/beetle/redis_ext_test.rb
282
+ - test/beetle/redis_master_file_test.rb
181
283
  - test/beetle/subscriber_test.rb
182
284
  - test/beetle_test.rb
183
285
  - test/test_helper.rb
184
- - examples/attempts.rb
185
- - examples/handler_class.rb
186
- - examples/handling_exceptions.rb
187
- - examples/multiple_exchanges.rb
188
- - examples/multiple_queues.rb
189
- - examples/redis_failover.rb
190
- - examples/redundant.rb
191
- - examples/rpc.rb
192
- - examples/simple.rb
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- *.log
2
- doc
3
- pkg
4
- site
5
- test/coverage
data/MIT-LICENSE DELETED
@@ -1,20 +0,0 @@
1
- Copyright (c) 2010 XING AG
2
-
3
- Permission is hereby granted, free of charge, to any person obtaining
4
- a copy of this software and associated documentation files (the
5
- "Software"), to deal in the Software without restriction, including
6
- without limitation the rights to use, copy, modify, merge, publish,
7
- distribute, sublicense, and/or sell copies of the Software, and to
8
- permit persons to whom the Software is furnished to do so, subject to
9
- the following conditions:
10
-
11
- The above copyright notice and this permission notice shall be
12
- included in all copies or substantial portions of the Software.
13
-
14
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile DELETED
@@ -1,114 +0,0 @@
1
- require 'rake'
2
- require 'rake/testtask'
3
- require 'lib/beetle'
4
- require 'rcov/rcovtask'
5
-
6
- namespace :test do
7
- namespace :coverage do
8
- desc "Delete aggregate coverage data."
9
- task(:clean) { rm_f "coverage.data" }
10
- end
11
-
12
- desc 'Aggregate code coverage'
13
- task :coverage => "test:coverage:clean"
14
-
15
- Rcov::RcovTask.new(:coverage) do |t|
16
- t.libs << "test"
17
- t.test_files = FileList["test/**/*_test.rb"]
18
- t.output_dir = "test/coverage"
19
- t.verbose = true
20
- t.rcov_opts << "--exclude '.*' --include-file 'lib/beetle/'"
21
- end
22
- task :coverage do
23
- system 'open test/coverage/index.html'
24
- end if RUBY_PLATFORM =~ /darwin/
25
- end
26
-
27
-
28
- namespace :beetle do
29
- task :test do
30
- Beetle::Client.new.test
31
- end
32
-
33
- task :trace do
34
- trap('INT'){ EM.stop_event_loop }
35
- Beetle::Client.new.trace
36
- end
37
- end
38
-
39
- namespace :rabbit do
40
- def start(node_name, port)
41
- script = File.expand_path(File.dirname(__FILE__)+"/script/start_rabbit")
42
- puts "starting rabbit #{node_name} on port #{port}"
43
- puts "type ^C a RETURN to abort"
44
- sleep 1
45
- exec "sudo #{script} #{node_name} #{port}"
46
- end
47
- desc "start rabbit instance 1"
48
- task :start1 do
49
- start "rabbit1", 5672
50
- end
51
- desc "start rabbit instance 2"
52
- task :start2 do
53
- start "rabbit2", 5673
54
- end
55
- end
56
-
57
- namespace :redis do
58
- def config_file(suffix)
59
- File.expand_path(File.dirname(__FILE__)+"/etc/redis-#{suffix}.conf")
60
- end
61
- desc "start main redis"
62
- task :start1 do
63
- exec "redis-server #{config_file(:master)}"
64
- end
65
- desc "start slave redis"
66
- task :start2 do
67
- exec "redis-server #{config_file(:slave)}"
68
- end
69
- end
70
-
71
- task :default do
72
- Rake::Task[:test].invoke
73
- end
74
-
75
- Rake::TestTask.new do |t|
76
- t.libs << "test"
77
- t.test_files = FileList['test/**/*_test.rb']
78
- t.verbose = true
79
- end
80
-
81
- require 'rake/rdoctask'
82
-
83
- Rake::RDocTask.new do |rdoc|
84
- rdoc.rdoc_dir = 'site/rdoc'
85
- rdoc.title = 'Beetle'
86
- rdoc.options << '--line-numbers' << '--inline-source' << '--quiet'
87
- rdoc.rdoc_files.include('README.rdoc')
88
- rdoc.rdoc_files.include('lib/**/*.rb')
89
- end
90
-
91
- begin
92
- require 'jeweler'
93
- Jeweler::Tasks.new do |gemspec|
94
- gemspec.name = 'beetle'
95
- gemspec.version = '0.1'
96
- gemspec.summary = "High Availability AMQP Messaging with Redundant Queues"
97
- gemspec.description = "A highly available, reliable messaging infrastructure"
98
- gemspec.email = "developers@xing.com"
99
- gemspec.homepage = "http://xing.github.com/beetle/"
100
- gemspec.authors = ["Stefan Kaes", "Pascal Friederich", "Ali Jelveh"]
101
- gemspec.add_dependency('uuid4r', '>=0.1.1')
102
- gemspec.add_dependency('bunny', '>=0.6.0')
103
- gemspec.add_dependency('redis', '>=0.1.2')
104
- gemspec.add_dependency('amqp', '>=0.6.7')
105
- gemspec.add_dependency('activesupport', '>=2.3.4')
106
-
107
- gemspec.add_development_dependency('mocha')
108
- gemspec.add_development_dependency('rcov')
109
- end
110
- Jeweler::GemcutterTasks.new
111
- rescue LoadError
112
- # puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
113
- end
114
-