123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- Caveats
- =======
- Standing reservation PBS_TZID
- -----------------------------
- Standing reservations cannot be submitted using the API interface alone due
- to the need to set the PBS_TZID environment variable, such reservations are
- always submitted using a CLI.
- qmgr operations for hooks and formula
- -------------------------------------
- Qmgr operations for hooks and for the job_sort_formula must be done as root,
- they are performed over the CLI.
- CLI and API differences
- -----------------------
- PTL redefines the PBS IFL such that it can dynamically call them via either
- the API or the CLI. The methods are typically named after their PBS IFL
- counterpart omitting the `pbs_` prefix, for example pbs_manager() becomes
- manager() in PTL. Each method will typically either return the return code
- of its API/CLI counterpart, or raise a specific PTL exception. In some cases
- (e.g. manager) the return value may be that of the call to the expect() method.
- When calling expect on an attribute value, the value may be different
- depending on whether the library is operating in CLI or API mode; as an
- example, when submitting a reservation, expecting it to be confirmed via the
- API calls for an expect of {'reserve_state':'2'} whereas using the CLI one
- would expect {'reserve_state':'RESV_CONFIRMED'}.
- This can be handled in several ways:
- The preferred way is to use the MATCH_RE operation on the attribute and
- check for either one of the possible values: for example to match either
- RESV_CONFIRMED or 2 one can write::
- Server().expect(RESV, {'reserve_state':(MATCH_RE,"RESV_CONFIRMED|2")})
- An alternative way is to set the operating mode to the one desired at the
- beginning of the test (to one of PTL_API, or PTL_CLI) and ensure it is set
- accordingly by calling get_op_mode(), or handle the response in the test by
- checking if the operating mode is CLI or API, which is generally speaking
- more robust and the favored approach as the automation may be run in either
- mode on different systems.
- List (non-exhaustive) of attribute type differences between CLI and API:
- - reserve_state
- - all times: ctime, mtime, qtime, reserve_start, reserve_end, estimated.start_time, Execution_Time
- Creating temp files
- -------------------
- When creating temp files, favor the use of DshUtils().mkstemp
- Unsetting attributes
- --------------------
- To unset attributes in alterjob, set the attribute value to '' (two single
- quotes) in order to escape special quote handling in Popen.
- Example::
-
- obj.unset_attributes([ATTR_Arglist])
- Stat'ing objects via db-access
- ------------------------------
- Not all object attributes are written to the DB, as a result, when using
- pbs_stat with db-access enabled, information may appear to be missing.
- Scheduler holidays file handling
- --------------------------------
- When reverting scheduler's default configuration, the holidays file is
- reverted only if it was specifically parsed, either by calling parse_holidays
- or by calling set_prime_time, to the contents of the file first parsed. In
- other words, if the contents of the file were updated outside PbsTestLab, and
- edited in PbsTestLab, the file will be reverted to that version rather than
- the vanilla file that ships with PBS Pro.
- Interactive Jobs
- ----------------
- Interactive jobs are only supported through CLI operations and require the
- pexpect module to be installed.
- Interactive Jobs are submitted as a thread that sets the jobid as soon as it
- is returned by qsub -I, such that the caller can get back to monitoring
- the state of PBS while the interactive session goes on in the thread.
- The commands to be run within an interactive session are specified in the
- job's interactive_script attribute as a list of tuples, where the first
- item in each tuple is the command to run, and the subsequent items are
- the expected returned data.
- .. topic:: Implementation details:
- The submission of an interactive job requires passing in job attributes,
- the command to execute (i.e. path to qsub -I), the hostname and a
- user-to-password map, details follow:
- On Linux/Unix:
- - when not impersonating:
- pexpect spawns the qsub -I command and expects a prompt back, for each
- tuple in the interactive_script, it sends the command and expects to
- match the return value.
- - when impersonating:
- pexpect spawns sudo -u <user> qsub -I. The rest is as described in
- non-impersonating mode.
|