Module: Pwrake::MasterApplication

Included in:
Rake::Application
Defined in:
lib/pwrake/master/master_application.rb

Overview

a mixin for managing Rake application.

Instance Method Summary collapse

Instance Method Details

#current_flowObject



16
17
18
# File 'lib/pwrake/master/master_application.rb', line 16

def current_flow
  @role.current_flow
end

#find_rakefile_locationObject

:nodoc:



73
74
75
76
77
78
79
80
81
82
83
84
# File 'lib/pwrake/master/master_application.rb', line 73

def find_rakefile_location # :nodoc:
  if subdir = Rake.application.current_flow[Fiber.current]
    Dir.chdir(subdir)
    if fn = have_rakefile
      [File.join(subdir,fn), Rake.original_dir]
    end
  else
    super
  end
ensure
  Dir.chdir(Rake.original_dir)
end

#invoke(t, *args) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/pwrake/master/master_application.rb', line 86

def invoke(t,*args)
  if Thread.current == @master.thread
    @branch.invoke(t,args)
  else
    @master.invoke(t,args)
  end
end

#load_rakefileObject

Find the rakefile and then load it and any pending imports.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/pwrake/master/master_application.rb', line 58

def load_rakefile
  if subdirs = pwrake_options['SUBDIR']
    subdirs.each do |x|
      begin
        Rake.application.current_flow[Fiber.current] = x
        super
      ensure
        Rake.application.current_flow[Fiber.current] = nil
      end
    end
  else
    super
  end
end

#pwrake_optionsObject



8
9
10
# File 'lib/pwrake/master/master_application.rb', line 8

def pwrake_options
  @role.option
end

#runObject

Run the Pwrake application.



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/pwrake/master/master_application.rb', line 21

def run
  standard_exception_handling do
    init("pwrake")  # <- parse options here
    @role = @master = Master.new
    t = Pwrake.clock
    @master.setup_branches
    load_rakefile
    begin
      Log.debug "init: %.6f sec" % (Pwrake.clock-t)
      t = Pwrake.clock
      top_level
      Log.debug "main: %.6f sec" % (Pwrake.clock-t)
      t = Pwrake.clock
      @failed = @master.finish
      Log.debug "finish: %.6f sec" % (Pwrake.clock-t)
    rescue SystemExit => e
      @failed = true
    rescue Exception => e
      # Exit with error message
      m = Log.bt(e)
      if @master.thread
        m += "\nIn branch thread #{@master.thread}:\n "
        if bt = @master.thread.backtrace
          m += bt.join("\n ")
        end
      end
      Log.fatal m
      $stderr.puts m
      @master.kill_end("INT")
      @failed = true
    end
    Log.info "pwrake elapsed time: %.3f sec"%(Pwrake.clock-START_CLOCK)
    Kernel.exit(false) if @failed
  end
end

#standard_rake_optionsObject



94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
# File 'lib/pwrake/master/master_application.rb', line 94

def standard_rake_options
  opts = super
  opts.each_with_index do |a,i|
    if a[0] == '--version'
      a[3] = lambda { |value|
        if defined? RAKEVERSION
          puts "rake, version #{RAKEVERSION}"
        elsif defined? Rake::VERSION
          puts "rake, version #{Rake::VERSION}"
        end
        puts "pwrake, version #{Pwrake::VERSION}"
        exit
      }
    end
  end

  opts.concat(
  [
   ['-F', '--hostfile FILE',
    "[Pw] Read hostnames from FILE",
    lambda { |value|
      options.hostfile = value
    }
   ],
   ['-j', '--jobs [N]',
    "[Pw] Number of threads at localhost (default: # of processors)",
    lambda { |value|
      if value
        if /^[+-]?\d+$/ =~ value
          options.num_threads = value.to_i
        else
          raise ArgumentError,"Invalid argument for -j: #{value}"
        end
      else
        options.num_threads = 0
      end
    }
   ],
   ['-L', '--log', '--log-dir [DIRECTORY]', "[Pw] Write log to DIRECTORY",
    lambda { |value|
      if value.kind_of? String
        options.log_dir = value
      else
        options.log_dir = ""
      end
    }
   ],
   ['--ssh-opt', '--ssh-option OPTION', "[Pw] Option passed to SSH",
    lambda { |value|
      options.ssh_option = value
    }
   ],
   ['--filesystem FILESYSTEM', "[Pw] Specify FILESYSTEM (nfs|gfarm2fs)",
    lambda { |value|
      options.filesystem = value
    }
   ],
   ['--gfarm', "[Pw] FILESYSTEM=gfarm2fs",
    lambda { |value|
      warn 'The --gfarm option may not work correctly. Execute pwrake under gfarm2fs.'
      options.filesystem = "gfarm2fs"
    }
   ],
   ['-A', '--disable-affinity', "[Pw] Turn OFF affinity (AFFINITY=off)",
    lambda { |value|
      options.disable_affinity = true
    }
   ],
   ['-S', '--disable-steal', "[Pw] Turn OFF task steal",
    lambda { |value|
      options.disable_steal = true
    }
   ],
   ['-d', '--debug',
    "[Pw] Output Debug messages",
    lambda { |value|
      options.debug = true
    }
   ],
   ['--pwrake-conf [FILE]',
    "[Pw] Pwrake configuation file in YAML",
    lambda {|value| options.pwrake_conf = value}
   ],
   ['--subdir "dir1 dir2 ..."',
    "[Pw] Join workflows in subdirectories",
    lambda { |value|
      options.subdir = value.split(/[\s,;:]+/)
    }
   ],
   ['--show-conf','--show-config',
    "[Pw] Show Pwrake configuration options",
    lambda {|value| options.show_conf = true }
   ],
   ['--report [LOGDIR]',"[Pw] Generate `report.html' (Report of workflow statistics) in LOGDIR and exit.",
    lambda {|value|
      options.report_dir = value || Dir.pwd
    }
   ],
   ['--report-image IMAGE_TYPE',"[Pw] Gnuplot output format (png,jpg,svg etc.) in report.html.",
    lambda {|value| options.report_image = value }
   ],
   ['--clear-gfarm2fs',"[Pw] Clear gfarm2fs mountpoints left after failure.",
     lambda { |value|
       require "pwrake/option/option_gfarm2fs"
       Option.new.clear_gfarm2fs
       exit
     }
   ],


  ])
  opts
end

#task_queueObject



12
13
14
# File 'lib/pwrake/master/master_application.rb', line 12

def task_queue
  @role.task_queue
end