diff --git a/build.xml b/build.xml index 0ddb9e563..ee7cb2851 100644 --- a/build.xml +++ b/build.xml @@ -48,6 +48,10 @@ + + + + @@ -227,8 +231,7 @@ - - + @@ -265,8 +268,7 @@ - - + diff --git a/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibBat.java b/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibBat.java index 6a4e21d77..1beb8fb86 100644 --- a/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibBat.java +++ b/java/src/org/broadinstitute/sting/jna/lsf/v7_0_6/LibBat.java @@ -15525,7 +15525,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref _consumertype - * @see \ref lsb_freeLimitInfoEnt + * #see \ref lsb_freeLimitInfoEnt */ public static native int lsb_limitInfo(_limitInfoReq req, Pointer limitItemRef, IntByReference size, LibLsf.lsInfo lsInfo); @@ -15567,7 +15567,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * $LSB_CONFDIR/cluster_name/configdir/lsb.hosts \n * $LSB_CONFDIR/cluster_name/configdir/lsb.resources * @param ent input, the array of limit information - * @see \ref lsb_limitInfo + * #see \ref lsb_limitInfo */ public static native void lsb_freeLimitInfoEnt(_limitInfoEnt ent, int size); @@ -16023,8 +16023,8 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_usergrpinfo - * @see \ref lsb_hostgrpinfo + * #see \ref lsb_usergrpinfo + * #see \ref lsb_hostgrpinfo * @param stringArray1 stringArray1 */ public static native hostPartInfoEnt.ByReference lsb_hostpartinfo(Pointer stringArray1, IntByReference numHostHosts); @@ -16135,12 +16135,12 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param hostName Passes information about jobs on the named host, host * group or cluster name. If host is null, jobs on all hosts of the batch * system will be considered. - * @see \ref lsb_openjobinfo_a - * @see \ref lsb_openjobinfo_a_ext - * @see \ref lsb_openjobinfo_req - * @see \ref lsb_closejobinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_readframejob + * #see \ref lsb_openjobinfo_a + * #see \ref lsb_openjobinfo_a_ext + * #see \ref lsb_openjobinfo_req + * #see \ref lsb_closejobinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_readframejob */ public static native int lsb_openjobinfo(long jobId, String jobName, String userName, String queueName, String hostName, int options); @@ -16209,10 +16209,10 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param hostName Passes information about jobs on the named host, host group * or cluster name. If hostName is null, jobs on all hosts of the batch system * will be considered. - * @see \ref lsb_openjobinfo - * @see \ref lsb_closejobinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_readframejob + * #see \ref lsb_openjobinfo + * #see \ref lsb_closejobinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_readframejob */ public static native jobInfoHead.ByReference lsb_openjobinfo_a(long jobId, String jobName, String userName, String queueName, String hostName, int options); @@ -16278,10 +16278,10 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param hostName Passes information about jobs on the named host, host group * or cluster name. If hostName is null, jobs on all hosts of the batch system * will be considered. - * @see \ref lsb_openjobinfo - * @see \ref lsb_closejobinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_readframejob + * #see \ref lsb_openjobinfo + * #see \ref lsb_closejobinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_readframejob */ public static native jobInfoHeadExt.ByReference lsb_openjobinfo_a_ext(long jobId, String jobName, String userName, String queueName, String hostName, int options); @@ -16322,11 +16322,11 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \par * \ref defs_lsb_openjobinfo_a * \n \ref defs_lsb_openjobinfo - * @see \ref lsb_openjobinfo_a - * @see \ref lsb_openjobinfo_a_ext - * @see \ref lsb_closejobinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_readframejob + * #see \ref lsb_openjobinfo_a + * #see \ref lsb_openjobinfo_a_ext + * #see \ref lsb_closejobinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_readframejob */ public static native jobInfoHeadExt.ByReference lsb_openjobinfo_req(jobInfoReq req); @@ -16382,13 +16382,13 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \ref job_states * \n \ref jobgroup_counterIndex * \n \ref group_nodetypes - * @see \ref lsb_openjobinfo - * @see \ref lsb_openjobinfo_a - * @see \ref lsb_closejobinfo - * @see \ref lsb_hostinfo - * @see \ref lsb_pendreason - * @see \ref lsb_queueinfo - * @see \ref lsb_suspreason + * #see \ref lsb_openjobinfo + * #see \ref lsb_openjobinfo_a + * #see \ref lsb_closejobinfo + * #see \ref lsb_hostinfo + * #see \ref lsb_pendreason + * #see \ref lsb_queueinfo + * #see \ref lsb_suspreason */ public static native jobInfoEnt.ByReference lsb_readjobinfo(IntByReference more); @@ -16440,9 +16440,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \ref lsb_submit_options * \n \ref lsb_submit_options2 * \n \ref lsb_submit_options3 - * @see \ref lsb_modify - * @see \ref ls_info - * @see \ref lsb_queueinfo + * #see \ref lsb_modify + * #see \ref ls_info + * #see \ref lsb_queueinfo */ public static native long lsb_submit(submit jobSubReq, submitReply jobSubReply); @@ -16499,14 +16499,14 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \par * \ref external_msg_processing * \n \ref group_nodetypes - * @see \ref lsb_openjobinfo - * @see \ref lsb_openjobinfo_a - * @see \ref lsb_closejobinfo - * @see \ref lsb_hostinfo - * @see \ref lsb_pendreason - * @see \ref lsb_queueinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_suspreason + * #see \ref lsb_openjobinfo + * #see \ref lsb_openjobinfo_a + * #see \ref lsb_closejobinfo + * #see \ref lsb_hostinfo + * #see \ref lsb_pendreason + * #see \ref lsb_queueinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_suspreason */ public static native jobInfoEnt.ByReference lsb_readjobinfo_cond(IntByReference more, jobInfoHeadExt jInfoHExt); @@ -16566,9 +16566,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_openjobinfo - * @see \ref lsb_readjobinfo - * @see \ref lsb_closejobinfo + * #see \ref lsb_openjobinfo + * #see \ref lsb_readjobinfo + * #see \ref lsb_closejobinfo */ public static native int lsb_readframejob(long jobId, String frameName, String user, String queue, String host, int options, Pointer frameJobInfoTbl); @@ -16609,9 +16609,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * ${LSF_ENVDIR:-/etc}/lsf.conf - * @see \ref lsb_openjobinfo - * @see \ref lsb_openjobinfo_a - * @see \ref lsb_readjobinfo + * #see \ref lsb_openjobinfo + * #see \ref lsb_openjobinfo_a + * #see \ref lsb_readjobinfo */ public static native void lsb_closejobinfo(); @@ -16654,7 +16654,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref host_ctrl_option - * @see \ref lsb_reconfig + * #see \ref lsb_reconfig */ public static native int lsb_hostcontrol(hostCtrlReq req); @@ -16713,9 +16713,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * the queues that are enabled for the hosts are of interest. * @param user The name of user. If user is not null, then only the queues * that are enabled for the user are of interest. - * @see \ref lsb_hostinfo - * @see \ref lsb_userinfo - * @see \ref lsb_usergrpinfo + * #see \ref lsb_hostinfo + * #see \ref lsb_userinfo + * #see \ref lsb_usergrpinfo */ public static native queueInfoEnt.ByReference lsb_queueinfo(Pointer queues, IntByReference numQueues, String hosts, String user, int options); @@ -16760,7 +16760,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref mbd_operation - * @see \ref lsb_openjobinfo + * #see \ref lsb_openjobinfo */ public static native int lsb_reconfig(mbdCtrlReq req); @@ -16810,9 +16810,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * ${LSF_ENVDIR:-/etc}/lsf.conf - * @see \ref lsb_chkpntjob - * @see \ref lsb_forcekilljob - * @see \ref lsb_mig + * #see \ref lsb_chkpntjob + * #see \ref lsb_forcekilljob + * #see \ref lsb_mig */ public static native int lsb_signaljob(long jobId, int sigValue); @@ -16955,8 +16955,8 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * ${LSF_ENVDIR:-/etc}/lsf.conf - * @see \ref lsb_signaljob - * @see \ref lsb_chkpntjob + * #see \ref lsb_signaljob + * #see \ref lsb_chkpntjob */ public static native int lsb_deletejob(long jobId, int times, int options); @@ -16991,7 +16991,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * none - * @see \ref lsb_signaljob + * #see \ref lsb_signaljob */ public static native int lsb_forcekilljob(long jobId); @@ -17124,8 +17124,8 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref requeuejob_options - * @see \ref lsb_movejob - * @see \ref lsb_pendreason + * #see \ref lsb_movejob + * #see \ref lsb_pendreason */ public static native int lsb_requeuejob(jobrequeue reqPtr); @@ -17167,8 +17167,8 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * none - * @see \ref ls_perror - * @see \ref ls_sysmsg + * #see \ref ls_perror + * #see \ref ls_sysmsg */ public static native String lsb_sysmsg(); @@ -17304,7 +17304,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_submit + * #see \ref lsb_submit */ public static native int lsb_mig(submig mig, IntByReference badHostIdx); @@ -17354,11 +17354,11 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \ref host_status * \n \ref host_load_BusyReason * \n \ref host_attributes - * @see \ref lsb_hostinfo_ex - * @see \ref ls_info - * @see \ref ls_loadofhosts - * @see \ref lsb_queueinfo - * @see \ref lsb_userinfo + * #see \ref lsb_hostinfo_ex + * #see \ref ls_info + * #see \ref ls_loadofhosts + * #see \ref lsb_queueinfo + * #see \ref lsb_userinfo */ public static native hostInfoEnt.ByReference lsb_hostinfo(Pointer hosts, IntByReference numHosts); @@ -17410,11 +17410,11 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * that satisfy the resource requirements is returned. Returned hosts are * sorted according to the load on the resource() given in resReq, or by * default according to CPU and paging load. - * @see \ref ls_info - * @see \ref ls_loadofhosts - * @see \ref lsb_hostinfo - * @see \ref lsb_queueinfo - * @see \ref lsb_userinfo + * #see \ref ls_info + * #see \ref ls_loadofhosts + * #see \ref lsb_hostinfo + * #see \ref lsb_queueinfo + * #see \ref lsb_userinfo * @param string1 string1 */ @@ -17469,7 +17469,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * * numHosts will be set to the actual number of hostInfoEnt structures in * the host group when this call returns. * @param resReq Any resource requirements called with the function. - * @see \ref lsb_hostinfo + * #see \ref lsb_hostinfo */ public static native condHostInfoEnt.ByReference lsb_hostinfo_cond(Pointer hosts, IntByReference numHosts, String resReq, int options); @@ -17530,7 +17530,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * ${LSF_ENVDIR:-/etc}/lsf.conf * @param position The new position of the job in a queue. position must be * a value of 1 or more. - * @see \ref lsb_pendreason + * #see \ref lsb_pendreason */ public static native int lsb_movejob(long jobId, IntByReference opCode, int position); @@ -17623,7 +17623,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref queue_ctrl_option - * @see \ref lsb_queueinfo + * #see \ref lsb_queueinfo */ public static native int lsb_queuecontrol(queueCtrlReq req); @@ -17677,8 +17677,8 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_hostinfo - * @see \ref lsb_queueinfo + * #see \ref lsb_hostinfo + * #see \ref lsb_queueinfo */ public static native userInfoEnt.ByReference lsb_userinfo(Pointer users, IntByReference numUsers); @@ -17737,7 +17737,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param groups An array of group names. * @param numGroups The number of group names.* numGroups will be updated * to the actual number of groups when this call returns. - * @see \ref lsb_usergrpinfo + * #see \ref lsb_usergrpinfo */ public static native groupInfoEnt.ByReference lsb_hostgrpinfo(Pointer groups, IntByReference numGroups, int options); @@ -17787,7 +17787,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param groups An array of group names. * @param numGroups The number of group names.* numGroups will be updated * to the actual number of groups when this call returns. - * @see \ref lsb_hostgrpinfo + * #see \ref lsb_hostgrpinfo */ public static native groupInfoEnt.ByReference lsb_usergrpinfo(Pointer groups, IntByReference numGroups, int options); @@ -17876,10 +17876,10 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * to the batch system and an error is returned. * @param jobSubReply Describes the results of the job modification to the * batch system. - * @see \ref lsb_submit - * @see \ref ls_info - * @see \ref ls_rtask - * @see \ref lsb_queueinfo + * #see \ref lsb_submit + * #see \ref ls_info + * #see \ref ls_rtask + * #see \ref lsb_queueinfo */ public static native long lsb_modify(submit jobSubReq, submitReply jobSubReply, long jobId); @@ -17964,7 +17964,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \par * \ref suspending_reasons \n * \ref suspending_subreasons - * @see \ref lsb_pendreason + * #see \ref lsb_pendreason */ public static native String lsb_suspreason(int reasons, int subreasons, loadIndexLog ld); @@ -18017,7 +18017,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param ld From \ref lsb_suspreason, when reasons is SUSP_LOAD_REASON, ld is used to * determine the name of any external load indices. ld uses the most recent load * index log in the lsb.events file. - * @see \ref lsb_geteventrec + * #see \ref lsb_geteventrec */ public static native String lsb_pendreason(int numReasons, IntByReference rsTb, jobInfoHead jInfoH, loadIndexLog ld, int clusterId); @@ -18065,7 +18065,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_calendarop + * #see \ref lsb_calendarop */ public static native calendarInfoEnt.ByReference lsb_calendarinfo(Pointer calendars, IntByReference numCalendars, String user); @@ -18131,7 +18131,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref calendar_command - * @see \ref lsb_calendarinfo + * #see \ref lsb_calendarinfo */ public static native int lsb_calendarop(int oper, int numNames, Pointer names, String desc, String calExpr, int options, String badStr); @@ -18238,7 +18238,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \n \ref defs_lsb_XF_OP * \n \ref jobgroup_controltypes * \n \ref signal_action - * @see \ref lsb_geteventrec + * #see \ref lsb_geteventrec */ public static native int lsb_puteventrec(Pointer logPtr, eventRec log_fp); @@ -18348,14 +18348,14 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \n \ref defs_lsb_XF_OP * \n \ref jobgroup_controltypes * \n \ref signal_action - * @see \ref lsb_hostcontrol - * @see \ref lsb_movejob - * @see \ref lsb_pendreason - * @see \ref lsb_puteventrec - * @see \ref lsb_queuecontrol - * @see \ref lsb_readjobinfo - * @see \ref lsb_submit - * @see \ref lsb_suspreason + * #see \ref lsb_hostcontrol + * #see \ref lsb_movejob + * #see \ref lsb_pendreason + * #see \ref lsb_puteventrec + * #see \ref lsb_queuecontrol + * #see \ref lsb_readjobinfo + * #see \ref lsb_submit + * #see \ref lsb_suspreason */ public static native eventRec.ByReference lsb_geteventrec(Pointer log_fp, IntByReference lineNum); @@ -18418,7 +18418,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * @param hostName hostName is a string containing a host name. Only shared resource * available on the specified host will be returned. If hostName is a null, * shared resource available on all hosts will be returned. - * @see \ref ls_sharedresourceinfo + * #see \ref ls_sharedresourceinfo */ public static native Pointer lsb_sharedresourceinfo(Pointer resources, IntByReference numResources, String hostName, int options); @@ -18716,7 +18716,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \n $JOB_ATTA_DIR * \n $LSB_SHAREDIR/info * - * @see \ref lsb_readjobmsg + * #see \ref lsb_readjobmsg * */ @@ -18785,7 +18785,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * $LSB_CONFDIR/cluster_name/configdir/lsb.params * \n $JOB_ATTA_DIR * \n $LSB_SHAREDIR/info - * @see \ref lsb_postjobmsg + * #see \ref lsb_postjobmsg */ public static native int lsb_readjobmsg(jobExternalMsgReq jobExternalMsg, jobExternalMsgReply jobExternalMsgReply); @@ -18836,9 +18836,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref reservation_option - * @see \ref lsb_removereservation - * @see \ref lsb_modreservation - * @see \ref lsb_reservationinfo + * #see \ref lsb_removereservation + * #see \ref lsb_modreservation + * #see \ref lsb_reservationinfo */ public static native int lsb_addreservation(addRsvRequest request, String rsvId); @@ -18876,9 +18876,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_addreservation - * @see \ref lsb_modreservation - * @see \ref lsb_reservationinfo + * #see \ref lsb_addreservation + * #see \ref lsb_modreservation + * #see \ref lsb_reservationinfo */ public static native int lsb_removereservation(String rsvId); @@ -18931,9 +18931,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * none * @param rsvId Reservation ID of the requested reservation. * @param numEnts Number of reservation entries that mbatchd returns. - * @see \ref lsb_addreservation - * @see \ref lsb_modreservation - * @see \ref lsb_removereservation + * #see \ref lsb_addreservation + * #see \ref lsb_modreservation + * #see \ref lsb_removereservation */ public static native rsvInfoEnt.ByReference lsb_reservationinfo(String rsvId, IntByReference numEnts, int options); @@ -18981,9 +18981,9 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_addreservation - * @see \ref lsb_removereservation - * @see \ref lsb_reservationinfo + * #see \ref lsb_addreservation + * #see \ref lsb_removereservation + * #see \ref lsb_reservationinfo */ public static native int lsb_modreservation(modRsvRequest request); @@ -19291,11 +19291,11 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_closestream - * @see \ref lsb_readstreamline - * @see \ref lsb_writestream - * @see \ref lsb_readstream - * @see \ref lsb_streamversion + * #see \ref lsb_closestream + * #see \ref lsb_readstreamline + * #see \ref lsb_writestream + * #see \ref lsb_readstream + * #see \ref lsb_streamversion */ // NOTE: Not in libbat //public static native int lsb_openstream(lsbStream params); @@ -19335,11 +19335,11 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_openstream - * @see \ref lsb_readstreamline - * @see \ref lsb_writestream - * @see \ref lsb_readstream - * @see \ref lsb_streamversion + * #see \ref lsb_openstream + * #see \ref lsb_readstreamline + * #see \ref lsb_writestream + * #see \ref lsb_readstream + * #see \ref lsb_streamversion */ // NOTE: Not in libbat //public static native int lsb_closestream(String config); @@ -19379,13 +19379,13 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * $LSB_CONFDIR/cluster_name/configdir/lsb.params - * @see \ref lsb_closestream - * @see \ref lsb_geteventrec - * @see \ref lsb_openstream - * @see \ref lsb_puteventrec - * @see \ref lsb_readstreamline - * @see \ref lsb_writestream - * @see \ref lsb_readstream + * #see \ref lsb_closestream + * #see \ref lsb_geteventrec + * #see \ref lsb_openstream + * #see \ref lsb_puteventrec + * #see \ref lsb_readstreamline + * #see \ref lsb_writestream + * #see \ref lsb_readstream */ // NOTE: Not in libbat //public static native String lsb_streamversion(); @@ -19488,13 +19488,13 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * \n \ref defs_lsb_XF_OP * \n \ref jobgroup_controltypes * \n \ref signal_action - * @see \ref lsb_closestream - * @see \ref lsb_geteventrec - * @see \ref lsb_openstream - * @see \ref lsb_puteventrec - * @see \ref lsb_readstreamline - * @see \ref lsb_streamversion - * @see \ref lsb_readstream + * #see \ref lsb_closestream + * #see \ref lsb_geteventrec + * #see \ref lsb_openstream + * #see \ref lsb_puteventrec + * #see \ref lsb_readstreamline + * #see \ref lsb_streamversion + * #see \ref lsb_readstream */ // NOTE: Not in libbat //public static native int lsb_writestream(eventRec logPtr); @@ -19532,13 +19532,13 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_closestream - * @see \ref lsb_geteventrec - * @see \ref lsb_openstream - * @see \ref lsb_puteventrec - * @see \ref lsb_readstreamline - * @see \ref lsb_streamversion - * @see \ref lsb_writestream + * #see \ref lsb_closestream + * #see \ref lsb_geteventrec + * #see \ref lsb_openstream + * #see \ref lsb_puteventrec + * #see \ref lsb_readstreamline + * #see \ref lsb_streamversion + * #see \ref lsb_writestream */ // NOTE: Not in libbat //public static native eventRec.ByReference lsb_readstream(IntByReference nline); @@ -19578,13 +19578,13 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * none - * @see \ref lsb_closestream - * @see \ref lsb_geteventrec - * @see \ref lsb_openstream - * @see \ref lsb_puteventrec - * @see \ref lsb_readstream - * @see \ref lsb_streamversion - * @see \ref lsb_writestream + * #see \ref lsb_closestream + * #see \ref lsb_geteventrec + * #see \ref lsb_openstream + * #see \ref lsb_puteventrec + * #see \ref lsb_readstream + * #see \ref lsb_streamversion + * #see \ref lsb_writestream */ // NOTE: Not in libbat //public static native eventRec.ByReference lsb_readstreamline(String line); @@ -19912,7 +19912,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Files: * \par * none - * @see \ref lsb_resize_release + * #see \ref lsb_resize_release */ public static native int lsb_resize_cancel(long jobId); @@ -19958,7 +19958,7 @@ public static class ByValue extends jobArrayElementLog implements Structure.ByVa * Define Statements: * \par * \ref resizablejob_related - * @see \ref lsb_resize_cancel + * #see \ref lsb_resize_cancel */ public static native int lsb_resize_release(job_resize_release req); diff --git a/scala/qscript/examples/HelloWorld.scala b/scala/qscript/examples/HelloWorld.scala new file mode 100644 index 000000000..fd3c3b71e --- /dev/null +++ b/scala/qscript/examples/HelloWorld.scala @@ -0,0 +1,9 @@ +import org.broadinstitute.sting.queue.QScript + +class HelloWorld extends QScript { + def script = { + add(new CommandLineFunction { + def commandLine = "echo hello world" + }) + } +} diff --git a/scala/src/org/broadinstitute/sting/queue/engine/DispatchJobRunner.scala b/scala/src/org/broadinstitute/sting/queue/engine/CommandLineJobRunner.scala similarity index 52% rename from scala/src/org/broadinstitute/sting/queue/engine/DispatchJobRunner.scala rename to scala/src/org/broadinstitute/sting/queue/engine/CommandLineJobRunner.scala index c037d1d90..dffe89a1f 100755 --- a/scala/src/org/broadinstitute/sting/queue/engine/DispatchJobRunner.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/CommandLineJobRunner.scala @@ -5,9 +5,29 @@ import org.broadinstitute.sting.queue.util.IOUtils import java.io.File /** - * Dispatches jobs to a compute cluster. + * Runs a command line function. */ -trait DispatchJobRunner extends JobRunner[CommandLineFunction] { +trait CommandLineJobRunner extends JobRunner[CommandLineFunction] { + /** A generated exec shell script. */ + protected var exec: File = _ + + /** Which directory to use for the job status files. */ + protected def jobStatusDir = function.jobTempDir + + /** + * Writes the function command line to an exec file. + */ + protected def writeExec() { + this.exec = IOUtils.writeTempFile(function.commandLine, ".exec", "", jobStatusDir) + } + + /** + * Removes all temporary files used for this LSF job. + */ + def removeTemporaryFiles() = { + IOUtils.tryDelete(exec) + } + /** * Builds a command line that can be run to force an automount of the directories. * @param function Function to look jobDirectories. diff --git a/scala/src/org/broadinstitute/sting/queue/engine/JobRunner.scala b/scala/src/org/broadinstitute/sting/queue/engine/JobRunner.scala index 17050cb63..0a5c9bb0d 100644 --- a/scala/src/org/broadinstitute/sting/queue/engine/JobRunner.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/JobRunner.scala @@ -28,19 +28,25 @@ trait JobRunner[TFunction <: QFunction] { */ def function: TFunction - protected def writeDone() = { + /** + * Writes the basic function description to the job done file. + */ + protected def writeDone() { val content = "%s%nDone.".format(function.description) IOUtils.writeContents(function.jobOutputFile, content) } - protected def writeError(content: String) = { + /** + * Writes the contents of the error to the error file. + */ + protected def writeError(content: String) { IOUtils.writeContents(functionErrorFile, content) } /** * Writes the stack trace to the error file. */ - protected def writeStackTrace(e: Throwable) = { + protected def writeStackTrace(e: Throwable) { val stackTrace = new StringWriter val printWriter = new PrintWriter(stackTrace) printWriter.println(function.description) @@ -53,12 +59,16 @@ trait JobRunner[TFunction <: QFunction] { * Calls back to a hook that an expert user can setup to modify a job. * @param value Value to modify. */ - protected def updateJobRun(value: Any) = { + protected def updateJobRun(value: Any) { val updater = function.updateJobRun if (updater != null) if (updater.isDefinedAt(value)) updater(value) } - private def functionErrorFile = if (function.jobErrorFile != null) function.jobErrorFile else function.jobOutputFile + /** + * Returns the path to the file to use for logging errors. + * @return the path to the file to use for logging errors. + */ + protected def functionErrorFile = if (function.jobErrorFile != null) function.jobErrorFile else function.jobOutputFile } diff --git a/scala/src/org/broadinstitute/sting/queue/engine/Lsf706JobRunner.scala b/scala/src/org/broadinstitute/sting/queue/engine/Lsf706JobRunner.scala index 71f4ce6e3..4439aa7a3 100644 --- a/scala/src/org/broadinstitute/sting/queue/engine/Lsf706JobRunner.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/Lsf706JobRunner.scala @@ -63,14 +63,14 @@ class Lsf706JobRunner(function: CommandLineFunction) extends LsfJobRunner(functi request.options |= LibBat.SUB_JOB_NAME } - exec = writeExec() + writeExec() request.command = "sh " + exec - preExec = writePreExec() + writePreExec() request.preExecCmd = "sh " + preExec request.options |= LibBat.SUB_PRE_EXEC - postExec = writePostExec() + writePostExec() request.postExecCmd = "sh " + postExec request.options3 |= LibBat.SUB3_POST_EXEC diff --git a/scala/src/org/broadinstitute/sting/queue/engine/LsfJobRunner.scala b/scala/src/org/broadinstitute/sting/queue/engine/LsfJobRunner.scala index 8a1397b65..8275ac65d 100644 --- a/scala/src/org/broadinstitute/sting/queue/engine/LsfJobRunner.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/LsfJobRunner.scala @@ -7,14 +7,11 @@ import org.broadinstitute.sting.queue.util._ /** * Runs jobs on an LSF compute cluster. */ -abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJobRunner with Logging { +abstract class LsfJobRunner(val function: CommandLineFunction) extends CommandLineJobRunner with Logging { protected var runStatus: RunnerStatus.Value = _ var jobId = -1L - /** Which directory to use for the job status files. */ - protected def jobStatusDir = function.jobTempDir - /** A file to look for to validate that the function ran to completion. */ protected var jobStatusPath: String = _ @@ -24,9 +21,6 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ /** A temporary job done file to let Queue know that the process exited with an error. */ private lazy val jobFailFile = new File(jobStatusPath + ".fail") - /** A generated exec shell script. */ - protected var exec: File = _ - /** A generated pre-exec shell script. */ protected var preExec: File = _ @@ -80,8 +74,8 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ /** * Removes all temporary files used for this LSF job. */ - def removeTemporaryFiles() = { - IOUtils.tryDelete(exec) + override def removeTemporaryFiles() = { + super.removeTemporaryFiles() IOUtils.tryDelete(preExec) IOUtils.tryDelete(postExec) IOUtils.tryDelete(jobDoneFile) @@ -92,7 +86,7 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ * Outputs the last lines of the error logs. */ protected def tailError() = { - val errorFile = if (function.jobErrorFile != null) function.jobErrorFile else function.jobOutputFile + val errorFile = functionErrorFile if (IOUtils.waitFor(errorFile, 120)) { val tailLines = IOUtils.tail(errorFile, 100) val nl = "%n".format() @@ -102,21 +96,11 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ } } - /** - * Writes an exec file to cleanup any status files and - * optionally mount any automount directories on the node. - * @return the file path to the pre-exec. - */ - protected def writeExec() = { - IOUtils.writeTempFile(function.commandLine, ".exec", "", jobStatusDir) - } - /** * Writes a pre-exec file to cleanup any status files and * optionally mount any automount directories on the node. - * @return the file path to the pre-exec. */ - protected def writePreExec() = { + protected def writePreExec() { val preExec = new StringBuilder preExec.append("rm -f '%s/'.$LSB_JOBID.done%n".format(jobStatusDir)) @@ -127,14 +111,13 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ mountCommand(function).foreach(command => preExec.append("%s%n".format(command))) - IOUtils.writeTempFile(preExec.toString, ".preExec", "", jobStatusDir) + this.preExec = IOUtils.writeTempFile(preExec.toString, ".preExec", "", jobStatusDir) } /** * Writes a post-exec file to create the status files. - * @return the file path to the post-exec. */ - protected def writePostExec() = { + protected def writePostExec() { val postExec = new StringBuilder val touchDone = function.doneOutputs.map("touch '%s'%n".format(_)).mkString @@ -153,6 +136,6 @@ abstract class LsfJobRunner(val function: CommandLineFunction) extends DispatchJ |fi |""".stripMargin.format(jobStatusDir, touchDone, touchFail)) - IOUtils.writeTempFile(postExec.toString, ".postExec", "", jobStatusDir) + this.postExec = IOUtils.writeTempFile(postExec.toString, ".postExec", "", jobStatusDir) } } diff --git a/scala/src/org/broadinstitute/sting/queue/engine/ShellJobRunner.scala b/scala/src/org/broadinstitute/sting/queue/engine/ShellJobRunner.scala index 14fc8bd97..b62e37f7b 100755 --- a/scala/src/org/broadinstitute/sting/queue/engine/ShellJobRunner.scala +++ b/scala/src/org/broadinstitute/sting/queue/engine/ShellJobRunner.scala @@ -6,7 +6,7 @@ import org.broadinstitute.sting.queue.util.{JobExitException, Logging, ShellJob} /** * Runs jobs one at a time locally */ -class ShellJobRunner(val function: CommandLineFunction) extends JobRunner[CommandLineFunction] with Logging { +class ShellJobRunner(val function: CommandLineFunction) extends CommandLineJobRunner with Logging { private var runStatus: RunnerStatus.Value = _ /** @@ -16,11 +16,14 @@ class ShellJobRunner(val function: CommandLineFunction) extends JobRunner[Comman def start() = { try { val job = new ShellJob - job.command = function.commandLine + job.workingDir = function.commandDirectory job.outputFile = function.jobOutputFile job.errorFile = function.jobErrorFile + writeExec() + job.shellScript = exec + // Allow advanced users to update the job. updateJobRun(job) @@ -39,6 +42,7 @@ class ShellJobRunner(val function: CommandLineFunction) extends JobRunner[Comman function.mkOutputDirectories() runStatus = RunnerStatus.RUNNING job.run() + removeTemporaryFiles() function.doneOutputs.foreach(_.createNewFile()) runStatus = RunnerStatus.DONE logger.info("Done: " + function.commandLine) @@ -46,6 +50,7 @@ class ShellJobRunner(val function: CommandLineFunction) extends JobRunner[Comman case jee: JobExitException => runStatus = RunnerStatus.FAILED try { + removeTemporaryFiles() function.failOutputs.foreach(_.createNewFile()) writeError(jee.getMessage) } catch { @@ -56,6 +61,7 @@ class ShellJobRunner(val function: CommandLineFunction) extends JobRunner[Comman case e => runStatus = RunnerStatus.FAILED try { + removeTemporaryFiles() function.failOutputs.foreach(_.createNewFile()) writeStackTrace(e) } catch { diff --git a/scala/src/org/broadinstitute/sting/queue/util/CommandLineJob.scala b/scala/src/org/broadinstitute/sting/queue/util/CommandLineJob.scala index 59a0a600d..f38f2b369 100644 --- a/scala/src/org/broadinstitute/sting/queue/util/CommandLineJob.scala +++ b/scala/src/org/broadinstitute/sting/queue/util/CommandLineJob.scala @@ -6,7 +6,7 @@ import java.io.File * Base utility class for a command line job. */ abstract class CommandLineJob { - var command: String = _ + var shellScript: File = _ var workingDir: File = _ var inputFile: File = _ var outputFile: File = _ diff --git a/scala/src/org/broadinstitute/sting/queue/util/IOUtils.scala b/scala/src/org/broadinstitute/sting/queue/util/IOUtils.scala index 608d5a3b0..79ffa8cb9 100644 --- a/scala/src/org/broadinstitute/sting/queue/util/IOUtils.scala +++ b/scala/src/org/broadinstitute/sting/queue/util/IOUtils.scala @@ -48,11 +48,19 @@ object IOUtils extends Logging { */ def writeContents(file: File, content: String) = FileUtils.writeStringToFile(file, content) + /** + * Reads content of a file into a string. + * Only for use on really small files! + * @param file File to read to. + * @return content Content of the file. + */ + def readContents(file: File) = FileUtils.readFileToString(file) + /** * Writes content to a temp file and returns the path to the temporary file. * @param content to write. * @param prefix Prefix for the temp file. - * @parm suffix Suffix for the temp file. + * @param suffix Suffix for the temp file. * @param directory Directory for the temp file. * @return the path to the temp file. */ diff --git a/scala/src/org/broadinstitute/sting/queue/util/ShellJob.scala b/scala/src/org/broadinstitute/sting/queue/util/ShellJob.scala index 863d2a2ea..d35633ebf 100755 --- a/scala/src/org/broadinstitute/sting/queue/util/ShellJob.scala +++ b/scala/src/org/broadinstitute/sting/queue/util/ShellJob.scala @@ -1,7 +1,5 @@ package org.broadinstitute.sting.queue.util -import org.broadinstitute.sting.queue.QException - /** * Runs a job on the command line by invoking "sh -c " */ @@ -10,14 +8,12 @@ class ShellJob extends CommandLineJob with Logging { * Runs the command and waits for the output. */ def run() = { - assert(command != null, "Command was not set on job") - val (redirectError, errorFile) = if (this.errorFile == null) (true, null) else (false, this.errorFile) val bufferSize = if (redirectError || logger.isDebugEnabled) FIVE_MB else 0 val stdinSettings = new ProcessController.InputStreamSettings(null, this.inputFile) val stdoutSettings = new ProcessController.OutputStreamSettings(bufferSize, this.outputFile, true) val stderrSettings = new ProcessController.OutputStreamSettings(FIVE_MB, errorFile, true) - val commandLine = Array("sh", "-c", command) + val commandLine = Array("sh", shellScript.toString) val processSettings = new ProcessController.ProcessSettings( commandLine, null, this.workingDir, stdinSettings, stdoutSettings, stderrSettings, redirectError) diff --git a/scala/test/org/broadinstitute/sting/queue/util/ShellJobUnitTest.scala b/scala/test/org/broadinstitute/sting/queue/util/ShellJobUnitTest.scala new file mode 100644 index 000000000..bec771e2a --- /dev/null +++ b/scala/test/org/broadinstitute/sting/queue/util/ShellJobUnitTest.scala @@ -0,0 +1,76 @@ +package org.broadinstitute.sting.queue.util + +import org.broadinstitute.sting.BaseTest +import org.testng.annotations.Test +import java.io.File +import org.testng.Assert + +class ShellJobUnitTest extends BaseTest { + @Test + def testEcho { + val job = new ShellJob + job.shellScript = writeScript("echo Hello World") + job.run() + } + + @Test(expectedExceptions=Array(classOf[JobExitException])) + def testBadQuotes { + val job = new ShellJob + job.shellScript = writeScript("echo 'Hello World") + job.run() + } + + @Test + def testGoodQuotes { + val job = new ShellJob + job.shellScript = writeScript("echo 'Hello World'") + job.run() + } + + @Test + def testEscapeCharacters { + var job: ShellJob = null + + job = new ShellJob + job.shellScript = writeScript("echo #") + job.outputFile = File.createTempFile("temp", "") + job.run() + Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, "") + + job = new ShellJob + job.shellScript = writeScript("""echo \#""") + job.outputFile = File.createTempFile("temp", "") + job.run() + Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, "#") + + job = new ShellJob + job.shellScript = writeScript("""echo \\#""") + job.outputFile = File.createTempFile("temp", "") + job.run() + Assert.assertEquals(IOUtils.readContents(job.outputFile).trim, """\#""") + } + + @Test + def testLongCommand { + // This command fails on some systems with a 4096 character limit when run via the old sh -c "echo ...", + // but works on the same systems when run via sh