cloud-crowd 0.7.2.pre3 → 0.7.2
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/cloud-crowd.gemspec +2 -2
- data/lib/cloud-crowd.rb +10 -0
- data/lib/cloud_crowd/models/job.rb +3 -3
- data/lib/cloud_crowd/models/node_record.rb +1 -1
- data/lib/cloud_crowd/models/work_unit.rb +3 -0
- data/lib/cloud_crowd/node.rb +3 -3
- data/lib/cloud_crowd/server.rb +1 -1
- metadata +5 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 88fe358ade9e482b1e3babde6470481f0a2610b4
|
4
|
+
data.tar.gz: 875f598e6160a237d322dd9fa2572e8519952cc7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df444794a6c2161fa6573e1efb85e1b045d65af5bed1681c842ca46359d433fe8e1b2116cfd89791e04e08eece282607da5a2117a2336e274dac1e906eb476ad
|
7
|
+
data.tar.gz: eb4cac079f21ff387415e1742c376f2c77f3019bf20067be0eaa91cc07bb82438af9f3e6aac3c9a58f966c2dc61668bd6fe6e081109c5aa45ad4e6a8beab57c9
|
data/cloud-crowd.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'cloud-crowd'
|
3
|
-
s.version = '0.7.2
|
4
|
-
s.date = '2014-04-
|
3
|
+
s.version = '0.7.2' # Keep version in sync with cloud-cloud.rb
|
4
|
+
s.date = '2014-04-17'
|
5
5
|
|
6
6
|
s.homepage = "http://wiki.github.com/documentcloud/cloud-crowd"
|
7
7
|
s.summary = "Parallel Processing for the Rest of Us"
|
data/lib/cloud-crowd.rb
CHANGED
@@ -120,6 +120,16 @@ module CloudCrowd
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
# Starts a new thread with a ActiveRecord connection_pool
|
124
|
+
# and yields for peforming work inside the blocks
|
125
|
+
def defer
|
126
|
+
Thread.new do
|
127
|
+
ActiveRecord::Base.connection_pool.with_connection do
|
128
|
+
yield
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
123
133
|
# Get a reference to the central server, including authentication if
|
124
134
|
# configured.
|
125
135
|
def central_server
|
@@ -54,7 +54,7 @@ module CloudCrowd
|
|
54
54
|
if complete?
|
55
55
|
update_attributes(:outputs => outs, :time => time_taken)
|
56
56
|
puts "Job ##{id} (#{action}) #{display_status}." unless ENV['RACK_ENV'] == 'test'
|
57
|
-
|
57
|
+
CloudCrowd.defer { fire_callback } if callback_url
|
58
58
|
end
|
59
59
|
self
|
60
60
|
end
|
@@ -80,7 +80,7 @@ module CloudCrowd
|
|
80
80
|
def fire_callback
|
81
81
|
begin
|
82
82
|
response = RestClient.post(callback_url, {:job => self.to_json})
|
83
|
-
|
83
|
+
CloudCrowd.defer { self.destroy } if response && response.code == 201
|
84
84
|
rescue RestClient::Exception => e
|
85
85
|
puts "Job ##{id} (#{action}) failed to fire callback: #{callback_url}"
|
86
86
|
end
|
@@ -188,4 +188,4 @@ module CloudCrowd
|
|
188
188
|
end
|
189
189
|
|
190
190
|
end
|
191
|
-
end
|
191
|
+
end
|
@@ -116,7 +116,7 @@ module CloudCrowd
|
|
116
116
|
# Redistribute in a separate thread to avoid delaying shutdown.
|
117
117
|
def redistribute_work_units
|
118
118
|
release_work_units
|
119
|
-
|
119
|
+
CloudCrowd.defer { WorkUnit.distribute_to_nodes }
|
120
120
|
end
|
121
121
|
|
122
122
|
end
|
@@ -44,6 +44,9 @@ module CloudCrowd
|
|
44
44
|
available_nodes = NodeRecord.available.to_a
|
45
45
|
available_actions = available_nodes.map {|node| node.actions }.flatten.uniq
|
46
46
|
filter = "action in (#{available_actions.map{|a| "'#{a}'"}.join(',')})"
|
47
|
+
|
48
|
+
# If there aren't any available nodes or actions don't bother doing anything.
|
49
|
+
return if available_nodes.empty? or available_actions.empty?
|
47
50
|
|
48
51
|
# Reserve a handful of available work units.
|
49
52
|
WorkUnit.cancel_reservations(reservation) if reservation
|
data/lib/cloud_crowd/node.rb
CHANGED
@@ -92,7 +92,7 @@ module CloudCrowd
|
|
92
92
|
@server.daemonize if @daemon
|
93
93
|
trap_signals
|
94
94
|
asset_store
|
95
|
-
@server_thread =
|
95
|
+
@server_thread = CloudCrowd.defer { @server.start }
|
96
96
|
check_in(true)
|
97
97
|
check_in_periodically
|
98
98
|
monitor_system if @max_load || @min_memory
|
@@ -159,7 +159,7 @@ module CloudCrowd
|
|
159
159
|
# average and the amount of free memory remaining. If we transition out of
|
160
160
|
# the overloaded state, let central know.
|
161
161
|
def monitor_system
|
162
|
-
@monitor_thread =
|
162
|
+
@monitor_thread = CloudCrowd.defer do
|
163
163
|
loop do
|
164
164
|
was_overloaded = @overloaded
|
165
165
|
@overloaded = overloaded?
|
@@ -173,7 +173,7 @@ module CloudCrowd
|
|
173
173
|
# will assume that the node has gone down. Checking in will let central know
|
174
174
|
# it's still online.
|
175
175
|
def check_in_periodically
|
176
|
-
@check_in_thread =
|
176
|
+
@check_in_thread = CloudCrowd.defer do
|
177
177
|
loop do
|
178
178
|
sleep CHECK_IN_INTERVAL
|
179
179
|
check_in
|
data/lib/cloud_crowd/server.rb
CHANGED
@@ -71,7 +71,7 @@ module CloudCrowd
|
|
71
71
|
# Distributes all work units to available nodes.
|
72
72
|
post '/jobs' do
|
73
73
|
job = Job.create_from_request(JSON.parse(params[:job]))
|
74
|
-
|
74
|
+
CloudCrowd.defer { WorkUnit.distribute_to_nodes }
|
75
75
|
puts "Job ##{job.id} (#{job.action}) started." unless ENV['RACK_ENV'] == 'test'
|
76
76
|
json job
|
77
77
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloud-crowd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.2
|
4
|
+
version: 0.7.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeremy Ashkenas
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-04-
|
12
|
+
date: 2014-04-17 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activerecord
|
@@ -288,14 +288,13 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
288
288
|
version: '0'
|
289
289
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
290
290
|
requirements:
|
291
|
-
- - "
|
291
|
+
- - ">="
|
292
292
|
- !ruby/object:Gem::Version
|
293
|
-
version:
|
293
|
+
version: '0'
|
294
294
|
requirements: []
|
295
295
|
rubyforge_project: cloud-crowd
|
296
|
-
rubygems_version: 2.2.
|
296
|
+
rubygems_version: 2.2.2
|
297
297
|
signing_key:
|
298
298
|
specification_version: 4
|
299
299
|
summary: Parallel Processing for the Rest of Us
|
300
300
|
test_files: []
|
301
|
-
has_rdoc:
|