beetle 0.1 → 0.2.1

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