neptune 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/LICENSE +39 -0
  2. data/README +50 -0
  3. data/bin/neptune +16 -0
  4. data/doc/AppControllerClient.html +468 -0
  5. data/doc/CommonFunctions.html +368 -0
  6. data/doc/LICENSE.html +131 -0
  7. data/doc/Object.html +431 -0
  8. data/doc/README.html +135 -0
  9. data/doc/bin/neptune.html +58 -0
  10. data/doc/created.rid +7 -0
  11. data/doc/images/brick.png +0 -0
  12. data/doc/images/brick_link.png +0 -0
  13. data/doc/images/bug.png +0 -0
  14. data/doc/images/bullet_black.png +0 -0
  15. data/doc/images/bullet_toggle_minus.png +0 -0
  16. data/doc/images/bullet_toggle_plus.png +0 -0
  17. data/doc/images/date.png +0 -0
  18. data/doc/images/find.png +0 -0
  19. data/doc/images/loadingAnimation.gif +0 -0
  20. data/doc/images/macFFBgHack.png +0 -0
  21. data/doc/images/package.png +0 -0
  22. data/doc/images/page_green.png +0 -0
  23. data/doc/images/page_white_text.png +0 -0
  24. data/doc/images/page_white_width.png +0 -0
  25. data/doc/images/plugin.png +0 -0
  26. data/doc/images/ruby.png +0 -0
  27. data/doc/images/tag_green.png +0 -0
  28. data/doc/images/wrench.png +0 -0
  29. data/doc/images/wrench_orange.png +0 -0
  30. data/doc/images/zoom.png +0 -0
  31. data/doc/index.html +90 -0
  32. data/doc/js/darkfish.js +116 -0
  33. data/doc/js/jquery.js +32 -0
  34. data/doc/js/quicksearch.js +114 -0
  35. data/doc/js/thickbox-compressed.js +10 -0
  36. data/doc/lib/app_controller_client_rb.html +60 -0
  37. data/doc/lib/common_functions_rb.html +68 -0
  38. data/doc/lib/job_rb.html +55 -0
  39. data/doc/scripts/appscale/add_appserver_rb.html +52 -0
  40. data/doc/scripts/appscale/add_database_rb.html +52 -0
  41. data/doc/scripts/appscale/add_loadbalancer_rb.html +52 -0
  42. data/doc/scripts/appscale/add_slave_rb.html +52 -0
  43. data/doc/scripts/cewssa/cewssa-output.html +104 -0
  44. data/doc/scripts/cewssa/get_cewssa_output_rb.html +52 -0
  45. data/doc/scripts/cewssa/run_cewssa_rb.html +52 -0
  46. data/doc/scripts/cewssa/test_dfsp_rb.html +52 -0
  47. data/doc/scripts/dfsp/get_dfsp_output_rb.html +52 -0
  48. data/doc/scripts/dfsp/make_output_public_rb.html +52 -0
  49. data/doc/scripts/dfsp/run_dfsp_rb.html +52 -0
  50. data/doc/scripts/dfsp/see_acl_rb.html +52 -0
  51. data/doc/scripts/dfsp/test_dfsp_rb.html +52 -0
  52. data/doc/scripts/mapreduce/get_mapreduce_output_rb.html +52 -0
  53. data/doc/scripts/mapreduce/input-10.html +114 -0
  54. data/doc/scripts/mapreduce/input-30.html +114 -0
  55. data/doc/scripts/mapreduce/input-7.html +104 -0
  56. data/doc/scripts/mapreduce/map_rb.html +56 -0
  57. data/doc/scripts/mapreduce/reduce_rb.html +56 -0
  58. data/doc/scripts/mapreduce/run_java_mr_rb.html +52 -0
  59. data/doc/scripts/mapreduce/run_mapreduce_rb.html +52 -0
  60. data/doc/scripts/mpi/Makefile.html +125 -0
  61. data/doc/scripts/mpi/get_mpi_output_rb.html +52 -0
  62. data/doc/scripts/mpi/hw2_c.html +52 -0
  63. data/doc/scripts/mpi/hw2harness_c.html +52 -0
  64. data/doc/scripts/mpi/hw2harness_h.html +52 -0
  65. data/doc/scripts/mpi/run_mpi_cpi_rb.html +52 -0
  66. data/doc/scripts/mpi/run_mpi_powermethod_rb.html +52 -0
  67. data/doc/scripts/mpi/test_rb.html +52 -0
  68. data/doc/scripts/x10/Makefile.html +106 -0
  69. data/doc/scripts/x10/get_x10_output_rb.html +52 -0
  70. data/doc/scripts/x10/run_x10_kmeans_rb.html +52 -0
  71. data/doc/scripts/x10/run_x10_montypi_rb.html +52 -0
  72. data/doc/scripts/x10/run_x10_nqueens_rb.html +52 -0
  73. data/doc/scripts/x10/run_x10_powermethod_rb.html +52 -0
  74. data/doc/scripts/x10/run_x10_qsort_rb.html +52 -0
  75. data/doc/scripts/x10/test_rb.html +52 -0
  76. data/lib/app_controller_client.rb +135 -0
  77. data/lib/common_functions.rb +107 -0
  78. data/lib/job.rb +161 -0
  79. metadata +145 -0
data/doc/Object.html ADDED
@@ -0,0 +1,431 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
7
+
8
+ <title>Class: Object</title>
9
+
10
+ <link rel="stylesheet" href="./rdoc.css" type="text/css" media="screen" />
11
+
12
+ <script src="./js/jquery.js" type="text/javascript"
13
+ charset="utf-8"></script>
14
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
15
+ charset="utf-8"></script>
16
+ <script src="./js/quicksearch.js" type="text/javascript"
17
+ charset="utf-8"></script>
18
+ <script src="./js/darkfish.js" type="text/javascript"
19
+ charset="utf-8"></script>
20
+
21
+ </head>
22
+ <body class="class">
23
+
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="file-metadata">
36
+ <div id="file-list-section" class="section">
37
+ <h3 class="section-header">In Files</h3>
38
+ <div class="section-body">
39
+ <ul>
40
+
41
+ <li><a href="./lib/app_controller_client_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
42
+ class="thickbox" title="lib/app_controller_client.rb">lib/app_controller_client.rb</a></li>
43
+
44
+ <li><a href="./lib/job_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
45
+ class="thickbox" title="lib/job.rb">lib/job.rb</a></li>
46
+
47
+ </ul>
48
+ </div>
49
+ </div>
50
+
51
+
52
+ </div>
53
+
54
+ <div id="class-metadata">
55
+
56
+ <!-- Parent Class -->
57
+
58
+ <div id="parent-class-section" class="section">
59
+ <h3 class="section-header">Parent</h3>
60
+
61
+ <p class="link"></p>
62
+
63
+ </div>
64
+
65
+
66
+ <!-- Namespace Contents -->
67
+
68
+
69
+ <!-- Method Quickref -->
70
+
71
+ <div id="method-list-section" class="section">
72
+ <h3 class="section-header">Methods</h3>
73
+ <ul class="link-list">
74
+
75
+ <li><a href="#method-i-do_preprocessing">#do_preprocessing</a></li>
76
+
77
+ <li><a href="#method-i-job">#job</a></li>
78
+
79
+ <li><a href="#method-i-preprocess_mapreduce">#preprocess_mapreduce</a></li>
80
+
81
+ <li><a href="#method-i-preprocess_mpi">#preprocess_mpi</a></li>
82
+
83
+ </ul>
84
+ </div>
85
+
86
+
87
+ <!-- Included Modules -->
88
+
89
+ </div>
90
+
91
+ <div id="project-metadata">
92
+
93
+
94
+ <div id="fileindex-section" class="section project-section">
95
+ <h3 class="section-header">Files</h3>
96
+ <ul>
97
+
98
+ <li class="file"><a href="./LICENSE.html">LICENSE</a></li>
99
+
100
+ <li class="file"><a href="./README.html">README</a></li>
101
+
102
+ </ul>
103
+ </div>
104
+
105
+
106
+ <div id="classindex-section" class="section project-section">
107
+ <h3 class="section-header">Class/Module Index
108
+ <span class="search-toggle"><img src="./images/find.png"
109
+ height="16" width="16" alt="[+]"
110
+ title="show/hide quicksearch" /></span></h3>
111
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
112
+ <fieldset>
113
+ <legend>Quicksearch</legend>
114
+ <input type="text" name="quicksearch" value=""
115
+ class="quicksearch-field" />
116
+ </fieldset>
117
+ </form>
118
+
119
+ <ul class="link-list">
120
+
121
+ <li><a href="./AppControllerClient.html">AppControllerClient</a></li>
122
+
123
+ <li><a href="./CommonFunctions.html">CommonFunctions</a></li>
124
+
125
+ <li><a href="./Object.html">Object</a></li>
126
+
127
+ </ul>
128
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
129
+ </div>
130
+
131
+
132
+ </div>
133
+ </div>
134
+
135
+ <div id="documentation">
136
+ <h1 class="class">Object</h1>
137
+
138
+ <div id="description">
139
+
140
+ <p>A set of methods and constants that we’ve monkey-patched to enable
141
+ Neptune support. In the future, it is likely that the only exposed /
142
+ monkey-patched method should be job, while the others could probably be
143
+ folded into either a Neptune-specific class or into <a
144
+ href="CommonFunctions.html">CommonFunctions</a>.</p>
145
+
146
+ </div>
147
+
148
+ <!-- Constants -->
149
+
150
+ <div id="constants-list" class="section">
151
+ <h3 class="section-header">Constants</h3>
152
+ <dl>
153
+
154
+ <dt><a name="NO_TIMEOUT">NO_TIMEOUT</a></dt>
155
+
156
+ <dd class="description"><p>Sometimes SOAP calls take a long time if large amounts of data are being
157
+ sent over the network: for this first version we don’t want these calls
158
+ to endlessly timeout and retry, so as a hack, just don’t let them
159
+ timeout. The next version should replace this and properly timeout and not
160
+ use long calls unless necessary.</p></dd>
161
+
162
+
163
+ <dt><a name="NEED_PREPROCESSING">NEED_PREPROCESSING</a></dt>
164
+
165
+ <dd class="description"><p>A list of jobs that require some kind of work to be done before the actual
166
+ computation can be performed.</p></dd>
167
+
168
+
169
+ </dl>
170
+ </div>
171
+
172
+
173
+ <!-- Attributes -->
174
+
175
+
176
+ <!-- Methods -->
177
+
178
+ <div id="public-instance-method-details" class="method-section section">
179
+ <h3 class="section-header">Public Instance Methods</h3>
180
+
181
+
182
+ <div id="do_preprocessing-method" class="method-detail ">
183
+ <a name="method-i-do_preprocessing"></a>
184
+
185
+
186
+ <div class="method-heading">
187
+ <span class="method-name">do_preprocessing</span><span
188
+ class="method-args">(job_data)</span>
189
+ <span class="method-click-advice">click to toggle source</span>
190
+ </div>
191
+
192
+
193
+ <div class="method-description">
194
+
195
+ <p>Certain types of jobs need steps to be taken before they can be started
196
+ (e.g., copying input data or code over). This method dispatches the right
197
+ method to use based on the type of the job that the user has asked to run.</p>
198
+
199
+
200
+
201
+ <div class="method-source-code"
202
+ id="do_preprocessing-source">
203
+ <pre>
204
+ <span class="ruby-comment"># File lib/job.rb, line 34</span>
205
+ def do_preprocessing(job_data)
206
+ job_type = job_data[<span class="ruby-string">&quot;@type&quot;</span>]
207
+ return unless <span class="ruby-constant">NEED_PREPROCESSING</span>.include?(job_type)
208
+
209
+ preprocess = &quot;preprocess_#{job_type}&quot;.to_sym
210
+ send(preprocess, job_data)
211
+ end</pre>
212
+ </div>
213
+
214
+ </div>
215
+
216
+
217
+
218
+
219
+ </div>
220
+
221
+
222
+ <div id="job-method" class="method-detail ">
223
+ <a name="method-i-job"></a>
224
+
225
+
226
+ <div class="method-heading">
227
+ <span class="method-name">job</span><span
228
+ class="method-args">(name, &block)</span>
229
+ <span class="method-click-advice">click to toggle source</span>
230
+ </div>
231
+
232
+
233
+ <div class="method-description">
234
+
235
+ <p>This method is the heart of Neptune - here, we take blocks of code that the
236
+ user has written and convert them into HPC job requests. At a high level,
237
+ the user can request to run a job, retrieve a job’s output, or modify the
238
+ access policy (ACL) for the output of a job. By default, job data is
239
+ private, but a Neptune job can be used to set it to public later (and
240
+ vice-versa).</p>
241
+
242
+
243
+
244
+ <div class="method-source-code"
245
+ id="job-source">
246
+ <pre>
247
+ <span class="ruby-comment"># File lib/job.rb, line 101</span>
248
+ def job(name, &amp;block)
249
+ puts <span class="ruby-string">&quot;Received a request to run a job.&quot;</span>
250
+ puts name
251
+ block.call()
252
+
253
+ if <span class="ruby-ivar">@keyname</span>.nil?
254
+ keyname = <span class="ruby-string">&quot;appscale&quot;</span>
255
+ else
256
+ keyname = <span class="ruby-ivar">@keyname</span>
257
+ end
258
+
259
+ shadow_ip = <span class="ruby-constant">CommonFunctions</span>.get_from_yaml(keyname, :shadow)
260
+ secret = <span class="ruby-constant">CommonFunctions</span>.get_secret_key(keyname)
261
+ controller = <span class="ruby-constant">AppControllerClient</span>.new(shadow_ip, secret)
262
+ ssh_key = <span class="ruby-constant">File</span>.expand_path(&quot;~/.appscale/#{keyname}.key&quot;)
263
+
264
+ job_data = {}
265
+ instance_variables.each { |var|
266
+ job_data[var] = instance_variable_get(var)
267
+ }
268
+
269
+ job_data[<span class="ruby-string">&quot;@job&quot;</span>] = nil
270
+ job_data[<span class="ruby-string">&quot;@type&quot;</span>] = name
271
+ job_data[<span class="ruby-string">&quot;@keyname&quot;</span>] = keyname
272
+
273
+ if job_data[<span class="ruby-string">&quot;@output&quot;</span>].nil? or job_data[<span class="ruby-string">&quot;@output&quot;</span>] == <span class="ruby-string">&quot;&quot;</span>
274
+ abort(<span class="ruby-string">&quot;Job output must be specified&quot;</span>)
275
+ end
276
+
277
+ if job_data[<span class="ruby-string">&quot;@output&quot;</span>][0].chr != <span class="ruby-string">&quot;/&quot;</span>
278
+ abort(<span class="ruby-string">&quot;Job output must begin with a slash ('/')&quot;</span>)
279
+ end
280
+
281
+ <span class="ruby-comment">#if job_data[&quot;@can_run_on&quot;].class == Range</span>
282
+ <span class="ruby-comment"># job_data[&quot;@can_run_on&quot;] = job_data[&quot;@can_run_on&quot;].to_a</span>
283
+ <span class="ruby-comment">#elsif job_data[&quot;@can_run_on&quot;].class == Fixnum</span>
284
+ <span class="ruby-comment"># job_data[&quot;@can_run_on&quot;] = [job_data[&quot;@can_run_on&quot;]]</span>
285
+ <span class="ruby-comment">#end</span>
286
+
287
+ puts &quot;job data = #{job_data.inspect}&quot;
288
+
289
+ do_preprocessing(job_data)
290
+
291
+ if job_data[<span class="ruby-string">&quot;@type&quot;</span>] == <span class="ruby-string">&quot;output&quot;</span>
292
+ return controller.get_output(job_data)
293
+ elsif job_data[<span class="ruby-string">&quot;@type&quot;</span>] == <span class="ruby-string">&quot;get-acl&quot;</span>
294
+ job_data[<span class="ruby-string">&quot;@type&quot;</span>] = <span class="ruby-string">&quot;acl&quot;</span>
295
+ return controller.get_acl(job_data)
296
+ elsif job_data[<span class="ruby-string">&quot;@type&quot;</span>] == <span class="ruby-string">&quot;set-acl&quot;</span>
297
+ job_data[<span class="ruby-string">&quot;@type&quot;</span>] = <span class="ruby-string">&quot;acl&quot;</span>
298
+ return controller.set_acl(job_data)
299
+ else
300
+ result = controller.start_neptune_job(job_data)
301
+ if result =~ <span class="ruby-regexp">/job is now running\Z/</span>
302
+ return :success
303
+ else
304
+ return :failure
305
+ end
306
+ end
307
+ end</pre>
308
+ </div>
309
+
310
+ </div>
311
+
312
+
313
+
314
+
315
+ </div>
316
+
317
+
318
+ <div id="preprocess_mapreduce-method" class="method-detail ">
319
+ <a name="method-i-preprocess_mapreduce"></a>
320
+
321
+
322
+ <div class="method-heading">
323
+ <span class="method-name">preprocess_mapreduce</span><span
324
+ class="method-args">(job_data)</span>
325
+ <span class="method-click-advice">click to toggle source</span>
326
+ </div>
327
+
328
+
329
+ <div class="method-description">
330
+
331
+ <p>This preprocessing method handles copying data for regular Hadoop MapReduce
332
+ and Hadoop MapReduce Streaming. For the former case, we copy over just the
333
+ JAR the user has given us, and in the latter case, we copy over the Map and
334
+ Reduce files that have been specified. In either case, if the user has
335
+ specified to us to copy over an input file, we do that as well: AppScale
336
+ will copy it into HDFS for us.</p>
337
+
338
+
339
+
340
+ <div class="method-source-code"
341
+ id="preprocess_mapreduce-source">
342
+ <pre>
343
+ <span class="ruby-comment"># File lib/job.rb, line 65</span>
344
+ def preprocess_mapreduce(job_data)
345
+ items_to_copy = [<span class="ruby-string">&quot;@map&quot;</span>, <span class="ruby-string">&quot;@reduce&quot;</span>] if job_data[<span class="ruby-string">&quot;@map&quot;</span>] and job_data[<span class="ruby-string">&quot;@reduce&quot;</span>]
346
+ items_to_copy = [<span class="ruby-string">&quot;@mapreducejar&quot;</span>] if job_data[<span class="ruby-string">&quot;@mapreducejar&quot;</span>]
347
+ items_to_copy &lt;&lt; <span class="ruby-string">&quot;@input&quot;</span> if job_data[<span class="ruby-string">&quot;@copy_input&quot;</span>]
348
+ items_to_copy.each { |item|
349
+ source = <span class="ruby-constant">File</span>.expand_path(job_data[item])
350
+ unless <span class="ruby-constant">File</span>.exists?(source)
351
+ abort(&quot;The #{item} file #{source} does not exist.&quot;)
352
+ end
353
+
354
+ suffix = source.split(<span class="ruby-string">'/'</span>)[-1]
355
+ dest = &quot;/tmp/#{suffix}&quot;
356
+
357
+ keyname = job_data[<span class="ruby-string">&quot;@keyname&quot;</span>]
358
+ <span class="ruby-constant">CommonFunctions</span>.scp_to_shadow(source, dest, keyname)
359
+
360
+ job_data[item] = dest
361
+ }
362
+ end</pre>
363
+ </div>
364
+
365
+ </div>
366
+
367
+
368
+
369
+
370
+ </div>
371
+
372
+
373
+ <div id="preprocess_mpi-method" class="method-detail ">
374
+ <a name="method-i-preprocess_mpi"></a>
375
+
376
+
377
+ <div class="method-heading">
378
+ <span class="method-name">preprocess_mpi</span><span
379
+ class="method-args">(job_data)</span>
380
+ <span class="method-click-advice">click to toggle source</span>
381
+ </div>
382
+
383
+
384
+ <div class="method-description">
385
+
386
+ <p>This preprocessing method copies over the user’s MPI code to the master
387
+ node in AppScale - this node will then copy it to whoever will run the MPI
388
+ job.</p>
389
+
390
+
391
+
392
+ <div class="method-source-code"
393
+ id="preprocess_mpi-source">
394
+ <pre>
395
+ <span class="ruby-comment"># File lib/job.rb, line 45</span>
396
+ def preprocess_mpi(job_data)
397
+ source_code = <span class="ruby-constant">File</span>.expand_path(job_data[<span class="ruby-string">&quot;@code&quot;</span>])
398
+ unless <span class="ruby-constant">File</span>.exists?(source_code)
399
+ file_not_found = &quot;The specified code, #{job_data['@code']},&quot; +
400
+ <span class="ruby-string">&quot; didn't exist. Please specify one that exists and try again&quot;</span>
401
+ abort(file_not_found)
402
+ end
403
+ dest_code = <span class="ruby-string">&quot;/tmp/thempicode&quot;</span>
404
+
405
+ keyname = job_data[<span class="ruby-string">&quot;@keyname&quot;</span>]
406
+ <span class="ruby-constant">CommonFunctions</span>.scp_to_shadow(source_code, dest_code, keyname)
407
+ end</pre>
408
+ </div>
409
+
410
+ </div>
411
+
412
+
413
+
414
+
415
+ </div>
416
+
417
+
418
+ </div>
419
+
420
+
421
+ </div>
422
+
423
+ <div id="validator-badges">
424
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
425
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
426
+ Rdoc Generator</a> 2</small>.</p>
427
+ </div>
428
+
429
+ </body>
430
+ </html>
431
+
data/doc/README.html ADDED
@@ -0,0 +1,135 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
4
+
5
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
+ <head>
7
+ <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
8
+
9
+ <title>File: README [RDoc Documentation]</title>
10
+
11
+ <link type="text/css" media="screen" href="./rdoc.css" rel="stylesheet" />
12
+
13
+ <script src="./js/jquery.js" type="text/javascript"
14
+ charset="utf-8"></script>
15
+ <script src="./js/thickbox-compressed.js" type="text/javascript"
16
+ charset="utf-8"></script>
17
+ <script src="./js/quicksearch.js" type="text/javascript"
18
+ charset="utf-8"></script>
19
+ <script src="./js/darkfish.js" type="text/javascript"
20
+ charset="utf-8"></script>
21
+ </head>
22
+
23
+ <body class="file">
24
+ <div id="metadata">
25
+ <div id="home-metadata">
26
+ <div id="home-section" class="section">
27
+ <h3 class="section-header">
28
+ <a href="./index.html">Home</a>
29
+ <a href="./index.html#classes">Classes</a>
30
+ <a href="./index.html#methods">Methods</a>
31
+ </h3>
32
+ </div>
33
+ </div>
34
+
35
+ <div id="project-metadata">
36
+
37
+
38
+ <div id="fileindex-section" class="section project-section">
39
+ <h3 class="section-header">Files</h3>
40
+ <ul>
41
+
42
+ <li class="file"><a href="./LICENSE.html">LICENSE</a></li>
43
+
44
+ <li class="file"><a href="./README.html">README</a></li>
45
+
46
+ </ul>
47
+ </div>
48
+
49
+
50
+ <div id="classindex-section" class="section project-section">
51
+ <h3 class="section-header">Class Index
52
+ <span class="search-toggle"><img src="./images/find.png"
53
+ height="16" width="16" alt="[+]"
54
+ title="show/hide quicksearch" /></span></h3>
55
+ <form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
56
+ <fieldset>
57
+ <legend>Quicksearch</legend>
58
+ <input type="text" name="quicksearch" value=""
59
+ class="quicksearch-field" />
60
+ </fieldset>
61
+ </form>
62
+
63
+ <ul class="link-list">
64
+
65
+ <li><a href="./AppControllerClient.html">AppControllerClient</a></li>
66
+
67
+ <li><a href="./CommonFunctions.html">CommonFunctions</a></li>
68
+
69
+ <li><a href="./Object.html">Object</a></li>
70
+
71
+ </ul>
72
+ <div id="no-class-search-results" style="display: none;">No matching classes.</div>
73
+ </div>
74
+
75
+
76
+ </div>
77
+ </div>
78
+
79
+ <div id="documentation">
80
+
81
+ <h1>begin rdoc</h1>
82
+
83
+ <p>Neptune: A Domain Specific Language for Deploying HPC Software on Cloud
84
+ Platforms</p>
85
+
86
+ <p>Neptune provides programmers with a simple interface by which they can
87
+ deploy MPI, X10, and MapReduce jobs to without needing to know the
88
+ particulars of the underlying cloud platform. You only need to give Neptune
89
+ your code, tell it how many machines to run on and where to put the output:
90
+ Neptune handles everything else. No more writing configuration files,
91
+ having to start up NFS on all your machines, yada yada yada. Neptune works
92
+ together with supported cloud platforms (currently AppScale is recommended)
93
+ and can deploy over anything AppScale can - Xen or KVM virtual machines as
94
+ well as Eucalyptus and Amazon EC2. There’s nothing virtualization
95
+ specific in there, so in theory any machine installed with the AppScale
96
+ software should work fine.</p>
97
+
98
+ <p>Although Neptune is designed to automate deploying HPC jobs, it also can be
99
+ used to deploy other types of software. For example, Neptune has support
100
+ for user-specified scaling of the underlying cloud platform: users can
101
+ write Neptune jobs that manually add load balancers, application servers,
102
+ or database servers to a running AppScale deployment.</p>
103
+
104
+ <p>Sample Neptune job scripts can be found in samples. Test scripts will be
105
+ added to test in the next release.</p>
106
+
107
+ <p>Developed by Chris Bunch as part of the AppScale project. See <a
108
+ href="LICENSE.html">LICENSE</a> for the specifics of the New BSD License by
109
+ which Neptune is released.</p>
110
+
111
+ <p>Check us out on the web:</p>
112
+
113
+ <p><a href="http://code.google.com/p/appscale">code.google.com/p/appscale</a></p>
114
+
115
+ <p><a href="http://appscale.cs.ucsb.edu">appscale.cs.ucsb.edu</a></p>
116
+
117
+ <p>Contributors welcome! We would love to add support for other cloud
118
+ platforms and test out Neptune more on non-virtualized deployments, as well
119
+ as adding capabilities for other types of computation.</p>
120
+
121
+ <p>An academic paper describing Neptune is in the works - check in for a link
122
+ to that as it becomes available.</p>
123
+
124
+ <h1>end</h1>
125
+
126
+ </div>
127
+
128
+ <div id="validator-badges">
129
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
130
+ <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
131
+ Rdoc Generator</a> 2</small>.</p>
132
+ </div>
133
+ </body>
134
+ </html>
135
+