Sha256: 56dff42ed2fa0a87ef18d67c9eea3de893021921d7fdc67936779b1487d507b4

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

#! /usr/bin/env ruby
# coding: utf-8

require "comana/computationmanager.rb"
require "comana/machineinfo.rb"

#
#
#
class QueueSubmitter < ComputationManager
  QSUB_SCRIPT = "script.qsub"

  class PrepareNextError < Exception; end

  #
  def initialize(opts)
    super(opts[:d])
    @command = opts[:c]
    @nodes   = opts[:n]
    @speed  = opts[:s]
    @machineinfo = opts[:machineinfo]
    @lockdir = "lock_queuesubmitter"
  end

  def calculate
    script_path = "#{@dir}/#{QSUB_SCRIPT}"
    File.open(script_path, "w") do |io|
      dump_qsub_str(io)
    end

    system("cd #{@dir}; qsub #{script_path} > #{@dir}/#{@lockdir}/stdout")
  end

  # Raise QueueSubmitter::PrepareNextError when called.
  def prepare_next
    raise PrepareNextError
  end

  def finished?
    # do nothing
  end

  private

  def dump_qsub_str(io = nil)
    fs = @machineinfo.get_info("fileserver") #fileserver
    node_info = @machineinfo.get_info(@nodes)
    num = node_info["economy_nodes"]
    num = node_info["speed_nodes"] if @speed

    str = [
      "#! /bin/sh",
      "#PBS -N #{@dir}",
      "#PBS -l nodes=#{num}:ppn=1:#{@nodes},walltime=168:00:00",
      "#PBS -j oe",
      "mkdir -p ${PBS_O_WORKDIR}",
      "cp ${PBS_NODEFILE} ${PBS_O_WORKDIR}/pbs_nodefile",
      "rsync -azq --delete #{fs}:${PBS_O_WORKDIR}/ ${PBS_O_WORKDIR}",
      "cd ${PBS_O_WORKDIR}",
      "#{@command}",
      "#rsync -azq --delete ${PBS_O_WORKDIR}/ #{fs}:${PBS_O_WORKDIR}",
      "#rm -rf ${PBS_O_WORKDIR}",
    ].join("\n")

    if io
      io.puts str
    else
      return str
    end
  end
end


Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
comana-0.0.6 lib/comana/queuesubmitter.rb