superbolt 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
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