It only makes sense to call the command KDCTCL, if jobs are processed in your application using a “limited number of processes for TAC classes”, i.e. no TAC-PRIORITIES statement is generated (see the openUTM manual “Generating Applications”).
With KDCTCL you can:
get information on the current settings for the TAC classes. To do this, enter KDCTCL without the operands TASKS and TASKSFREE.
change the maximum number of processes that can process TACs of a TAC class at the same time. You can only change this value if the KDCDEF generation of your application does not contain the TAC-PRIORTIES statement.
The number of processes that you can allow for individual TAC classes is limited by the maximum number of processes defined in the MAX statement during the KDCDEF generation (operands TASKS, ASYNTASKS and TASKS-IN-PGWT).
If you enter a higher number of processes, KDCTCL is rejected.After the KDCTCL, the actual number of processes set for processing TACs of a TAC class may be smaller than the value set with KDCTCL. The actual number of processes depends on the current number of processes for the entire application (set with the start parameter TASKS or by administration, e.g. using KDCAPPL).
You can define the maximum number of processes for a TAC class in one of two ways: either by entering the number of processes allowed to process TACs in one TAC class at the same time (TASKS operand); or by entering the minimum number of processes in the application that are to be kept available for processing the TACs in other TAC classes (TASKSFREE operand). The following section explains the difference between TASKS and TASKSFREE:
When you use TASKS, the maximum number of processes available to the specified TAC class is independent of the number of processes currently available for the entire application program. This means that the number of processes in the TAC class remains constant even if the number of processes in the entire application is reduced. This applies until such time as the number of processes in the TAC class and the number in the entire application are identical.
The use of the TASKS operand can (in extreme cases) cause processes in one TAC class to hinder those in all other TAC classes.
When you use TASKSFREE, the maximum number of processes available to the specified TAC class depends, in the dynamic context, on the number of processes currently available for the entire application program. The reserve number specified in TASKSFREE is always kept free for processes in other TAC classes.
The maximum number of processes for one TAC class is then obtained in the following manner:
Dialog TAC classes (1 - 8): current number of all processes available for dialog TACs in the entire application program (TASKS), less the number in TASKSFREE, but at least one process
Asynchronous TAC classes (9 -16): current number of all processes available for asynchronous TACs in the entire application program (TASKS), less the number in TASKSFREE.
Effect in UTM cluster applications
In UTM cluster applications, KDCTCL applies locally in the node.
Period of validity of the change
This change does not remain in force beyond the end of the application. The available number of processes is determined by the most recent KDCTCL call entered.
KDCTCL CLASS=tacclass
[ ,{ TASKS=number_tasks | TASKSFREE=number_tasks } ]
CLASS=tacclass
Number of the TAC class for which the number of processes should be changed. For tacclass you can enter a number between 1 and 16 (1 <= tacclass <= 16).
TASKS=number_tasks
May only be specified if no priority control is generated for the application, i.e. if the application is generated without TAC-PRIORITIES.
Specifies how many processes in the application are allowed to process TACs in TAC class tacclass at the same time.
With TASKS you define the absolute number of processes for a TAC class.
Minimum value of number_tasks:
For dialog TACs (class 1-8) number_tasks must be >= 1. Otherwise dialog services would be locked and the users on the terminal would have to wait until services were released again.
For asynchronous TACs (class 9-16), number_tasks must be =0.
Maximum value of number_tasks:
The permitted maximum value for number_tasks depends on the following factors:
On whether the TAC class was generated with PGWT=YES or with PGWT=NO.
PGWT=YES means that the program units in the TAC class can run with lock calls (e.g. KDCS call PGWT).On the values for TASKS, TASKS-IN-PGWT and ASYNTASKS generated statically in the KDCDEF control statement MAX.
See the following table for the permitted value ranges for TASKS.
TAC class | PGWT= | Permitted maximum value |
1 - 8 (dialog TACs) | NO | TASKS *) |
YES | TASKS-IN-PGWT *) | |
9 - 16 (asynchronous TACs) | NO | ASYNTASKS *) |
YES | The smaller of the values: |
*) As generated statically in the KDCDEF control statement MAX
TASKSFREE=number_tasks
May only be specified if no priority control is generated for the application, i.e. if the application is generated without TAC-PRIORITIES.
In TASKSFREE you specify how many processes of the application are to be reserved for processing other TAC classes than the one specified.
If number_tasks is greater than the number of processes available to the entire application program, the following occurs:
if tacclass is a dialog TAC class, one process remains available for processing its TACs;
if tacclass is an asynchronous TAC class, the number of processes available to it = 0.
Minimum value of number_tasks: 0
Maximum value of number_tasks:
The permitted maximum value for number_tasks depends on the statically generated values for TASKS and ASYNTASKS in the KDCDEF control statement MAX.
See the following table for the permitted value ranges for TASKSFREE.
TAC class | PGWT= | Permitted maximum value |
1 - 8 (dialog TACs) | NO | TASKS - 1 *) |
YES | TASKS - 1 *) | |
9 - 16 (asynchronous | NO | ASYNTASKS *) |
YES | ASYNTASKS *) |
*) As statically generated in the KDCDEF control statement MAX
Output from KDCTCL
If you enter KDCTCL without TASKS or TASKSFREE, you are only shown the currently set values. Otherwise, the output for the specified TAC class shows you the new and old process numbers. Output is displayed on the administrator terminal.
TACCLASS TASKS TASKS-FREE NEW OLD NEW OLD tac-class number number number number
Explanation of the output
TACCLASS | Number of the TAC class |
TASKS | Absolute number of processes available for processing the TACs in this TAC class. If you called KDCTCL ... TASKSFREE=, the following value is displayed: Process number currently set for the application - TASKFREE |
TASKS-FREE | Number of processes kept free for other TAC classes. If you entered KDCTCL ... TASKS=, the output of TASKS-FREE is always 0 to show that you made an absolute entry for this TAC class. |
Example
The following table illustrates the impact of various changes to the number of processes:
Dialog TACs | Asynchronous TACs | |||||
Action | CURRENT TASKS | TASKS FREE | TASKS | CURRENT TASKS | TASKS FREE | TASKS |
Initial status | 4 | 0 | 3 | 3 | 0 | 3 |
Change TASKS-FREE 0 --> 2 | 4 | 2 | 2 | 3 | 2 | 1 |
Change CURRENT TASKS reduced by 2 | 2 | 2 | 1 | 1 | 2 | 0 |
CURRENT-TASKS
This represents the maximum number of processes that can currently be used at the same time for the application (dialog TACs) or the maximum number of processes that can currently process asynchronous jobs at the same time (asynchronous TACs).
TASKS
Designates the appropriate maximum number of processes for the specified TAC class.
TASKS-FREE
Designates the number of processes reserved for the other TAC class.