%{
/* $Id$ */
/*
* FedStage DRMAA for PBS Pro
* Copyright (C) 2006-2009 FedStage Systems
* Copyright (C) 2011 Poznan Supercomputing and Networking Center
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifdef HAVE_CONFIG_H
# include
#endif
#include
#include
#include
#ifndef lint
static char rcsid[]
# ifdef __GNUC__
__attribute__ ((unused))
# endif
= "$Id$";
#endif
extern const fsd_attribute_t pbsdrmaa_pbs_attributes[];
#define t(code) \
( & pbsdrmaa_pbs_attributes[ code ] )
%}
%language=ANSI-C
%includes
%readonly-tables
%pic
%define lookup-function-name pbsdrmaa_pbs_attrib_lookup
%struct-type
struct pbs_attrib { int name; const fsd_attribute_t *attr; }
%%
Execution_Time, t(PBSDRMAA_ATTR_EXECUTION_TIME)
Checkpoint, t(PBSDRMAA_ATTR_CHECKPOINT)
Error_Path, t(PBSDRMAA_ATTR_ERROR_PATH)
group_list, t(PBSDRMAA_ATTR_GROUPS)
Hold_Types, t(PBSDRMAA_ATTR_HOLD_TYPES)
Join_Path, t(PBSDRMAA_ATTR_JOIN_FILES)
Keep_Files, t(PBSDRMAA_ATTR_KEEP_FILES)
# Resource_List, t(PBSDRMAA_ATTR_RESOURCES)
Resource_List.cput, t(PBSDRMAA_ATTR_CPU_TIME_LIMIT)
Resource_List.file, t(PBSDRMAA_ATTR_FILE_SIZE_LIMIT)
Resource_List.nice, t(PBSDRMAA_ATTR_NICE)
Resource_List.vmem, t(PBSDRMAA_ATTR_VMEM_LIMIT)
Resource_List.mem, t(PBSDRMAA_ATTR_MEM_LIMIT)
Resource_List.pcput, t(PBSDRMAA_ATTR_SINGLE_CPU_TIME_LIMIT)
Resource_List.pmem, t(PBSDRMAA_ATTR_SINGLE_RSS_LIMIT)
Resource_List.pvmem, t(PBSDRMAA_ATTR_SINGLE_VMEM_LIMIT)
Resource_List.walltime, t(PBSDRMAA_ATTR_WALLTIME_LIMIT)
Resource_List.arch, t(PBSDRMAA_ATTR_ARCHITECTURE)
Resource_List.host, t(PBSDRMAA_ATTR_HOST)
Resource_List.nodes, t(PBSDRMAA_ATTR_NODES)
Resource_List.procs, t(PBSDRMAA_ATTR_PROCS)
Resource_List.ncpus, t(PBSDRMAA_ATTR_NCPUS)
Resource_List.software, t(PBSDRMAA_ATTR_SOFTWARE)
Mail_Points, t(PBSDRMAA_ATTR_MAIL_POINTS)
Output_Path, t(PBSDRMAA_ATTR_OUTPUT_PATH)
Priority, t(PBSDRMAA_ATTR_PRIORITY)
destination, t(PBSDRMAA_ATTR_DESITINATION)
Rerunable, t(PBSDRMAA_ATTR_RERUNABLE)
job_array_request, t(PBSDRMAA_ATTR_BULK_REQ)
job_array_id, t(PBSDRMAA_ATTR_BULK_IDX)
User_List, t(PBSDRMAA_ATTR_USERS)
Variable_List, t(PBSDRMAA_ATTR_JOB_ENVIRONMENT)
Account_Name, t(PBSDRMAA_ATTR_ACCOUNT_NAME)
Mail_Users, t(PBSDRMAA_ATTR_EMAIL)
Job_Name, t(PBSDRMAA_ATTR_JOB_NAME)
Shell_Path_List, t(PBSDRMAA_ATTR_SHELL)
depend, t(PBSDRMAA_ATTR_DEPEND)
interactive, t(PBSDRMAA_ATTR_INTERACTIVE)
stagein, t(PBSDRMAA_ATTR_STAGEIN)
stageout, t(PBSDRMAA_ATTR_STAGEOUT)
# additional job and general attribute names
exec_host, t(PBSDRMAA_ATTR_EXECUTION_HOST)
exec_vnode, t(PBSDRMAA_ATTR_EXECUTION_VNODE)
Job_Owner, t(PBSDRMAA_ATTR_JOB_OWNER)
resources_used, t(PBSDRMAA_ATTR_RESOURCES_USED)
job_state, t(PBSDRMAA_ATTR_JOB_STATE)
queue, t(PBSDRMAA_ATTR_QUEUE)
server, t(PBSDRMAA_ATTR_SERVER)
comment, t(PBSDRMAA_ATTR_COMMENT)
exit_status, t(PBSDRMAA_ATTR_EXIT_STATUS)
start_time, t(PBSDRMAA_ATTR_START_TIME)
x, t(PBSDRMAA_ATTR_EXTENSION)
submit_args, t(PBSDRMAA_ATTR_SUBMIT_ARGS)
mtime, t(PBSDRMAA_ATTR_MTIME)
Resource_List.node_properties, t(PBSDRMAA_ATTR_NODE_PROPERTIES)
Resource_List.custom_resources, t(PBSDRMAA_ATTR_CUSTOM_RESOURCES)
%%
#undef t
int
pbsdrmaa_pbs_attrib_by_name( const char *name )
{
const struct pbs_attrib *found;
found = pbsdrmaa_pbs_attrib_lookup( name, strlen(name) );
if( found )
return found->attr->code;
else
return -1;
}
static const fsd_attribute_t *
pbsdrmaa_pbs_template_by_name( const fsd_template_t *self, const char *name )
{
const struct pbs_attrib *found;
found = pbsdrmaa_pbs_attrib_lookup( name, strlen(name) );
if( found != NULL )
{
fsd_assert( found->attr - pbsdrmaa_pbs_attributes == found->attr->code );
return found->attr;
}
else
fsd_exc_raise_fmt(
FSD_ERRNO_INVALID_ARGUMENT,
"invalid PBS attribute name: %s", name
);
}
static const fsd_attribute_t *
pbsdrmaa_pbs_template_by_code( const fsd_template_t *self, int code )
{
if( 0 <= code && code < PBSDRMAA_N_PBS_ATTRIBUTES )
{
fsd_assert( pbsdrmaa_pbs_attributes[code].code == code );
return & pbsdrmaa_pbs_attributes[ code ];
}
else
fsd_exc_raise_fmt(
FSD_ERRNO_INVALID_ARGUMENT,
"invalid PBS attribute code: %d", code
);
}
fsd_template_t *
pbsdrmaa_pbs_template_new(void)
{
return fsd_template_new(
pbsdrmaa_pbs_template_by_name,
pbsdrmaa_pbs_template_by_code,
PBSDRMAA_N_PBS_ATTRIBUTES
);
}
const fsd_attribute_t pbsdrmaa_pbs_attributes[ PBSDRMAA_N_PBS_ATTRIBUTES ] = {
{ "Execution_Time", PBSDRMAA_ATTR_EXECUTION_TIME, false },
{ "Checkpoint", PBSDRMAA_ATTR_CHECKPOINT, false },
{ "Error_Path", PBSDRMAA_ATTR_ERROR_PATH, false },
{ "group_list", PBSDRMAA_ATTR_GROUPS, false },
{ "Hold_Types", PBSDRMAA_ATTR_HOLD_TYPES, false },
{ "Join_Path", PBSDRMAA_ATTR_JOIN_FILES, false },
{ "Keep_Files", PBSDRMAA_ATTR_KEEP_FILES, false },
{ "Resource_List.cput", PBSDRMAA_ATTR_CPU_TIME_LIMIT, false },
{ "Resource_List.file", PBSDRMAA_ATTR_FILE_SIZE_LIMIT, false },
{ "Resource_List.nice", PBSDRMAA_ATTR_NICE, false },
{ "Resource_List.vmem", PBSDRMAA_ATTR_VMEM_LIMIT, false },
{ "Resource_List.mem", PBSDRMAA_ATTR_MEM_LIMIT, false },
{ "Resource_List.pcput", PBSDRMAA_ATTR_SINGLE_CPU_TIME_LIMIT, false },
{ "Resource_List.pmem", PBSDRMAA_ATTR_SINGLE_RSS_LIMIT, false },
{ "Resource_List.pvmem", PBSDRMAA_ATTR_SINGLE_VMEM_LIMIT, false },
{ "Resource_List.walltime", PBSDRMAA_ATTR_WALLTIME_LIMIT, false },
{ "Resource_List.arch", PBSDRMAA_ATTR_ARCHITECTURE, false },
{ "Resource_List.host", PBSDRMAA_ATTR_HOST, false },
{ "Resource_List.nodes", PBSDRMAA_ATTR_NODES, false },
{ "Resource_List.procs", PBSDRMAA_ATTR_PROCS, false },
{ "Resource_List.ncpus", PBSDRMAA_ATTR_NCPUS, false },
{ "Resource_List.software", PBSDRMAA_ATTR_SOFTWARE, false },
{ "Mail_Points", PBSDRMAA_ATTR_MAIL_POINTS, false },
{ "Output_Path", PBSDRMAA_ATTR_OUTPUT_PATH, false },
{ "Priority", PBSDRMAA_ATTR_PRIORITY, false },
{ "destination", PBSDRMAA_ATTR_DESITINATION, false },
{ "Rerunable", PBSDRMAA_ATTR_RERUNABLE, false },
{ "job_array_request", PBSDRMAA_ATTR_BULK_REQ, false },
{ "job_array_id", PBSDRMAA_ATTR_BULK_IDX, false },
{ "User_List", PBSDRMAA_ATTR_USERS, false },
{ "Variable_List", PBSDRMAA_ATTR_JOB_ENVIRONMENT, false },
{ "Account_Name", PBSDRMAA_ATTR_ACCOUNT_NAME, false },
{ "Mail_Users", PBSDRMAA_ATTR_EMAIL, false },
{ "Job_Name", PBSDRMAA_ATTR_JOB_NAME, false },
{ "Shell_Path_List", PBSDRMAA_ATTR_SHELL, false },
{ "depend", PBSDRMAA_ATTR_DEPEND, false },
{ "interactive", PBSDRMAA_ATTR_INTERACTIVE, false },
{ "stagein", PBSDRMAA_ATTR_STAGEIN, false },
{ "stageout", PBSDRMAA_ATTR_STAGEOUT, false },
{ "exec_host", PBSDRMAA_ATTR_EXECUTION_HOST, false },
{ "exec_vnode", PBSDRMAA_ATTR_EXECUTION_VNODE, false },
{ "Job_Owner", PBSDRMAA_ATTR_JOB_OWNER, false },
{ "resources_used", PBSDRMAA_ATTR_RESOURCES_USED, false },
{ "job_state", PBSDRMAA_ATTR_JOB_STATE, false },
{ "queue", PBSDRMAA_ATTR_QUEUE, false },
{ "server", PBSDRMAA_ATTR_SERVER, false },
{ "comment", PBSDRMAA_ATTR_COMMENT, false },
{ "exit_status", PBSDRMAA_ATTR_EXIT_STATUS, false },
{ "start_time", PBSDRMAA_ATTR_START_TIME, false },
{ "x", PBSDRMAA_ATTR_EXTENSION, false },
{ "submit_args", PBSDRMAA_ATTR_SUBMIT_ARGS, false },
{ "mtime", PBSDRMAA_ATTR_MTIME, false },
{ "Resource_List.node_properties", PBSDRMAA_ATTR_NODE_PROPERTIES, false }, /* DRMAA extenstions */
{ "Resource_List.custom_resources", PBSDRMAA_ATTR_CUSTOM_RESOURCES, false },
};
/* vim: set ft=c: */