module Tengine::Job::Dsl::Loader
ジョブDSLをロードする際に使用される語彙に関するメソッドを定義するモジュール
Public Class Methods
loading_template_block_store()
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 8 def loading_template_block_store @loading_template_block_store ||= {} end
template_block_store()
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 12 def template_block_store @template_block_store ||= {} end
template_block_store_key(job, name)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 16 def template_block_store_key(job, name) "#{job.root.id.to_s}/#{job.id.to_s}##{name}" end
update_loaded_blocks(loaded_root)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 20 def update_loaded_blocks(loaded_root) if loaded_root loading_template_block_store.each do |unsaved_job, (name, block)| loaded_job = loaded_root.vertex_by_name_path(unsaved_job.name_path) key = template_block_store_key(loaded_job, name) template_block_store[key] = block end else loading_template_block_store.each do |saved_job, (name, block)| key = template_block_store_key(saved_job, name) template_block_store[key] = block end end loading_template_block_store.clear end
Public Instance Methods
auto_sequence()
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 87 def auto_sequence @auto_sequence = true end
boot_jobs(*boot_job_names)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 91 def boot_jobs(*boot_job_names) @auto_sequence = false @boot_job_names = boot_job_names end
expansion(root_jobnet_name, options = {})
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 146 def expansion(root_jobnet_name, options = {}) options = { :name => root_jobnet_name, }.update(options) result = __with_redirection__(options) do Tengine::Job::Template::Expansion.new(options) end @jobnet.children << result result end
finally(&block)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 142 def finally(&block) jobnet("finally", :jobnet_type_key => :finally, &block) end
hadoop_job(name, options = {})
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 122 def hadoop_job(name, options = {}) result = __with_redirection__(options) do Tengine::Job::Template::Jobnet.new(:name => name, :jobnet_type_key => :hadoop_job) end result.children << start = Tengine::Job::Template::Start.new result.children << fork = Tengine::Job::Template::Fork.new result.children << map = Tengine::Job::Template::Jobnet.new(:name => "Map" , :jobnet_type_key => :map_phase ) result.children << reduce = Tengine::Job::Template::Jobnet.new(:name => "Reduce", :jobnet_type_key => :reduce_phase) result.children << join = Tengine::Job::Template::Join.new result.children << _end = Tengine::Job::Template::End.new result.edges.new(:origin_id => start.id , :destination_id => fork.id ) result.edges.new(:origin_id => fork.id , :destination_id => map.id ) result.edges.new(:origin_id => fork.id , :destination_id => reduce.id) result.edges.new(:origin_id => map.id , :destination_id => join.id ) result.edges.new(:origin_id => reduce.id, :destination_id => join.id ) result.edges.new(:origin_id => join.id , :destination_id => _end.id ) @jobnet.children << result result end
hadoop_job_run(name, *args, &block)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 115 def hadoop_job_run(name, *args, &block) script, description, options = __parse_job_args__(name, args) options[:script] = script options[:jobnet_type_key] = :hadoop_job_run jobnet(name, description, options, &block) end
job(name, *args)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 96 def job(name, *args) script, description, options = __parse_job_args__(name, args) options[:description] = options.delete(:caption) if options[:caption] options = { name: name, description: description, script: script, }.update(options) preparation = options.delete(:preparation) result = __with_redirection__(options) do Tengine::Job::Template::SshJob.new(options) end @jobnet.children << result if preparation Tengine::Job::Dsl::Loader.loading_template_block_store[result] = [:preparation, preparation] end result end
jobnet(name, *args, &block)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 38 def jobnet(name, *args, &block) options = args.extract_options! options[:description] = options.delete(:caption) if options[:caption] options = { :name => name, :description => args.first || name, }.update(options) auto_sequence = options.delete(:auto_sequence) result = __with_redirection__(options) do if @jobnet.nil? klass = Tengine::Job::Template::RootJobnet options[:dsl_version] = config.dsl_version path, lineno = *block.source_location options[:dsl_filepath] = config.relative_path_from_dsl_dir(path) options[:dsl_lineno] = lineno.to_i else klass = Tengine::Job::Template::Jobnet end klass.new(options) end result.with_start @jobnet.children << result if @jobnet if result.parent.nil? if duplicated = result.find_duplication if (duplicated.dsl_filepath != result.dsl_filepath) || (duplicated.dsl_lineno != result.dsl_lineno) raise Tengine::Job::Dsl::Error, "2 jobnet named #{name.inspect} found at #{duplicated.dsl_filepath}:#{duplicated.dsl_lineno} and #{result.dsl_filepath}:#{result.dsl_lineno}" end end end __stack_instance_variable__(:@auto_sequence, auto_sequence || @auto_sequence) do __stack_instance_variable__(:@boot_job_names, []) do __stack_instance_variable__(:@redirections, []) do __stack_instance_variable__(:@jobnet, result, &block) result.build_edges(@auto_sequence, @boot_job_names, @redirections) end end end if result.parent.nil? loaded = result.find_duplication result.save! unless loaded Tengine::Job::Dsl::Loader.update_loaded_blocks(loaded) loaded || result else result end end
Private Instance Methods
__parse_job_args__(name, args)
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 158 def __parse_job_args__(name, args) options = args.extract_options! description_or_script, script = *args if script description = description_or_script else script = description_or_script description = name end return script, description, options end
__with_redirection__(options) { || ... }
click to toggle source
# File lib/tengine/job/dsl/loader.rb, line 170 def __with_redirection__(options) destination_names = Array(options.delete(:to) || options.delete(:redirect_to)) result = yield destination_names.each do |dest_name| @redirections << [result.name, dest_name] end result end