neptune 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/neptune.rb +39 -20
- metadata +4 -4
data/lib/neptune.rb
CHANGED
@@ -33,7 +33,7 @@ ALLOWED_STORAGE_TYPES = ["appdb", "gstorage", "s3", "walrus"]
|
|
33
33
|
|
34
34
|
# A list of jobs that require some kind of work to be done before
|
35
35
|
# the actual computation can be performed.
|
36
|
-
NEED_PREPROCESSING = ["compile", "erlang", "mpi"]
|
36
|
+
NEED_PREPROCESSING = ["compile", "erlang", "mpi", "ssa"]
|
37
37
|
|
38
38
|
# A set of methods and constants that we've monkey-patched to enable Neptune
|
39
39
|
# support. In the future, it is likely that the only exposed / monkey-patched
|
@@ -58,6 +58,7 @@ end
|
|
58
58
|
# Shadow node so that it can be compiled there. A future version
|
59
59
|
# of this method may also copy over libraries as well.
|
60
60
|
def preprocess_compile(job_data)
|
61
|
+
verbose = job_data["@verbose"]
|
61
62
|
code = File.expand_path(job_data["@code"])
|
62
63
|
unless File.exists?(code)
|
63
64
|
abort("The source file #{code} does not exist.")
|
@@ -70,7 +71,7 @@ def preprocess_compile(job_data)
|
|
70
71
|
|
71
72
|
ssh_args = "-i ~/.appscale/#{keyname}.key -o StrictHostkeyChecking=no root@#{shadow_ip}"
|
72
73
|
remove_dir = "ssh #{ssh_args} 'rm -rf #{dest}' 2>&1"
|
73
|
-
|
74
|
+
puts remove_dir if verbose
|
74
75
|
`#{remove_dir}`
|
75
76
|
|
76
77
|
CommonFunctions.scp_to_shadow(code, dest, keyname, is_dir=true)
|
@@ -95,6 +96,7 @@ end
|
|
95
96
|
# code to the master node in AppScale - this node will
|
96
97
|
# then copy it to whoever will run the MPI job.
|
97
98
|
def preprocess_mpi(job_data)
|
99
|
+
verbose = job_data["@verbose"]
|
98
100
|
if job_data["@procs_to_use"]
|
99
101
|
p = job_data["@procs_to_use"]
|
100
102
|
n = job_data["@nodes_to_use"]
|
@@ -123,9 +125,19 @@ def preprocess_mpi(job_data)
|
|
123
125
|
dest_code = "/tmp/thempicode"
|
124
126
|
|
125
127
|
keyname = job_data["@keyname"]
|
126
|
-
puts "Copying over code..."
|
128
|
+
puts "Copying over code..." if verbose
|
127
129
|
CommonFunctions.scp_to_shadow(source_code, dest_code, keyname)
|
128
|
-
puts "Done copying code!"
|
130
|
+
puts "Done copying code!" if verbose
|
131
|
+
end
|
132
|
+
|
133
|
+
def preprocess_ssa(job_data)
|
134
|
+
if job_data["@simulations"]
|
135
|
+
job_data["@trajectories"] = job_data["@simulations"]
|
136
|
+
end
|
137
|
+
|
138
|
+
unless job_data["@trajectories"]
|
139
|
+
abort(":trajectories needs to be specified when running ssa jobs")
|
140
|
+
end
|
129
141
|
end
|
130
142
|
|
131
143
|
# TODO: actually use me!
|
@@ -145,8 +157,10 @@ end
|
|
145
157
|
# job can be used to set it to public later (and
|
146
158
|
# vice-versa).
|
147
159
|
def neptune(params)
|
148
|
-
|
149
|
-
|
160
|
+
verbose = params[:verbose]
|
161
|
+
|
162
|
+
puts "Received a request to run a job." if verbose
|
163
|
+
puts params[:type] if verbose
|
150
164
|
|
151
165
|
keyname = params[:keyname] || "appscale"
|
152
166
|
|
@@ -206,7 +220,7 @@ def neptune(params)
|
|
206
220
|
["EC2_ACCESS_KEY", "EC2_SECRET_KEY", "S3_URL"].each { |item|
|
207
221
|
unless job_data["@#{item}"]
|
208
222
|
if ENV[item]
|
209
|
-
puts "Using #{item} from environment"
|
223
|
+
puts "Using #{item} from environment" if verbose
|
210
224
|
job_data["@#{item}"] = ENV[item]
|
211
225
|
else
|
212
226
|
msg = "When storing data to S3, #{item} must be specified or be in " +
|
@@ -226,7 +240,7 @@ def neptune(params)
|
|
226
240
|
# job_data["@can_run_on"] = [job_data["@can_run_on"]]
|
227
241
|
#end
|
228
242
|
|
229
|
-
puts "job data = #{job_data.inspect}"
|
243
|
+
puts "job data = #{job_data.inspect}" if verbose
|
230
244
|
|
231
245
|
do_preprocessing(job_data)
|
232
246
|
|
@@ -248,11 +262,11 @@ def neptune(params)
|
|
248
262
|
|
249
263
|
remote = "/tmp/neptune-input-#{rand(100000)}"
|
250
264
|
scp_cmd = "scp #{ssh_args} #{local_file} root@#{shadow_ip}:#{remote}"
|
251
|
-
puts scp_cmd
|
265
|
+
puts scp_cmd if verbose
|
252
266
|
`#{scp_cmd}`
|
253
267
|
|
254
268
|
job_data["@local"] = remote
|
255
|
-
puts "job data = #{job_data.inspect}"
|
269
|
+
puts "job data = #{job_data.inspect}" if verbose
|
256
270
|
result[:input] = controller.put_input(job_data)
|
257
271
|
elsif type == "output"
|
258
272
|
result[:output] = controller.get_output(job_data)
|
@@ -269,24 +283,24 @@ def neptune(params)
|
|
269
283
|
|
270
284
|
loop {
|
271
285
|
ssh_command = "ssh #{ssh_args} root@#{shadow_ip} 'ls #{compiled_location}' 2>&1"
|
272
|
-
|
286
|
+
puts ssh_command if verbose
|
273
287
|
result = `#{ssh_command}`
|
274
|
-
|
288
|
+
puts "result was [#{result}]" if verbose
|
275
289
|
if result =~ /No such file or directory/
|
276
|
-
puts "Still waiting for code to be compiled..."
|
290
|
+
puts "Still waiting for code to be compiled..." if verbose
|
277
291
|
else
|
278
|
-
puts "compilation complete! Copying compiled code to #{copy_to}"
|
292
|
+
puts "compilation complete! Copying compiled code to #{copy_to}" if verbose
|
279
293
|
break
|
280
294
|
end
|
281
295
|
sleep(5)
|
282
296
|
}
|
283
297
|
|
284
298
|
rm_local = "rm -rf #{copy_to}"
|
285
|
-
|
299
|
+
puts rm_local if verbose
|
286
300
|
`#{rm_local}`
|
287
301
|
|
288
302
|
scp_command = "scp -r #{ssh_args} root@#{shadow_ip}:#{compiled_location} #{copy_to} 2>&1"
|
289
|
-
puts scp_command
|
303
|
+
puts scp_command if verbose
|
290
304
|
`#{scp_command}`
|
291
305
|
|
292
306
|
code = job_data["@code"]
|
@@ -294,19 +308,24 @@ def neptune(params)
|
|
294
308
|
remote_dir = "/tmp/" + dirs[-1]
|
295
309
|
|
296
310
|
ssh_command = "ssh #{ssh_args} root@#{shadow_ip} 'rm -rf #{remote_dir}' 2>&1"
|
297
|
-
puts ssh_command
|
311
|
+
puts ssh_command if verbose
|
298
312
|
`#{ssh_command}`
|
299
313
|
|
300
314
|
ssh_command = "ssh #{ssh_args} root@#{shadow_ip} 'rm -rf #{compiled_location}' 2>&1"
|
301
|
-
puts ssh_command
|
315
|
+
puts ssh_command if verbose
|
302
316
|
`#{ssh_command}`
|
303
317
|
|
304
318
|
out = File.open("#{copy_to}/compile_out") { |f| f.read.chomp! }
|
305
319
|
err = File.open("#{copy_to}/compile_err") { |f| f.read.chomp! }
|
320
|
+
result = {}
|
306
321
|
result[:out] = out
|
307
322
|
result[:err] = err
|
308
|
-
|
309
|
-
|
323
|
+
|
324
|
+
if result[:err]
|
325
|
+
result[:result] = :failure
|
326
|
+
else
|
327
|
+
result[:result] = :success
|
328
|
+
end
|
310
329
|
else
|
311
330
|
msg = controller.start_neptune_job(job_data)
|
312
331
|
result[:msg] = msg
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neptune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.9
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Chris Bunch
|
@@ -15,7 +15,7 @@ autorequire: neptune
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-06-04 00:00:00 -07:00
|
19
19
|
default_executable: neptune
|
20
20
|
dependencies: []
|
21
21
|
|