beetle 0.3.9 → 0.3.10
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 +4 -4
- data/README.rdoc +18 -1
- data/lib/beetle/message.rb +1 -0
- data/lib/beetle/version.rb +1 -1
- data/test/beetle/message_test.rb +40 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11f94ebbdbb2e69a8f9253fd4bae0141b8c461ed
|
4
|
+
data.tar.gz: 6fb4333ff041cc5451ddeee58b9f1dda90287b40
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26833cddbdca71091b8b4be60ffa8880e10542999aac278fd2ac64af27760ba9024f80f2716fccea7a2a57c26db0618b0425f01c831c2c6f66536aa13ba06f9a
|
7
|
+
data.tar.gz: b226d364d7aa0e135a8d5cebaf5ab5ac1ac7b7eab6d2758ddbb8032a2a3b6b37261b5ed738a680d3d252171ad8d0418590d4f9ecb940bd91d6083dccad0befe0
|
data/README.rdoc
CHANGED
@@ -60,6 +60,19 @@ To set up a redundant messaging system you will need
|
|
60
60
|
* at least 2 AMQP servers (we use {RabbitMQ}[http://www.rabbitmq.com/])
|
61
61
|
* at least one {Redis}[http://github.com/antirez/redis] server (better are two in a master/slave setup, see REDIS_AUTO_FAILOVER.rdoc)
|
62
62
|
|
63
|
+
== Test environment
|
64
|
+
|
65
|
+
For testing purposes, you will need a MySQL database with the database
|
66
|
+
`beetle_test` created. This is needed to test special cases in which
|
67
|
+
Beetle handles the connection with ActiveRecord:
|
68
|
+
|
69
|
+
mysql -e 'create database beetle_test;'
|
70
|
+
|
71
|
+
You also need a Redis instance running. The default configuration of Redis will work:
|
72
|
+
|
73
|
+
redis-server
|
74
|
+
|
75
|
+
|
63
76
|
== Gem Dependencies
|
64
77
|
|
65
78
|
At runtime, Beetle will use
|
@@ -70,7 +83,7 @@ At runtime, Beetle will use
|
|
70
83
|
* {amqp}[http://github.com/ruby-amqp/amqp]
|
71
84
|
(which is based on {eventmachine}[http://github.com/eventmachine/eventmachine])
|
72
85
|
* {daemons}[http://daemons.rubyforge.org/]
|
73
|
-
* activesupport
|
86
|
+
* {activesupport}[https://github.com/rails/rails/tree/master/activesupport]
|
74
87
|
|
75
88
|
For development, you'll need
|
76
89
|
* {mocha}[http://github.com/floehopper/mocha]
|
@@ -78,6 +91,10 @@ For development, you'll need
|
|
78
91
|
* {cucumber}[http://github.com/aslakhellesoy/cucumber]
|
79
92
|
* {daemon_controller}[http://github.com/FooBarWidget/daemon_controller]
|
80
93
|
|
94
|
+
For tests, you'll need
|
95
|
+
* {activerecord}[https://github.com/rails/rails/tree/master/activerecord]
|
96
|
+
* {mysql2}[https://github.com/brianmario/mysql2/]
|
97
|
+
|
81
98
|
== Authors
|
82
99
|
|
83
100
|
{Stefan Kaes}[http://github.com/skaes],
|
data/lib/beetle/message.rb
CHANGED
@@ -292,6 +292,7 @@ module Beetle
|
|
292
292
|
Timer.timeout(@timeout.to_f) { @handler_result = handler.call(self) }
|
293
293
|
RC::OK
|
294
294
|
rescue Exception => @exception
|
295
|
+
ActiveRecord::Base.clear_all_connections! if defined?(ActiveRecord)
|
295
296
|
Beetle::reraise_expectation_errors!
|
296
297
|
logger.debug "Beetle: message handler crashed on #{msg_id}"
|
297
298
|
RC::HandlerCrash
|
data/lib/beetle/version.rb
CHANGED
data/test/beetle/message_test.rb
CHANGED
@@ -622,6 +622,46 @@ module Beetle
|
|
622
622
|
|
623
623
|
end
|
624
624
|
|
625
|
+
class MySQLFailoverTest < MiniTest::Unit::TestCase
|
626
|
+
require "active_record"
|
627
|
+
|
628
|
+
def setup
|
629
|
+
@store = DeduplicationStore.new
|
630
|
+
@store.flushdb
|
631
|
+
|
632
|
+
ActiveRecord::Base.establish_connection(
|
633
|
+
adapter: "mysql2",
|
634
|
+
database: "beetle_test",
|
635
|
+
username: "root",
|
636
|
+
encoding: "utf8"
|
637
|
+
)
|
638
|
+
end
|
639
|
+
|
640
|
+
test "a handler that drops a MySQL query ensures the connection still works" do
|
641
|
+
header = header_with_params({})
|
642
|
+
header.expects(:ack)
|
643
|
+
message = Message.new("somequeue", header, "foo", :timeout => 1.second, :attempts => 2, :store => @store)
|
644
|
+
action = lambda do |*args|
|
645
|
+
# the timeout should stop the query before it finishes.
|
646
|
+
ActiveRecord::Base.connection.execute("select sleep(6);")
|
647
|
+
end
|
648
|
+
handler = Handler.create(action)
|
649
|
+
result = message.process(handler)
|
650
|
+
assert_equal RC::ExceptionsLimitReached, result
|
651
|
+
|
652
|
+
# second message should process without problems
|
653
|
+
second_header = header_with_params({})
|
654
|
+
second_header.expects(:ack)
|
655
|
+
second_message = Message.new("somequeue", second_header, "foo2", :timeout => 2.seconds, :attempts => 1, :store => @store)
|
656
|
+
second_action = lambda do |*args|
|
657
|
+
ActiveRecord::Base.connection.execute("select 1;")
|
658
|
+
end
|
659
|
+
second_handler = Handler.create(second_action)
|
660
|
+
second_result = second_message.process(second_handler)
|
661
|
+
assert_equal RC::OK, second_result
|
662
|
+
end
|
663
|
+
end
|
664
|
+
|
625
665
|
class SettingsTest < MiniTest::Unit::TestCase
|
626
666
|
def setup
|
627
667
|
@store = DeduplicationStore.new
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beetle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stefan Kaes
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2014-12-
|
15
|
+
date: 2014-12-09 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: uuid4r
|
@@ -268,7 +268,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
268
268
|
version: 1.3.7
|
269
269
|
requirements: []
|
270
270
|
rubyforge_project:
|
271
|
-
rubygems_version: 2.
|
271
|
+
rubygems_version: 2.4.3
|
272
272
|
signing_key:
|
273
273
|
specification_version: 3
|
274
274
|
summary: High Availability AMQP Messaging with Redundant Queues
|