module DRMAA

Constants

ACTION_HOLD
ACTION_RELEASE
ACTION_RESUME
ACTION_SUSPEND

drmaa_control() constants

ACTION_TERMINATE
ALL_JOBS
ANY_JOB
DRMMA_TO_OOD_STATE_MAP
EC
ERRNO_MAP_095

need errno mapping due to errno's changed from DRMAA 0.95 to 1.0 … sigh!

ERRNO_MAP_100
ErrSize

101 character buffer constant (length is arbitrary)

PLACEHOLDER_HD
PLACEHOLDER_INCR

placeholders for job input/output/error path and working dir

PLACEHOLDER_WD
STATE_DONE
STATE_FAILED
STATE_QUEUED_ACTIVE
STATE_RUNNING
STATE_SYSTEM_ON_HOLD
STATE_SYSTEM_SUSPENDED
STATE_UNDETERMINED

drmaa_job_ps() constants

STATE_USER_ON_HOLD
STATE_USER_SUSPENDED
STATE_USER_SYSTEM_ON_HOLD
STATE_USER_SYSTEM_SUSPENDED
WaitSize

Public Class Methods

contact() click to toggle source

returns string specifying contact information int drmaa_get_contact(char *, size_t, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 252
def DRMAA.contact
    contact = " " * ErrSize
    err = " " * ErrSize
    r,r1 = FFI_DRMAA.drmaa_get_contact(contact, ErrSize, err, ErrSize)
    r1 = [contact, ErrSize, err, ErrSize]
    contact.delete! "\000"
    contact.strip!
    DRMAA.throw(r, r1[2])
    return r1[0]
end
drm_system() click to toggle source

returns string specifying the DRM system int drmaa_get_drm_system(char *, size_t , char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 239
def DRMAA.drm_system
    drm = " " * 20
    err = " " * ErrSize
    r = FFI_DRMAA.drmaa_get_DRM_system(drm, 20, err, ErrSize)
    r1 = [drm, 20, err, ErrSize]
    DRMAA.throw(r, r1[2])
    drm.delete! "\000"
    drm.strip!
    return r1[0]
end
drmaa_implementation() click to toggle source

returns string specifying DRMAA implementation int drmaa_get_DRMAA_implementation(char *, size_t , char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 265
def DRMAA.drmaa_implementation
    err = " " * ErrSize
    impl = " " * 30
    r = FFI_DRMAA.drmaa_get_DRMAA_implementation(impl, 30, err, ErrSize)
    r1 = [impl, 30, err, ErrSize]
    DRMAA.throw(r, r1[2])
    impl.delete! "\000"
    impl.strip!
    return r1[0]
end
version() click to toggle source

returns DRMAA version (e.g. 1.0 or 0.95) int drmaa_version(unsigned int *, unsigned int *, char *, size_t )

# File lib/ood_core/job/adapters/drmaa.rb, line 278
def DRMAA.version
    err= " " * ErrSize
    major = FFI::MemoryPointer.new(:int, 1)
    minor = FFI::MemoryPointer.new(:int, 1)
    r = FFI_DRMAA.drmaa_version major,minor, err, ErrSize
    r1 = [major.read_int,minor.read_int, err, ErrSize]  
    DRMAA.throw(r, r1[2])
    @version = r1[0] + (Float(r1[1])/100)
end

Private Class Methods

allocate_job_template() click to toggle source

int drmaa_allocate_job_template(drmaa_job_template_t **, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 333
def DRMAA.allocate_job_template
    err=" " * ErrSize
    jt = FFI::MemoryPointer.new :pointer
    r = FFI_DRMAA.drmaa_allocate_job_template jt, err, ErrSize
    r1 = [jt,err,ErrSize]

    DRMAA.throw(r, r1[1])
    return jt
end
attributes() click to toggle source

int drmaa_get_attribute_names(drmaa_attr_names_t **, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 362
def DRMAA.attributes()
    err=""
    (0..100).each { |x| err << " "}
    jt = FFI::MemoryPointer.new :pointer
    r = FFI_DRMAA.get_attribute_names jt, err, ErrSize
    r1 = [jt,err,ErrSize]
    DRMAA.throw(r, r1[1])
    return DRMAA.get_attr_names(jt)
end
control(job, action) click to toggle source

int drmaa_control(const char *, int , char *, size_t )

# File lib/ood_core/job/adapters/drmaa.rb, line 306
def DRMAA.control(job, action)
    err = ' ' * ErrSize
    r = FFI_DRMAA.drmaa_control(job, action, err, ErrSize)
    r1 = [job, action, err, ErrSize]
    DRMAA.throw(r, r1[2])
end
delete_job_template(jt) click to toggle source

int drmaa_delete_job_template(drmaa_job_template_t *, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 344
def DRMAA.delete_job_template(jt)
    err = EC
    r,r1 = @drmaa_delete_job_template.call(jt.ptr, err, ErrSize)
    DRMAA.throw(r, r1[1])
end
errno2str(drmaa_errno) click to toggle source
# File lib/ood_core/job/adapters/drmaa.rb, line 207
        def DRMAA.errno2str(drmaa_errno)
#            stack = caller
#            puts stack
            if DRMAA.version < 1.0
                s = ERRNO_MAP_095.find{ |pair| pair[1] == drmaa_errno }[0]
            else
                s = ERRNO_MAP_100.find{ |pair| pair[1] == drmaa_errno }[0]
            end
            s = "DRMAA_ERRNO_INTERNAL_ERROR" if s.nil?
             puts "errno2str(" + drmaa_errno.to_s + ") = " + s
            return s
        end
exit() click to toggle source

int drmaa_exit(char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 325
def DRMAA.exit
    err=" " * ErrSize
    r = FFI_DRMAA.drmaa_exit err, ErrSize-1
    r1 = [err,ErrSize-1]
    DRMAA.throw(r, r1[0])
end
get_all(ids, nxt, rls) click to toggle source
# File lib/ood_core/job/adapters/drmaa.rb, line 372
def DRMAA.get_all(ids, nxt, rls)
    if DRMAA.version < 1.0
        errno_expect = DRMAA.str2errno("DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE")
    else
        errno_expect = DRMAA.str2errno("DRMAA_ERRNO_NO_MORE_ELEMENTS")
    end
    # STDERR.puts "get_all(1)"
    values = Array.new
    ret = 0
    while  ret != errno_expect do
        # STDERR.puts "get_all(2) " + DRMAA.errno2str(ret)
        err=" " * ErrSize
        jobid=" " * ErrSize
        r = FFI_DRMAA.send(nxt,ids.get_pointer(0), jobid, ErrSize)
        jobid = jobid.unpack('Z*')[0]
        # unpack null-terminated string , return first value
        r1 =  [ids.get_pointer(0),jobid,ErrSize]
        
        if r != errno_expect
            DRMAA.throw(r, "unexpected error")
            values.push(r1[1])
            # puts "get_all(3) " + DRMAA.errno2str(r)
        end
        ret = r
    end
    # puts "get_all(4)"
    FFI_DRMAA.send(rls,ids.get_pointer(0))
    return values
end
get_attr_names(names) click to toggle source

int drmaa_get_next_attr_name(drmaa_attr_names_t*, char *, size_t ) void drmaa_release_attr_names(drmaa_attr_names_t*)

# File lib/ood_core/job/adapters/drmaa.rb, line 411
def DRMAA.get_attr_names(names)
    return DRMAA.get_all(names, :drmaa_get_next_attr_name, :drmaa_release_attr_names)
end
get_attr_values(ids) click to toggle source

int drmaa_get_next_attr_value(drmaa_attr_values_t*, char *, size_t ) void drmaa_release_attr_values(drmaa_attr_values_t*)

# File lib/ood_core/job/adapters/drmaa.rb, line 417
def DRMAA.get_attr_values(ids)
    return DRMAA.get_all(ids, :drmaa_get_next_attr_value, :drmaa_release_attr_values)
end
get_attribute(jt, name) click to toggle source

int drmaa_get_attribute(drmaa_job_template_t *, const char *, char *,

size_t , char *, size_t)
# File lib/ood_core/job/adapters/drmaa.rb, line 562
def DRMAA.get_attribute(jt, name)
    err = " " * ErrSize
    value = " " * ErrSize
    r = FFI_DRMAA.drmaa_get_attribute jt.get_pointer(0), name, value, ErrSize, err, ErrSize
    value = value.unpack('Z*')[0]
    # unpack null-terminated string , return first value
    r1 = [jt.get_pointer(0), name, value, ErrSize, err, ErrSize]
    DRMAA.throw(r, r1[3])
    return r1[2]
end
get_job_ids(ids) click to toggle source

int drmaa_get_next_job_id(drmaa_job_ids_t*, char *, size_t ) void drmaa_release_job_ids(drmaa_job_ids_t*)

# File lib/ood_core/job/adapters/drmaa.rb, line 404
def DRMAA.get_job_ids(ids)
    return DRMAA.get_all(ids, :drmaa_get_next_job_id, :drmaa_release_job_ids)
end
get_vector_attribute(jt, name) click to toggle source

int drmaa_get_vector_attribute(drmaa_job_template_t *, const char *,

drmaa_attr_values_t **, char *, size_t )
# File lib/ood_core/job/adapters/drmaa.rb, line 575
def DRMAA.get_vector_attribute(jt, name)
    err=" " * ErrSize
    attr = FFI::MemoryPointer.new :pointer
    r = FFI_DRMAA.drmaa_get_vector_attribute jt.get_pointer(0), name, attr, err, ErrSize
    r1 = [jt.get_pointer(0), name, attr, err, ErrSize]  
    DRMAA.throw(r, r1[3])

    # Original author had a method called "drmaa_get_vector_attribute" that did the same thing as this
    return DRMAA.get_attr_values(attr)
end
init(contact) click to toggle source

int drmaa_init(const char *, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 315
def DRMAA.init(contact)
    err=" " * ErrSize
    r = FFI_DRMAA.drmaa_init contact, err, ErrSize-1
    r1 = [contact,err,ErrSize-1]
    contact.delete! "\000"
    contact.strip!
    DRMAA.throw(r, r1[1])
end
job_ps(job) click to toggle source

int drmaa_job_ps( const char *, int *, char *, size_t )

# File lib/ood_core/job/adapters/drmaa.rb, line 296
def DRMAA.job_ps(job)
    err = " " * ErrSize
    state = FFI::MemoryPointer.new(:int,4)
    r = FFI_DRMAA.drmaa_job_ps(job, state, err, ErrSize)
    r1 = [job, state.read_int, err, ErrSize]
    DRMAA.throw(r, r1[2])
    return r1[1]
end
run_bulk_jobs(jt, first, last, incr) click to toggle source

int drmaa_run_bulk_jobs(drmaa_job_ids_t **, const drmaa_job_template_t *jt,

int, int, int, char *, size_t)
# File lib/ood_core/job/adapters/drmaa.rb, line 502
def DRMAA.run_bulk_jobs(jt, first, last, incr)
    err = " " * ErrSize
    #strptrs = []
    #numJobs = (last - first + 1) / incr
    #numJobs.times {|i| strptrs << FFI::MemoryPointer.from_string(i) }
    #strptrs << nil
    #ids = FFI::MemoryPointer.new(:pointer,strptrs.length)
    #strptrs.each_with_index do |p,i|
    #    ids[i].put_pointer(0, p)
    #end
    ids = FFI::MemoryPointer.new :pointer
    r = FFI_DRMAA.drmaa_run_bulk_jobs(ids, jt.get_pointer(0), first, last, incr, err, ErrSize)
    r1 = [ids, jt, first, last, incr, err, ErrSize]
    DRMAA.throw(r, r1[5])
    return DRMAA.get_job_ids(ids)
end
run_job(jt) click to toggle source

int drmaa_run_job(char *, size_t, const drmaa_job_template_t *, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 520
def DRMAA.run_job(jt)
    err=" " * ErrSize
    jobid=" " * ErrSize
    r = FFI_DRMAA.drmaa_run_job jobid, ErrSize, jt.get_pointer(0), err, ErrSize
    r1 = [jobid,ErrSize,jt.get_pointer(0), err, ErrSize]
    jobid.delete! "\000"
    jobid.strip!

    DRMAA.throw(r, r1[3])
    return r1[0]
end
set_attribute(jt, name, value) click to toggle source

int drmaa_set_attribute(drmaa_job_template_t *, const char *, const char *, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 533
def DRMAA.set_attribute(jt, name, value)
    err=" " * ErrSize
    r = FFI_DRMAA.drmaa_set_attribute jt.get_pointer(0), name, value, err, ErrSize
    r1 =  [jt.get_pointer(0),name,value,err,ErrSize]
    DRMAA.throw(r, r1[3])
end
set_vector_attribute(jt, name, ary) click to toggle source

int drmaa_set_vector_attribute(drmaa_job_template_t *, const char *,

const char *value[], char *, size_t)
# File lib/ood_core/job/adapters/drmaa.rb, line 542
def DRMAA.set_vector_attribute(jt, name, ary)
    err=" " * ErrSize
    ary.flatten!

    strptrs = []
    ary.each { |x| strptrs << FFI::MemoryPointer.from_string(x) }
    strptrs << nil

    argv = FFI::MemoryPointer.new(:pointer,strptrs.length)
    strptrs.each_with_index do |p,i|
        argv[i].put_pointer(0, p)
    end

    r = FFI_DRMAA.drmaa_set_vector_attribute jt.get_pointer(0), name, argv, err, ErrSize
    r1 = [jt.get_pointer(0),name, argv, err, ErrSize]
    DRMAA.throw(r, r1[3])
end
str2errno(str) click to toggle source
# File lib/ood_core/job/adapters/drmaa.rb, line 220
def DRMAA.str2errno(str)
    if DRMAA.version < 1.0
        errno = ERRNO_MAP_095.find{ |pair| pair[0] == str }[1]
    else
        errno = ERRNO_MAP_100.find{ |pair| pair[0] == str }[1]
    end
    errno = 1 if errno.nil? # internal error
    # puts "str2errno(" + str + ") = " + errno.to_s
    return errno
end
strerror(errno) click to toggle source

const char *drmaa_strerror(int drmaa_errno)

# File lib/ood_core/job/adapters/drmaa.rb, line 290
def DRMAA.strerror(errno)
    r =  @drmaa_strerror.call(drmaa_errno)
    return r.to_s
end
synchronize(jobs, timeout, dispose) click to toggle source

int drmaa_synchronize(const char *job_ids[], signed long timeout, int dispose, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 587
def DRMAA.synchronize(jobs, timeout, dispose)
    err = " " * ErrSize
    if dispose == false
        disp = 0
    else
        disp = 1
    end
    errno_timeout = DRMAA.str2errno("DRMAA_ERRNO_EXIT_TIMEOUT")
    jobs.flatten!
    strptrs = []
    jobs.each { |x| strptrs << FFI::MemoryPointer.from_string(x) }
    strptrs << nil
    job_ids = FFI::MemoryPointer.new(:pointer,strptrs.length)
    strptrs.each_with_index do |p,i|
        job_ids[i].put_pointer(0, p)
    end
    r = FFI_DRMAA.drmaa_synchronize job_ids, timeout, disp, err, ErrSize
    r1 = [job_ids, timeout, disp, err, ErrSize]
    if r == errno_timeout
        return false
    else
        DRMAA.throw(r, r1[3]) 
        return true
    end
end
throw(r, diag) click to toggle source
# File lib/ood_core/job/adapters/drmaa.rb, line 613
def DRMAA.throw(r, diag)
    return if r == 0
    s_errno = DRMAA.errno2str(r)
    case s_errno
    when "DRMAA_ERRNO_INTERNAL_ERROR"
        raise DRMAAInternalError, diag
    when "DRMAA_ERRNO_DRM_COMMUNICATION_FAILURE"
        raise DRMAACommunicationError, diag
    when "DRMAA_ERRNO_AUTH_FAILURE"
        raise DRMAAAuthenticationError, diag
    when "DRMAA_ERRNO_INVALID_ARGUMENT"
        raise DRMAAInvalidArgumentError, diag
    when "DRMAA_ERRNO_NO_ACTIVE_SESSION"
        raise DRMAANoActiveSessionError, diag
    when "DRMAA_ERRNO_NO_MEMORY"
        raise DRMAANoMemoryError, diag
    when "DRMAA_ERRNO_INVALID_CONTACT_STRING"
        raise DRMAAInvalidContactError, diag
    when "DRMAA_ERRNO_DEFAULT_CONTACT_STRING_ERROR"
        raise DRMAADefaultContactError, diag
    when "DRMAA_ERRNO_NO_DEFAULT_CONTACT_STRING_SELECTED"
        raise DRMAANoDefaultContactSelected, diag
    when "DRMAA_ERRNO_DRMS_INIT_FAILED"
        raise DRMAASessionInitError, diag
    when "DRMAA_ERRNO_ALREADY_ACTIVE_SESSION"
        raise DRMAAAlreadyActiveSessionError, diag
    when "DRMAA_ERRNO_DRMS_EXIT_ERROR"
        raise DRMAASessionExitError, diag
    when "DRMAA_ERRNO_INVALID_ATTRIBUTE_FORMAT"
        raise DRMAAInvalidAttributeFormatError, diag
    when "DRMAA_ERRNO_INVALID_ATTRIBUTE_VALUE"
        raise DRMAAInvalidAttributeValueError, diag
    when "DRMAA_ERRNO_CONFLICTING_ATTRIBUTE_VALUES"
        raise DRMAAConflictingAttributeValuesError, diag
    when "DRMAA_ERRNO_TRY_LATER"
        raise DRMAATryLater, diag
    when "DRMAA_ERRNO_DENIED_BY_DRM"
        raise DRMAADeniedError, diag
    when "DRMAA_ERRNO_INVALID_JOB"
        raise DRMAAInvalidJobError, diag
    when "DRMAA_ERRNO_RESUME_INCONSISTENT_STATE"
        raise DRMAAResumeInconsistent, diag
    when "DRMAA_ERRNO_SUSPEND_INCONSISTENT_STATE"
        raise DRMAASuspendInconsistent, diag
    when "DRMAA_ERRNO_HOLD_INCONSISTENT_STATE"
        raise DRMAAHoldInconsistent, diag
    when "DRMAA_ERRNO_RELEASE_INCONSISTENT_STATE"
        raise DRMAAReleaseInconsistent, diag
    when "DRMAA_ERRNO_EXIT_TIMEOUT"
        raise DRMAATimeoutExit, diag
    when "DRMAA_ERRNO_NO_RUSAGE"
        raise DRMAANoRusage, diag
    when "DRMAA_ERRNO_NO_MORE_ELEMENTS"
        raise DRMAANoMoreElements, diag
    end
end
vector_attributes() click to toggle source

int drmaa_get_vector_attribute_names(drmaa_attr_names_t **, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 351
def DRMAA.vector_attributes()
    err=""
    (0..100).each { |x| err << " "}
    jt = FFI::MemoryPointer.new :pointer
    r = FFI_DRMAA.drmaa_get_vector_attribute_names jt, err, ErrSize
    r1 = [jt,err,ErrSize]
    DRMAA.throw(r, r1[1])
    return DRMAA.get_attr_names(jt)
end
wait(jobid, timeout) click to toggle source

int drmaa_wait(const char *, char *, size_t , int *, signed long ,

drmaa_attr_values_t **, char *, size_t );
# File lib/ood_core/job/adapters/drmaa.rb, line 477
def DRMAA.wait(jobid, timeout)
    errno_timeout = DRMAA.str2errno("DRMAA_ERRNO_EXIT_TIMEOUT")
    errno_no_rusage = DRMAA.str2errno("DRMAA_ERRNO_NO_RUSAGE")
    err = " " * ErrSize
    waited = " " * WaitSize
    stat = FFI::MemoryPointer.new(:int,4)
    usage = FFI::MemoryPointer.new :pointer, 1

    r = FFI_DRMAA.drmaa_wait jobid, waited, WaitSize, stat, timeout, usage, err, ErrSize
    r1 = [jobid, waited, WaitSize, stat, timeout, usage, err, ErrSize]
    # getting null's at end of string
    waited.delete! "\000"
    waited.strip!

    return nil if r == errno_timeout
    if r != errno_no_rusage
        DRMAA.throw(r, r1[6])
        return JobInfo.new(r1[1], r1[3], usage) 
    else
        return JobInfo.new(r1[1], r1[3])
    end
end
wcoredump(stat) click to toggle source

int drmaa_wcoredump(int *, int , char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 437
def DRMAA.wcoredump(stat)
    return DRMAA.wif(stat, :drmaa_wcoredump)
end
wexitstatus(stat) click to toggle source

int drmaa_wexitstatus(int *, int, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 456
def DRMAA.wexitstatus(stat)
    err = " " * ErrSize
    ret = FFI::MemoryPointer.new(:int,4)
    r = FFI_DRMAA.drmaa_wexitstatus(ret, stat, err, ErrSize)
    r1 = [ret, stat, err, ErrSize]
    DRMAA.throw(r, r1[2]) 
    return r1[0].read_int
end
wif(stat, method) click to toggle source
# File lib/ood_core/job/adapters/drmaa.rb, line 441
def DRMAA.wif(stat, method)
    err = " " * ErrSize
    intp = FFI::MemoryPointer.new(:int,4)
    r = FFI_DRMAA.send(method, intp, stat, err, ErrSize)
    r1 = [intp, stat, err, ErrSize]
    DRMAA.throw(r, r1[2])
    boo = r1[0].read_int
    if boo == 0
        return false
    else
        return true
    end
end
wifaborted(stat) click to toggle source

int drmaa_wifaborted(int *, int , char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 432
def DRMAA.wifaborted(stat)
    return DRMAA.wif(stat, :drmaa_wifaborted)
end
wifexited(stat) click to toggle source

int drmaa_wifexited(int *, int, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 422
def DRMAA.wifexited(stat)
    return DRMAA.wif(stat, :drmaa_wifexited)
end
wifsignaled(stat) click to toggle source

int drmaa_wifsignaled(int *, int, char *, size_t)

# File lib/ood_core/job/adapters/drmaa.rb, line 427
def DRMAA.wifsignaled(stat)
    return DRMAA.wif(stat, :drmaa_wifsignaled)
end
wtermsig(stat) click to toggle source

int drmaa_wtermsig(char *signal, size_t signal_len, int stat, char *error_diagnosis, size_t error_diag_len);

# File lib/ood_core/job/adapters/drmaa.rb, line 466
def DRMAA.wtermsig(stat)
    err = " " * ErrSize
    signal = " " * ErrSize
    r = FFI_DRMAA.drmaa_wtermsig(signal, ErrSize, stat, err, ErrSize)
    r1 = [signal, ErrSize, stat, err, ErrSize]
    DRMAA.throw(r, r1[3]) 
    return r1[0]
end