/* $Id$ */ /* * PSNC DRMAA for LL * Copyright (C) 2010 Poznan Supercomputing and Networking Center * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include #include #include static char lldrmaa_version[50] = ""; static fsd_drmaa_session_t * lldrmaa_new_session( fsd_drmaa_singletone_t *self, const char *contact ) { return lldrmaa_session_new( contact ); } static fsd_template_t * lldrmaa_new_job_template( fsd_drmaa_singletone_t *self ) { return drmaa_template_new(); } static const char * lldrmaa_get_contact( fsd_drmaa_singletone_t *self ) { return ""; } static void lldrmaa_get_version( fsd_drmaa_singletone_t *self, unsigned *major, unsigned *minor ) { *major = 1; *minor = 0; } static const char * lldrmaa_get_DRM_system( fsd_drmaa_singletone_t *self ) { if(lldrmaa_version[0] == '\0') /*no locks as drmaa_get_drm_system is usually called only once */ { fsd_snprintf(NULL, lldrmaa_version, sizeof(lldrmaa_version) - 1,"LoadLeveler %s", ll_version()); } return lldrmaa_version; } static const char * lldrmaa_get_DRMAA_implementation( fsd_drmaa_singletone_t *self ) { return PACKAGE_STRING; } fsd_iter_t * lldrmaa_get_attribute_names( fsd_drmaa_singletone_t *self ) { static const char *attribute_names[] = { DRMAA_REMOTE_COMMAND, DRMAA_JS_STATE, DRMAA_WD, DRMAA_JOB_CATEGORY, DRMAA_NATIVE_SPECIFICATION, DRMAA_BLOCK_EMAIL, DRMAA_START_TIME, DRMAA_JOB_NAME, DRMAA_INPUT_PATH, DRMAA_OUTPUT_PATH, DRMAA_ERROR_PATH, DRMAA_JOIN_FILES, DRMAA_WCT_HLIMIT, DRMAA_WCT_SLIMIT, NULL }; return fsd_iter_new_const( attribute_names, -1 ); } fsd_iter_t * lldrmaa_get_vector_attribute_names( fsd_drmaa_singletone_t *self ) { static const char *attribute_names[] = { DRMAA_V_ARGV, DRMAA_V_ENV, DRMAA_V_EMAIL, NULL }; return fsd_iter_new_const( attribute_names, -1 ); } static int lldrmaa_wifexited( int *exited, int stat, char *error_diagnosis, size_t error_diag_len ) { *exited = WIFEXITED(stat); return DRMAA_ERRNO_SUCCESS; } static int lldrmaa_wexitstatus( int *exit_status, int stat, char *error_diagnosis, size_t error_diag_len ) { *exit_status = WEXITSTATUS(stat); return DRMAA_ERRNO_SUCCESS; } static int lldrmaa_wifsignaled( int *signaled, int stat, char *error_diagnosis, size_t error_diag_len ) { *signaled = WIFSIGNALED(stat); return DRMAA_ERRNO_SUCCESS; } static int lldrmaa_wtermsig( char *signal, size_t signal_len, int stat, char *error_diagnosis, size_t error_diag_len ) { int sig = WTERMSIG(stat); strlcpy( signal, fsd_strsignal(sig), signal_len ); return DRMAA_ERRNO_SUCCESS; } static int lldrmaa_wcoredump( int *core_dumped, int stat, char *error_diagnosis, size_t error_diag_len ) { *core_dumped = ((stat)&0200); return DRMAA_ERRNO_SUCCESS; } static int lldrmaa_wifaborted( int *aborted, int stat, char *error_diagnosis, size_t error_diag_len ) { *aborted = (stat == -1); return DRMAA_ERRNO_SUCCESS; } fsd_drmaa_singletone_t _fsd_drmaa_singletone = { NULL, FSD_MUTEX_INITIALIZER, lldrmaa_new_session, lldrmaa_new_job_template, lldrmaa_get_contact, lldrmaa_get_version, lldrmaa_get_DRM_system, lldrmaa_get_DRMAA_implementation, lldrmaa_get_attribute_names, lldrmaa_get_vector_attribute_names, lldrmaa_wifexited, lldrmaa_wexitstatus, lldrmaa_wifsignaled, lldrmaa_wtermsig, lldrmaa_wcoredump, lldrmaa_wifaborted };