modern_times 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
data/History.md CHANGED
@@ -1,6 +1,11 @@
1
1
  ModernTimes Changelog
2
2
  =====================
3
3
 
4
+ 0.3.11
5
+ -----
6
+
7
+ - Dummy publishing mode was not thread safe
8
+
4
9
  0.3.10
5
10
  -----
6
11
 
data/Rakefile CHANGED
@@ -13,6 +13,7 @@ begin
13
13
  gemspec.homepage = 'http://github.com/ClarityServices/modern_times'
14
14
  gemspec.add_dependency 'jruby-jms', ['>= 0.11.2']
15
15
  gemspec.add_dependency 'jmx', ['>= 0.6']
16
+ gemspec.add_dependency 'gene_pool'
16
17
  end
17
18
  rescue LoadError
18
19
  puts 'Jeweler not available. Install it with: gem install jeweler'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.10
1
+ 0.3.11
@@ -82,30 +82,32 @@ module ModernTimes
82
82
  dummy_handle = PublishHandle.new(self, nil, Time.now)
83
83
  # Model real queue marshaling/unmarshaling
84
84
  trans_object = @marshaler.unmarshal(@marshaler.marshal(object))
85
- @@workers.each do |worker|
86
- if ModernTimes::JMS.same_destination?(@producer_options, worker.destination_options)
87
- if worker.kind_of?(RequestWorker)
88
- ModernTimes.logger.debug "Dummy request publishing #{trans_object} to #{worker}"
89
- m = worker.marshaler
90
- # Model real queue marshaling/unmarshaling
91
- begin
92
- response_object = m.unmarshal(m.marshal(worker.request(trans_object)))
93
- dummy_handle.add_dummy_response(worker.name, response_object)
94
- rescue Exception => e
95
- ModernTimes.logger.error("#{worker} Exception: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
96
- dummy_handle.add_dummy_response(worker.name, ModernTimes::RemoteException.new(e))
97
- end
98
- begin
99
- worker.post_request(trans_object)
100
- rescue Exception => e
101
- ModernTimes.logger.error("#{worker} Exception in post_request: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
102
- end
103
- elsif worker.kind_of?(Worker)
104
- ModernTimes.logger.debug "Dummy publishing #{trans_object} to #{worker}"
105
- begin
106
- worker.perform(trans_object)
107
- rescue Exception => e
108
- ModernTimes.logger.error("#{worker} Exception: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
85
+ @@worker_pools.each do |worker_pool|
86
+ worker_pool.with_connection do |worker|
87
+ if ModernTimes::JMS.same_destination?(@producer_options, worker.destination_options)
88
+ if worker.kind_of?(RequestWorker)
89
+ ModernTimes.logger.debug "Dummy request publishing #{trans_object} to #{worker}"
90
+ m = worker.marshaler
91
+ # Model real queue marshaling/unmarshaling
92
+ begin
93
+ response_object = m.unmarshal(m.marshal(worker.request(trans_object)))
94
+ dummy_handle.add_dummy_response(worker.name, response_object)
95
+ rescue Exception => e
96
+ ModernTimes.logger.error("#{worker} Exception: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
97
+ dummy_handle.add_dummy_response(worker.name, ModernTimes::RemoteException.new(e))
98
+ end
99
+ begin
100
+ worker.post_request(trans_object)
101
+ rescue Exception => e
102
+ ModernTimes.logger.error("#{worker} Exception in post_request: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
103
+ end
104
+ elsif worker.kind_of?(Worker)
105
+ ModernTimes.logger.debug "Dummy publishing #{trans_object} to #{worker}"
106
+ begin
107
+ worker.perform(trans_object)
108
+ rescue Exception => e
109
+ ModernTimes.logger.error("#{worker} Exception: #{e.message}\n\t#{e.backtrace.join("\n\t")}")
110
+ end
109
111
  end
110
112
  end
111
113
  end
@@ -117,9 +119,9 @@ module ModernTimes
117
119
  "#{self.class.name}:#{@real_producer_options.inspect}"
118
120
  end
119
121
 
120
- def self.setup_dummy_publishing(workers)
122
+ def self.setup_dummy_publishing(worker_pools)
121
123
  @@dummy_publishing = true
122
- @@workers = workers
124
+ @@worker_pools = worker_pools
123
125
  alias_method :real_publish, :publish
124
126
  alias_method :publish, :dummy_publish
125
127
  PublishHandle.setup_dummy_handling
@@ -41,13 +41,22 @@ module ModernTimes
41
41
  Rails.logger.info "Messaging disabled"
42
42
  @is_jms_enabled = false
43
43
  worker_file = File.join(Rails.root, "config", "workers.yml")
44
- workers = []
44
+ worker_pools = []
45
45
  ModernTimes::Manager.parse_worker_file(worker_file, @env) do |klass, count, options|
46
- workers << klass.new(options)
46
+ # Create a pool for each worker so a single instance won't have to be thread safe when multiple http request hit it concurrently.
47
+ worker_pools << GenePool.new(:pool_size => count, :logger => Rails.logger) do
48
+ klass.new(options)
49
+ end
50
+ end
51
+ # If no config, then just create a worker_pool for each class in the app/workers directory
52
+ if worker_pools.empty?
53
+ worker_pools = rails_workers.map do |klass|
54
+ GenePool.new(:pool_size => 1, :logger => Rails.logger) do
55
+ klass.new({})
56
+ end
57
+ end
47
58
  end
48
- # If no config, then just create a worker for each class in the app/workers directory
49
- workers = rails_workers.map {|klass| klass.new({})} if workers.empty?
50
- ModernTimes::JMS::Publisher.setup_dummy_publishing(workers)
59
+ ModernTimes::JMS::Publisher.setup_dummy_publishing(worker_pools)
51
60
  end
52
61
  end
53
62
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: modern_times
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.3.10
5
+ version: 0.3.11
6
6
  platform: ruby
7
7
  authors:
8
8
  - Brad Pardee
@@ -11,8 +11,7 @@ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
13
 
14
- date: 2011-10-17 00:00:00 -04:00
15
- default_executable:
14
+ date: 2011-11-08 00:00:00 Z
16
15
  dependencies:
17
16
  - !ruby/object:Gem::Dependency
18
17
  name: jruby-jms
@@ -36,6 +35,17 @@ dependencies:
36
35
  version: "0.6"
37
36
  type: :runtime
38
37
  version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: gene_pool
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
39
49
  description: Generic asynchronous task library
40
50
  email:
41
51
  - bradpardee@gmail.com
@@ -110,7 +120,6 @@ files:
110
120
  - test/jms_requestor_test.rb
111
121
  - test/jms_test.rb
112
122
  - test/marshal_strategy_test.rb
113
- has_rdoc: true
114
123
  homepage: http://github.com/ClarityServices/modern_times
115
124
  licenses: []
116
125
 
@@ -134,7 +143,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
134
143
  requirements: []
135
144
 
136
145
  rubyforge_project:
137
- rubygems_version: 1.5.1
146
+ rubygems_version: 1.8.9
138
147
  signing_key:
139
148
  specification_version: 3
140
149
  summary: Asynchronous task library