~nchohan/appscale/zk3.3.4

« back to all changes in this revision

Viewing changes to AppController/doc/TaskEngine.html

  • Committer: Chris Bunch
  • Date: 2012-02-19 06:46:43 UTC
  • Revision ID: cgb@cs.ucsb.edu-20120219064643-37oxvm2f8ajyz328
adding Neptune folder to rdoc generation, and automatically pushing/pulling tasks in rabbitmq from an arbitrary node

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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: TaskEngine</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="./__/Neptune/task_engine_rb.html?TB_iframe=true&amp;height=550&amp;width=785"
 
42
              class="thickbox" title="../Neptune/task_engine.rb">../Neptune/task_engine.rb</a></li>
 
43
          
 
44
          </ul>
 
45
        </div>
 
46
      </div>
 
47
 
 
48
      
 
49
    </div>
 
50
 
 
51
    <div id="class-metadata">
 
52
 
 
53
      <!-- Parent Class -->
 
54
      
 
55
      <div id="parent-class-section" class="section">
 
56
        <h3 class="section-header">Parent</h3>
 
57
        
 
58
        <p class="link"><a href="Object.html">Object</a></p>
 
59
        
 
60
      </div>
 
61
      
 
62
 
 
63
      <!-- Namespace Contents -->
 
64
      
 
65
 
 
66
      <!-- Method Quickref -->
 
67
      
 
68
      <div id="method-list-section" class="section">
 
69
        <h3 class="section-header">Methods</h3>
 
70
        <ul class="link-list">
 
71
          
 
72
          <li><a href="#method-c-new">::new</a></li>
 
73
          
 
74
          <li><a href="#method-i-app_needs_uploading-3F">#app_needs_uploading?</a></li>
 
75
          
 
76
          <li><a href="#method-i-build_app_via_oration">#build_app_via_oration</a></li>
 
77
          
 
78
          <li><a href="#method-i-engine_name">#engine_name</a></li>
 
79
          
 
80
          <li><a href="#method-i-get_app_url">#get_app_url</a></li>
 
81
          
 
82
          <li><a href="#method-i-push">#push</a></li>
 
83
          
 
84
          <li><a href="#method-i-run_task">#run_task</a></li>
 
85
          
 
86
          <li><a href="#method-i-save_output_to_datastore">#save_output_to_datastore</a></li>
 
87
          
 
88
          <li><a href="#method-i-to_s">#to_s</a></li>
 
89
          
 
90
          <li><a href="#method-i-upload_app">#upload_app</a></li>
 
91
          
 
92
          <li><a href="#method-i-wait_for_task_to_finish">#wait_for_task_to_finish</a></li>
 
93
          
 
94
        </ul>
 
95
      </div>
 
96
      
 
97
 
 
98
      <!-- Included Modules -->
 
99
      
 
100
    </div>
 
101
 
 
102
    <div id="project-metadata">
 
103
      
 
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="./BadConfigurationException.html">BadConfigurationException</a></li>
 
124
        
 
125
          <li><a href="./BlobServer.html">BlobServer</a></li>
 
126
        
 
127
          <li><a href="./Collectd.html">Collectd</a></li>
 
128
        
 
129
          <li><a href="./CronHelper.html">CronHelper</a></li>
 
130
        
 
131
          <li><a href="./Djinn.html">Djinn</a></li>
 
132
        
 
133
          <li><a href="./DjinnJobData.html">DjinnJobData</a></li>
 
134
        
 
135
          <li><a href="./DjinnServer.html">DjinnServer</a></li>
 
136
        
 
137
          <li><a href="./Ejabberd.html">Ejabberd</a></li>
 
138
        
 
139
          <li><a href="./EngineFactory.html">EngineFactory</a></li>
 
140
        
 
141
          <li><a href="./GodInterface.html">GodInterface</a></li>
 
142
        
 
143
          <li><a href="./GoogleAppEnginePullQueue.html">GoogleAppEnginePullQueue</a></li>
 
144
        
 
145
          <li><a href="./GoogleAppEnginePushQueue.html">GoogleAppEnginePushQueue</a></li>
 
146
        
 
147
          <li><a href="./HAProxy.html">HAProxy</a></li>
 
148
        
 
149
          <li><a href="./HelperFunctions.html">HelperFunctions</a></li>
 
150
        
 
151
          <li><a href="./JSONClient.html">JSONClient</a></li>
 
152
        
 
153
          <li><a href="./LoadBalancer.html">LoadBalancer</a></li>
 
154
        
 
155
          <li><a href="./Monitoring.html">Monitoring</a></li>
 
156
        
 
157
          <li><a href="./NeptuneJobData.html">NeptuneJobData</a></li>
 
158
        
 
159
          <li><a href="./Nginx.html">Nginx</a></li>
 
160
        
 
161
          <li><a href="./Object.html">Object</a></li>
 
162
        
 
163
          <li><a href="./PbServer.html">PbServer</a></li>
 
164
        
 
165
          <li><a href="./QueueFactory.html">QueueFactory</a></li>
 
166
        
 
167
          <li><a href="./RabbitMQ.html">RabbitMQ</a></li>
 
168
        
 
169
          <li><a href="./Repo.html">Repo</a></li>
 
170
        
 
171
          <li><a href="./TaskEngine.html">TaskEngine</a></li>
 
172
        
 
173
          <li><a href="./TaskEngineAppScale.html">TaskEngineAppScale</a></li>
 
174
        
 
175
          <li><a href="./TaskEngineGoogleAppEngine.html">TaskEngineGoogleAppEngine</a></li>
 
176
        
 
177
          <li><a href="./TaskQueue.html">TaskQueue</a></li>
 
178
        
 
179
          <li><a href="./TaskQueueAzureQueue.html">TaskQueueAzureQueue</a></li>
 
180
        
 
181
          <li><a href="./TaskQueueGoogleAppEngine.html">TaskQueueGoogleAppEngine</a></li>
 
182
        
 
183
          <li><a href="./TaskQueueRabbitMQ.html">TaskQueueRabbitMQ</a></li>
 
184
        
 
185
          <li><a href="./TaskQueueSQS.html">TaskQueueSQS</a></li>
 
186
        
 
187
          <li><a href="./UserAppClient.html">UserAppClient</a></li>
 
188
        
 
189
          <li><a href="./ZKInterface.html">ZKInterface</a></li>
 
190
        
 
191
        </ul>
 
192
        <div id="no-class-search-results" style="display: none;">No matching classes.</div>
 
193
      </div>
 
194
 
 
195
      
 
196
    </div>
 
197
  </div>
 
198
 
 
199
  <div id="documentation">
 
200
    <h1 class="class">TaskEngine</h1>
 
201
 
 
202
    <div id="description">
 
203
      
 
204
    </div>
 
205
 
 
206
    <!-- Constants -->
 
207
    
 
208
 
 
209
    <!-- Attributes -->
 
210
    
 
211
 
 
212
    <!-- Methods -->
 
213
    
 
214
    <div id="public-class-method-details" class="method-section section">
 
215
      <h3 class="section-header">Public Class Methods</h3>
 
216
 
 
217
    
 
218
      <div id="new-method" class="method-detail ">
 
219
        <a name="method-c-new"></a>
 
220
 
 
221
        
 
222
        <div class="method-heading">
 
223
          <span class="method-name">new</span><span
 
224
            class="method-args">(credentials)</span>
 
225
          <span class="method-click-advice">click to toggle source</span>
 
226
        </div>
 
227
        
 
228
 
 
229
        <div class="method-description">
 
230
          
 
231
          
 
232
          
 
233
 
 
234
          
 
235
          <div class="method-source-code"
 
236
            id="new-source">
 
237
<pre>
 
238
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 3</span>
 
239
def initialize(credentials)
 
240
  raise <span class="ruby-constant">NotImplementedError</span>
 
241
end</pre>
 
242
          </div>
 
243
          
 
244
        </div>
 
245
 
 
246
        
 
247
 
 
248
        
 
249
      </div>
 
250
 
 
251
    
 
252
    </div>
 
253
  
 
254
    <div id="public-instance-method-details" class="method-section section">
 
255
      <h3 class="section-header">Public Instance Methods</h3>
 
256
 
 
257
    
 
258
      <div id="app_needs_uploading-3F-method" class="method-detail ">
 
259
        <a name="method-i-app_needs_uploading-3F"></a>
 
260
 
 
261
        
 
262
        <div class="method-heading">
 
263
          <span class="method-name">app_needs_uploading?</span><span
 
264
            class="method-args">(job_data)</span>
 
265
          <span class="method-click-advice">click to toggle source</span>
 
266
        </div>
 
267
        
 
268
 
 
269
        <div class="method-description">
 
270
          
 
271
          
 
272
          
 
273
 
 
274
          
 
275
          <div class="method-source-code"
 
276
            id="app_needs_uploading-3F-source">
 
277
<pre>
 
278
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 25</span>
 
279
def app_needs_uploading?(job_data)
 
280
  raise <span class="ruby-constant">NotImplementedError</span>
 
281
end</pre>
 
282
          </div>
 
283
          
 
284
        </div>
 
285
 
 
286
        
 
287
 
 
288
        
 
289
      </div>
 
290
 
 
291
    
 
292
      <div id="build_app_via_oration-method" class="method-detail ">
 
293
        <a name="method-i-build_app_via_oration"></a>
 
294
 
 
295
        
 
296
        <div class="method-heading">
 
297
          <span class="method-name">build_app_via_oration</span><span
 
298
            class="method-args">(job_data, dir)</span>
 
299
          <span class="method-click-advice">click to toggle source</span>
 
300
        </div>
 
301
        
 
302
 
 
303
        <div class="method-description">
 
304
          
 
305
          
 
306
          
 
307
 
 
308
          
 
309
          <div class="method-source-code"
 
310
            id="build_app_via_oration-source">
 
311
<pre>
 
312
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 30</span>
 
313
def build_app_via_oration(job_data, dir)
 
314
  <span class="ruby-constant">Djinn</span>.log_debug(<span class="ruby-string">&quot;building app via oration&quot;</span>)
 
315
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;job data is #{job_data.inspect}&quot;)
 
316
  file = job_data[<span class="ruby-string">'@code'</span>]
 
317
  output = dir + <span class="ruby-string">&quot;/appengine-app&quot;</span>
 
318
 
 
319
  <span class="ruby-comment"># TODO(cgb) - definitely check the return val here</span>
 
320
  <span class="ruby-constant">Djinn</span>.log_run(&quot;oration --file #{file} --function #{@function} &quot; +
 
321
    &quot;--appid #{@appid} --output #{output}&quot;)
 
322
  return output
 
323
end</pre>
 
324
          </div>
 
325
          
 
326
        </div>
 
327
 
 
328
        
 
329
 
 
330
        
 
331
      </div>
 
332
 
 
333
    
 
334
      <div id="engine_name-method" class="method-detail ">
 
335
        <a name="method-i-engine_name"></a>
 
336
 
 
337
        
 
338
        <div class="method-heading">
 
339
          <span class="method-name">engine_name</span><span
 
340
            class="method-args">()</span>
 
341
          <span class="method-click-advice">click to toggle source</span>
 
342
        </div>
 
343
        
 
344
 
 
345
        <div class="method-description">
 
346
          
 
347
          
 
348
          
 
349
 
 
350
          
 
351
          <div class="method-source-code"
 
352
            id="engine_name-source">
 
353
<pre>
 
354
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 100</span>
 
355
def engine_name()
 
356
  raise <span class="ruby-constant">NotImplementedError</span>
 
357
end</pre>
 
358
          </div>
 
359
          
 
360
        </div>
 
361
 
 
362
        
 
363
 
 
364
        
 
365
      </div>
 
366
 
 
367
    
 
368
      <div id="get_app_url-method" class="method-detail ">
 
369
        <a name="method-i-get_app_url"></a>
 
370
 
 
371
        
 
372
        <div class="method-heading">
 
373
          <span class="method-name">get_app_url</span><span
 
374
            class="method-args">(job_data)</span>
 
375
          <span class="method-click-advice">click to toggle source</span>
 
376
        </div>
 
377
        
 
378
 
 
379
        <div class="method-description">
 
380
          
 
381
          
 
382
          
 
383
 
 
384
          
 
385
          <div class="method-source-code"
 
386
            id="get_app_url-source">
 
387
<pre>
 
388
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 48</span>
 
389
def get_app_url(job_data)
 
390
  raise <span class="ruby-constant">NotImplementedError</span>
 
391
end</pre>
 
392
          </div>
 
393
          
 
394
        </div>
 
395
 
 
396
        
 
397
 
 
398
        
 
399
      </div>
 
400
 
 
401
    
 
402
      <div id="push-method" class="method-detail ">
 
403
        <a name="method-i-push"></a>
 
404
 
 
405
        
 
406
        <div class="method-heading">
 
407
          <span class="method-name">push</span><span
 
408
            class="method-args">(job_data)</span>
 
409
          <span class="method-click-advice">click to toggle source</span>
 
410
        </div>
 
411
        
 
412
 
 
413
        <div class="method-description">
 
414
          
 
415
          
 
416
          
 
417
 
 
418
          
 
419
          <div class="method-source-code"
 
420
            id="push-source">
 
421
<pre>
 
422
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 8</span>
 
423
def push(job_data)
 
424
  dir = <span class="ruby-constant">Djinn</span>.create_temp_dir()
 
425
  <span class="ruby-constant">Djinn</span>.copy_code_to_dir(job_data, dir)
 
426
 
 
427
  if app_needs_uploading?(job_data)
 
428
    app_location = build_app_via_oration(job_data, dir)
 
429
    upload_app(job_data, app_location)
 
430
  end
 
431
 
 
432
  job_data[<span class="ruby-string">'@host'</span>] = get_app_url(job_data)
 
433
  task_id = run_task(job_data)
 
434
  wait_for_task_to_finish(job_data, task_id)
 
435
  save_output_to_datastore(job_data)
 
436
  <span class="ruby-constant">Djinn</span>.cleanup(dir)
 
437
end</pre>
 
438
          </div>
 
439
          
 
440
        </div>
 
441
 
 
442
        
 
443
 
 
444
        
 
445
      </div>
 
446
 
 
447
    
 
448
      <div id="run_task-method" class="method-detail ">
 
449
        <a name="method-i-run_task"></a>
 
450
 
 
451
        
 
452
        <div class="method-heading">
 
453
          <span class="method-name">run_task</span><span
 
454
            class="method-args">(job_data)</span>
 
455
          <span class="method-click-advice">click to toggle source</span>
 
456
        </div>
 
457
        
 
458
 
 
459
        <div class="method-description">
 
460
          
 
461
          
 
462
          
 
463
 
 
464
          
 
465
          <div class="method-source-code"
 
466
            id="run_task-source">
 
467
<pre>
 
468
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 53</span>
 
469
def run_task(job_data)
 
470
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;running a task in #{engine_name()}&quot;)
 
471
  host = job_data[<span class="ruby-string">'@host'</span>]
 
472
 
 
473
  if job_data[<span class="ruby-string">'@argv'</span>].nil? or job_data[<span class="ruby-string">'@argv'</span>].empty?
 
474
    inputs = []
 
475
  else
 
476
    inputs = job_data[<span class="ruby-string">'@argv'</span>]
 
477
  end
 
478
 
 
479
  return <span class="ruby-constant">Djinn</span>.execute_task(host, job_data[<span class="ruby-string">'@function'</span>], inputs, 
 
480
    job_data[<span class="ruby-string">'@output'</span>])
 
481
end</pre>
 
482
          </div>
 
483
          
 
484
        </div>
 
485
 
 
486
        
 
487
 
 
488
        
 
489
      </div>
 
490
 
 
491
    
 
492
      <div id="save_output_to_datastore-method" class="method-detail ">
 
493
        <a name="method-i-save_output_to_datastore"></a>
 
494
 
 
495
        
 
496
        <div class="method-heading">
 
497
          <span class="method-name">save_output_to_datastore</span><span
 
498
            class="method-args">(job_data)</span>
 
499
          <span class="method-click-advice">click to toggle source</span>
 
500
        </div>
 
501
        
 
502
 
 
503
        <div class="method-description">
 
504
          
 
505
          
 
506
          
 
507
 
 
508
          
 
509
          <div class="method-source-code"
 
510
            id="save_output_to_datastore-source">
 
511
<pre>
 
512
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 75</span>
 
513
def save_output_to_datastore(job_data)
 
514
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;copying output from #{engine_name()} to remote datastore&quot;)
 
515
 
 
516
  host = job_data[<span class="ruby-string">'@host'</span>]
 
517
  output_location = job_data[<span class="ruby-string">'@output'</span>]
 
518
  output = <span class="ruby-constant">Djinn</span>.get_output(host, output_location)
 
519
 
 
520
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;got output from #{engine_name()} app at [#{host}], &quot; +
 
521
    &quot;stored at [#{output_location}], storing to remote datastore&quot;)
 
522
  
 
523
  local_output = &quot;/tmp/babel-#{rand()}.txt&quot;
 
524
  <span class="ruby-constant">HelperFunctions</span>.write_file(local_output, output)
 
525
  <span class="ruby-constant">Djinn</span>.save_output(local_output, job_data)
 
526
 
 
527
  return if <span class="ruby-constant">DEBUG</span>
 
528
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;cleaning up local output at #{local_output}&quot;)
 
529
  <span class="ruby-constant">FileUtils</span>.rm_f(local_output)
 
530
end</pre>
 
531
          </div>
 
532
          
 
533
        </div>
 
534
 
 
535
        
 
536
 
 
537
        
 
538
      </div>
 
539
 
 
540
    
 
541
      <div id="to_s-method" class="method-detail ">
 
542
        <a name="method-i-to_s"></a>
 
543
 
 
544
        
 
545
        <div class="method-heading">
 
546
          <span class="method-name">to_s</span><span
 
547
            class="method-args">()</span>
 
548
          <span class="method-click-advice">click to toggle source</span>
 
549
        </div>
 
550
        
 
551
 
 
552
        <div class="method-description">
 
553
          
 
554
          
 
555
          
 
556
 
 
557
          
 
558
          <div class="method-source-code"
 
559
            id="to_s-source">
 
560
<pre>
 
561
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 95</span>
 
562
def to_s()
 
563
  return &quot;Engine type: #{engine_name()}&quot;
 
564
end</pre>
 
565
          </div>
 
566
          
 
567
        </div>
 
568
 
 
569
        
 
570
 
 
571
        
 
572
      </div>
 
573
 
 
574
    
 
575
      <div id="upload_app-method" class="method-detail ">
 
576
        <a name="method-i-upload_app"></a>
 
577
 
 
578
        
 
579
        <div class="method-heading">
 
580
          <span class="method-name">upload_app</span><span
 
581
            class="method-args">(job_data, app_location)</span>
 
582
          <span class="method-click-advice">click to toggle source</span>
 
583
        </div>
 
584
        
 
585
 
 
586
        <div class="method-description">
 
587
          
 
588
          
 
589
          
 
590
 
 
591
          
 
592
          <div class="method-source-code"
 
593
            id="upload_app-source">
 
594
<pre>
 
595
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 43</span>
 
596
def upload_app(job_data, app_location)
 
597
  raise <span class="ruby-constant">NotImplementedError</span>
 
598
end</pre>
 
599
          </div>
 
600
          
 
601
        </div>
 
602
 
 
603
        
 
604
 
 
605
        
 
606
      </div>
 
607
 
 
608
    
 
609
      <div id="wait_for_task_to_finish-method" class="method-detail ">
 
610
        <a name="method-i-wait_for_task_to_finish"></a>
 
611
 
 
612
        
 
613
        <div class="method-heading">
 
614
          <span class="method-name">wait_for_task_to_finish</span><span
 
615
            class="method-args">(job_data, task_id)</span>
 
616
          <span class="method-click-advice">click to toggle source</span>
 
617
        </div>
 
618
        
 
619
 
 
620
        <div class="method-description">
 
621
          
 
622
          
 
623
          
 
624
 
 
625
          
 
626
          <div class="method-source-code"
 
627
            id="wait_for_task_to_finish-source">
 
628
<pre>
 
629
<span class="ruby-comment"># File ../Neptune/task_engine.rb, line 68</span>
 
630
def wait_for_task_to_finish(job_data, task_id)
 
631
  <span class="ruby-constant">Djinn</span>.log_debug(&quot;waiting for #{engine_name()} task to finish&quot;)
 
632
  host = job_data[<span class="ruby-string">'@host'</span>]
 
633
  <span class="ruby-constant">Djinn</span>.wait_for_task_to_complete(host, task_id)
 
634
end</pre>
 
635
          </div>
 
636
          
 
637
        </div>
 
638
 
 
639
        
 
640
 
 
641
        
 
642
      </div>
 
643
 
 
644
    
 
645
    </div>
 
646
  
 
647
 
 
648
  </div>
 
649
 
 
650
  <div id="validator-badges">
 
651
    <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
 
652
    <p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
 
653
      Rdoc Generator</a> 2</small>.</p>
 
654
  </div>
 
655
 
 
656
</body>
 
657
</html>
 
658