superbolt 0.5.2 → 0.5.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 968ca2d1026ac1b168a119f49a57c5f5c5bbf107
4
- data.tar.gz: b8c817960cf0a1d73ace5eb4068eb35af4fb18b5
3
+ metadata.gz: b431fab064f963b74d22ee65e00ff416d9272241
4
+ data.tar.gz: b06b856a6793911ba2f2d225e681401951084493
5
5
  SHA512:
6
- metadata.gz: ebad807328b0aaa33ca84477e517fc9c4655709a942d3143ac2563c38b4d6fe83729394b6365b1d8174c0a1cd1a4ca67b8757f8ef1aab7c9f8ce74f8f0dc9934
7
- data.tar.gz: b37936716e7266e02c914a76c9eeb3a4da53059cacd62ea7b8d635a1098620c09a4e984abe0964b88623c6566d393e2b2fbb20ae02de8ec08713462798d7a8ce
6
+ metadata.gz: 37f36e6ac9a18ab4318d2b57f91ff11576e61b32e56cfa13925fa89e786d7dd01ddb2ca470ed534acaaf7b43ad8b2d9443a9a891d46b1e9ab4f0665a338dfcee
7
+ data.tar.gz: 18f8123f5ce8aba012e1af2bc1ba64dd7f2ccd8ecc6b67f96b7bf54511a0729f294bbb6f8d376081a8b978bddf0e42da0acab27396abd82b1d7780bce682452a
@@ -25,6 +25,7 @@ require "superbolt/runner/ack_one"
25
25
  require "superbolt/runner/ack"
26
26
  require "superbolt/runner/pop"
27
27
  require "superbolt/runner/greedy"
28
+ require "superbolt/runner/active_record_deferrable"
28
29
 
29
30
  require "superbolt/queue"
30
31
  require "superbolt/incoming_message"
@@ -1,13 +1,12 @@
1
1
  module Superbolt
2
2
  class App
3
- attr_reader :config, :env, :runner_type
3
+ attr_reader :config, :env
4
4
  attr_accessor :logger
5
5
 
6
6
  def initialize(name, options={})
7
7
  @name = name
8
8
  @env = options[:env] || Superbolt.env
9
9
  @logger = options[:logger] || Logger.new($stdout)
10
- @runner_type = options[:runner] || :default
11
10
  @config = options[:config] || Superbolt.config
12
11
  end
13
12
 
@@ -44,7 +43,7 @@ module Superbolt
44
43
  EventMachine.run do
45
44
  queue.channel.auto_recovery = true
46
45
 
47
- # LShift came up with this solution, which helps reconnect when
46
+ # LShift came up with this solution, which helps reconnect when
48
47
  # a process runs longer than the heartbeat (and therefore disconnects)
49
48
  queue.channel.connection.on_tcp_connection_loss do |conn, settings|
50
49
  puts 'Lost TCP connection, reconnecting'
@@ -60,7 +59,7 @@ module Superbolt
60
59
  end
61
60
 
62
61
  def runner_class
63
- runner_map[runner_type] || default_runner
62
+ runner_map[config.runner_type] || default_runner
64
63
  end
65
64
 
66
65
  def runner_map
@@ -68,7 +67,8 @@ module Superbolt
68
67
  pop: Runner::Pop,
69
68
  ack_one: Runner::AckOne,
70
69
  ack: Runner::Ack,
71
- greedy: Runner::Greedy
70
+ greedy: Runner::Greedy,
71
+ ar_deferrable: Runner::ActiveRecordDeferrable
72
72
  }
73
73
  end
74
74
 
@@ -23,6 +23,10 @@ module Superbolt
23
23
  options[:connection_key] || 'RABBITMQ_URL'
24
24
  end
25
25
 
26
+ def runner_type
27
+ options[:runner_type_key] ? ENV[options[:runner_type_key]].to_sym : :default
28
+ end
29
+
26
30
  def env_params
27
31
  ENV[env_connection_key]
28
32
  end
@@ -0,0 +1,13 @@
1
+ module Superbolt
2
+ module Runner
3
+ class ActiveRecordDeferrable < AckOne
4
+ def before_fork
5
+ ActiveRecord::Base.connection.disconnect!
6
+ end
7
+
8
+ def after_fork
9
+ ActiveRecord::Base.establish_connection
10
+ end
11
+ end
12
+ end
13
+ end
@@ -14,7 +14,11 @@ module Superbolt
14
14
  queue.subscribe(ack: ack) do |metadata, payload|
15
15
  #Thanks again to LShift for this solution to long-running processes
16
16
  #Defer keeps heartbeat running while the process finishes
17
+
18
+ before_fork
17
19
  EM.defer do
20
+ after_fork
21
+
18
22
  # this gets run on the thread pool
19
23
  message = Superbolt::IncomingMessage.new(metadata, payload, channel)
20
24
  processor = Superbolt::Processor.new(message, logger, &block)
@@ -35,6 +39,14 @@ module Superbolt
35
39
 
36
40
  def prefetch
37
41
  end
42
+
43
+ def before_fork
44
+ # Implement me in da subclass
45
+ end
46
+
47
+ def after_fork
48
+ # Implement me in da subclass
49
+ end
38
50
  end
39
51
  end
40
52
  end
@@ -1,3 +1,3 @@
1
1
  module Superbolt
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  # assumes an environment task that sets up your app environment
2
2
  desc "worker that reads the queue and sends messages through the router as configured"
3
3
  task :superbolt => :environment do
4
- Superbolt::App.new(Superbolt.app_name).run do |message, logger|
4
+ Superbolt::App.new(Superbolt.app_name, {}).run do |message, logger|
5
5
  Superbolt::Router.new(message, logger).perform
6
6
  end
7
7
  end
@@ -104,6 +104,12 @@ describe Superbolt::App do
104
104
  it_should_behave_like "app"
105
105
  end
106
106
 
107
+ context 'when runner acknowledges one and uses activerecord deferrable' do
108
+ let(:runner_type) { :ar_deferrable }
109
+
110
+ it_should_behave_like "app"
111
+ end
112
+
107
113
  context 'when runner acknowledges without a prefetch limit' do
108
114
  let(:runner_type) { :ack }
109
115
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: superbolt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - socialchorus
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-13 00:00:00.000000000 Z
11
+ date: 2014-02-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -156,6 +156,7 @@ files:
156
156
  - lib/superbolt/router.rb
157
157
  - lib/superbolt/runner/ack.rb
158
158
  - lib/superbolt/runner/ack_one.rb
159
+ - lib/superbolt/runner/active_record_deferrable.rb
159
160
  - lib/superbolt/runner/base.rb
160
161
  - lib/superbolt/runner/default.rb
161
162
  - lib/superbolt/runner/greedy.rb
@@ -199,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
199
200
  version: '0'
200
201
  requirements: []
201
202
  rubyforge_project:
202
- rubygems_version: 2.0.3
203
+ rubygems_version: 2.0.2
203
204
  signing_key:
204
205
  specification_version: 4
205
206
  summary: Superbolt is a gem that makes SOA intra-app communication easy, via RabbitMQ