First Edition (December 1999)
This edition applies to:
and to all subsequent versions, releases, and modifications until otherwise indicated in new editions. Consult the latest edition of the applicable system bibliography for current information on these products.
This softcopy version is based on the printed edition of this book. Some formatting amendments have been made to make this information more suitable for softcopy.
Order publications through your IBM or Transarc representative or through the IBM branch office serving your locality.
At the end of this publication is a topic titled "Readers' Comments". If you want to make comments, but the methods described are not available to you, please address them to:
IBM Corporation, 11 Stanwix Street, Pittsburgh, PA 15222, USA.When you send information to IBM or Transarc, you grant them a nonexclusive right to use or distribute the information in any way they believe appropriate without incurring any obligation to you.
© Copyright International Business Machines Corporation 1999; Transarc Corporation, 1999. All rights reserved.
Note to U.S. Government Users -- Documentation related to restricted rights -- Use, duplication or disclosure is subject to restrictions set forth in GSA ADP Schedule contract with IBM Corp.
Obtaining the TXSeries PTF Set
Installing the TXSeries PTF Set for TXSeries CICS
Installing the TXSeries PTF Set for Encina
The TXSeries Program Temporary Fix (PTF) Set is a collection of cumulative product patches and recent software fixes. For TXSeries(TM), separate PTF Sets exist for CICS and Encina. Each TXSeries PTF Set is installed with its requisite software and tested on the supported platforms. For certain operating systems, patched software products are tested concurrently; on other systems, patched products are tested independently.
For example, this TXSeries PTF Set is supported for use with the following operating systems:
This TXSeries PTF Set has been installed and formally tested concurrently with the software products listed for the following platforms:
For HP-UX 10.20:
For IBM AIX 4.2.1:
For IBM AIX 4.3.2:
For Solaris 2.6:
For Windows NT 4.0 with Service Pack 4:
For Windows NT 4.0 with Service Pack 4:
The following products have been installed and tested independently:
This document is written for system administrators and programmers responsible for configuration, administration, and customization of systems that use the IBM Transarc software listed in the Introduction. This document assumes that readers are familiar with system administration and programming in general and with the platforms they are using.
This document also provides information about updates to the product that can be useful to system administrators and programmers.
This document has the following organization:
This chapter describes the procedure for downloading the TXSeries PTF Set for IBM TXSeries 4.2 for Solaris and the prerequisites that you must meet before downloading the patch.
Note: | If you wish to be notified in an e-mail message about future patch and TXSeries PTF Set releases, subscribe to the Patch Notification mailing list at the following URL: |
This section describes the requirements that you must meet to download the TXSeries PTF Set for Solaris.
The TXSeries PTF Set is delivered as a compressed file. Before downloading this file to your machine, ensure that enough space is available to accommodate it. See the IBM Transarc Web site for information about the size of the TXSeries PTF Set patch file.
There are several methods for obtaining the latest TXSeries PTF Set for TXSeries for Solaris:
The following sections describe each of these methods.
To download the TXSeries PTF Set from IBM Transarc's Web site, use the following procedure:
# mkdir /tmp/ptf_directory
# cd /tmp/ptf_directory
Note: | The patch file is downloaded as a compressed tar file. When specifying the location in which to save the file, use the .tar.Z filename extension to indicate that the file is a compressed tar file. |
# zcat ptf_file | tar -xvf -In this command, ptf_file is the full pathname of the CICS or Encina patch you downloaded.
You have now successfully downloaded and uncompressed the TXSeries PTF Set. Follow the installation instructions in Installing the TXSeries PTF Set for TXSeries CICS or Installing the TXSeries PTF Set for Encina to install the appropriate patch on your system.
The TXSeries PTF Set is available on other media upon request. Contact your TXSeries support representative to request the TXSeries PTF Set on other media. You will need your media choice and mailing address information.
This chapter describes the procedure for installing the TXSeries PTF Set for TXSeries CICS 4.2 for the Solaris operating environment, and the prerequisites that you must meet before beginning installation.
Table 1 lists the prerequisites for installing the TXSeries PTF
Set.
Table 1. Prerequisites for installing the TXSeries PTF Set
Component | Requirement |
Operating environment | Solaris version 2.5.1 or 2.6 |
Distributed Computing Environment (DCE) | IBM Transarc DCE 2.0 with CPL 5 |
CICS (servers and clients) |
TXSeries CICS 4.2
|
Note: | This TXSeries PTF Set was tested using Solaris 2.6 and IBM Transarc DCE 2.0 with CPL 5. |
You must install the Solaris recommended patches from SunSoft. These
Solaris patches are required to correct problems in the Solaris operating
environment. You can determine which patches are already installed on a
machine by using the showrev -p command. Note that SunSoft
can make additional revisions of these patches available at any time;
always install the latest revision of a patch. This TXSeries PTF Set
was tested using the following set of recommended patches for the Solaris
2.6 operating environment:
patch ID 105181-16 | patch ID 105210-24 | patch ID 105216-03 |
patch ID 105284-25 | patch ID 105356-09 | patch ID 105357-04 |
patch ID 105375-15 | patch ID 105379-05 | patch ID 105395-06 |
patch ID 105401-20 | patch ID 105407-01 | patch ID 105464-02 |
patch ID 105490-07 | patch ID 105552-02 | patch ID 105558-04 |
patch ID 105562-03 | patch ID 105566-07 | patch ID 105580-13 |
patch ID 105600-09 | patch ID 105604-08 | patch ID 105615-05 |
patch ID 105621-17 | patch ID 105642-05 | patch ID 105665-03 |
patch ID 105669-08 | patch ID 105703-14 | patch ID 105720-08 |
patch ID 105741-05 | patch ID 105755-07 | patch ID 105786-08 |
patch ID 105797-06 | patch ID 105800-05 | patch ID 105802-08 |
patch ID 105837-03 | patch ID 105926-01 | patch ID 106040-11 |
patch ID 106049-01 | patch ID 106125-07 | patch ID 106193-03 |
patch ID 106222-01 | patch ID 106226-01 | patch ID 106235-03 |
patch ID 106242-02 | patch ID 106257-04 | patch ID 106271-05 |
patch ID 106301-01 | patch ID 106439-05 | patch ID 106448-01 |
patch ID 106495-01 | patch ID 106828-01 | patch ID 107434-01 |
Perform the following steps to install TXSeries PTF Set for CICS 4.2 on a machine running the Solaris operating environment:
# /opt/dce/bin/dce_login DCE_admin_principal
# /opt/cics/bin/cicsstop regionName
# /opt/cics/bin/cicstail -r regionName
When the following message appears in the command output, the region has stopped successfully:
*** Shutdown of CICS region "regionName" is complete ***
# /opt/cics/bin/cicssfsshut /.:/cics/sfs/sfsServerName
# mkdir /opt/backup_directory
# cd /tmp/ptf_directory
# ./cicssave.sol -d /opt/backup_directory
In these commands, ptf_directory is the full pathname of the directory that contains the uncompressed TXSeries PTF Set packages and backup_directory is the full pathname of the directory you created to contain a backup of your current installation of CICS.
# pkgadd -d . [-r ./CICSProd.res] [-a ./PTF.admin]
The -r and the -a options and their arguments are required if you are upgrading a production system; if you are upgrading a development system, do not include them in the command.
Note: | Use the pkginfo command after installing or removing a TXSeries PTF Set to verify the current CICS patch level. |
Note: | If any copy of cicsprCOBOL was built to support transactions using other products (such as a relational database management product), rebuild cicsmkcobol by using the same operands that were used originally. Refer to the CICS Administration Reference for more information. |
# /opt/cics/bin/cicsdb2conf -I -r regionName -C -i instanceName \ -a databaseName -s
In this command, the -I option directs the command to ignore nonfatal errors, the -C option specifies the complete configuration of DB2 for the region and the configuration of the region resources for DB2, and the -s option suppresses creation of the XA definition (XAD). The regionName is the name of the region using the corresponding DB2 instance (instanceName) and DB2 database (databaseName).
You can safely ignore error messages about the creation of queue objects.
Note: | This step is not necessary if you are using CICS-supplied switch load files. |
# /opt/cics/bin/cicssfs /.:/cics/sfs/sfsServerName
# /opt/cics/bin/cicsstart regionName
# /opt/cics/bin/cicstail -r regionName
The region has started successfully when the command output displays the following message:
*** CICS startup is complete ***
To ensure that no errors occurred during the region restart, you can also check the appropriate console.number file in the /var/cics_regions/regionName directory. To determine the appropriate console file, view the region's console.nam file in the same directory.
# /opt/cics/bin/cicsstart regionName
Use the cicstail command as shown in Step 4c to verify that each remote region has been restarted.
# ./cicsbackout.sol -d /opt/backup_directory
where backup_directory is the same directory that was specified with the cicssave.sol script in Step 7 before installation of the TXSeries PTF Set.
# /opt/cics/bin/cicsterm -r regionName
The output of this command is a blank screen on which you can enter CICS commands.
The TXSeries PTF Set documentation is included in the TXSeries PTF Set tar file, along with the updated CICS packages. The documentation is provided in Hypertext Markup Language (HTML) format in the file named READPTF.lang.htm. Extract the TXSeries PTF Set documentation by using the tar command:
# tar -xvf ptf_file READPTF.lang.htm
In this command, ptf_file is the pathname of the TXSeries PTF Set file you downloaded, and lang is the locale in which you want to view the documentation. For example, the file named README.en_US.htm is in U.S. English.
TXSeries PTF Set documentation is also available at the following IBM Transarc Web site:
http://www.transarc.com/Library/documentation
This chapter describes the procedure for installing the TXSeries PTF Set for TXSeries Encina 4.2 for the Solaris operating environment, and the prerequisites that you must meet before beginning installation.
Table 2 lists the prerequisites for installing the TXSeries PTF
Set.
Table 2. Prerequisites for installing the TXSeries PTF Set
Component | Requirement |
Operating environment | Solaris version 2.5.1 or 2.6 |
Distributed Computing Environment (DCE) | IBM Transarc DCE 2.0 with CPL 5 |
Encina (servers and clients) | TXSeries Encina 4.2 |
Note: | This TXSeries PTF Set was tested using Solaris 2.6 and IBM Transarc DCE 2.0 with CPL 5. |
You must install the Solaris Recommended Patches from SunSoft. These
Solaris patches are required to correct problems in the Solaris operating
environment. You can determine which patches are already installed on a
machine by using the showrev -p command. Note that SunSoft
can make additional revisions of these patches available at any future
time; always install the latest revision of a patch. This TXSeries
PTF Set was tested using the following set of Recommended Patches for the
Solaris 2.6 operating environment:
patch ID 105181-16 | patch ID 105210-24 | patch ID 105216-03 |
patch ID 105284-25 | patch ID 105356-09 | patch ID 105357-04 |
patch ID 105375-15 | patch ID 105379-05 | patch ID 105395-06 |
patch ID 105401-20 | patch ID 105407-01 | patch ID 105464-02 |
patch ID 105490-07 | patch ID 105552-02 | patch ID 105558-04 |
patch ID 105562-03 | patch ID 105566-07 | patch ID 105580-13 |
patch ID 105600-09 | patch ID 105604-08 | patch ID 105615-05 |
patch ID 105621-17 | patch ID 105642-05 | patch ID 105665-03 |
patch ID 105669-08 | patch ID 105703-14 | patch ID 105720-08 |
patch ID 105741-05 | patch ID 105755-07 | patch ID 105786-08 |
patch ID 105797-06 | patch ID 105800-05 | patch ID 105802-08 |
patch ID 105837-03 | patch ID 105926-01 | patch ID 106040-11 |
patch ID 106049-01 | patch ID 106125-07 | patch ID 106193-03 |
patch ID 106222-01 | patch ID 106226-01 | patch ID 106235-03 |
patch ID 106242-02 | patch ID 106257-04 | patch ID 106271-05 |
patch ID 106301-01 | patch ID 106439-05 | patch ID 106448-01 |
patch ID 106495-01 | patch ID 106828-01 | patch ID 107434-01 |
Before installing the TXSeries PTF Set on a machine, you must shut down all Encina servers running on that machine, including cell and node managers, application servers, and recoverable servers. If a client is running on the machine, you must shut it down also.
Note: | When you install the TXSeries PTF Set on the machine on which your Encina cell manager runs, you must decide whether you want to keep all of the other servers in the cell running or shut them down. If you shut down the cell manager in a multinode cell without shutting down all of the servers in that cell, any serious messages that are emitted while the cell manager is down can be lost. To avoid this problem, shut down all of the servers in the cell before shutting down the cell manager. You do not need to shut down all of the node managers in the cell, only the node manager on the machine on which you are installing the TXSeries PTF Set. |
Perform the following steps to install the TXSeries PTF Set for Encina 4.2 on a machine running the Solaris operating environment:
# /opt/dce/bin/dce_login Encina_admin_principal
# /opt/encina/bin/enconsole /.:/cell_name &
In this command, cell_name is the name of your Encina Monitor cell. For information on using Enconsole, see your Encina documentation.
# cd /opt # tar -cvf /dev/tape encinalocal encinamirror
# mkdir /opt/backup_directory
# cd ptf_directory
# ./encsave.sol -d /opt/backup_directory
In these commands, ptf_directory is the full pathname of the directory that contains the uncompressed TXSeries PTF Set packages and backup_directory is the full pathname of the directory you created to contain a backup of your current installation of Encina.
# pkgadd -d ptf_directory
In this command, ptf_directory is the full pathname of the directory that contains the uncompressed TXSeries PTF Set packages.
Note: | Use the pkginfo command after installing or removing a patch to verify the current Encina patch level. |
# /opt/encinalocal/cell_name/ecm/rc.encina.cell
In this command, cell_name is the name of your Monitor cell.
# /opt/encinalocal/cell_name/node/node_name/rc.encina.node_name -enable
In this command, cell_name is the name of your Monitor cell, and node_name is the name of the local node manager.
# /opt/encina/bin/enconsole /.:/cell_name &
# ./encbackout.sol -d /opt/backup_directory
In this command, backup_directory is the full pathname of the directory that was used with the encsave.sol script in Step 16.
The TXSeries PTF Set documentation is included in the TXSeries PTF Set tar file, along with the updated Encina packages. The documentation is provided in Hypertext Markup Language (HTML) format in the file named READPTF.lang.htm. Extract the TXSeries PTF Set documentation by using the tar command as follows:
# tar -xvf ptf_file READPTF.lang.htm
In this command, ptf_file is the pathname of the TXSeries PTF Set file you downloaded, and lang is the locale in which you want to view the documentation. For example, the file namedREADME.en_US.htm is in U.S. English.
TXSeries PTF Set documentation is also available at the following IBM Transarc Web site:
http://www.transarc.com/Library/documentation
This chapter describes the updates to TXSeries included in the TXSeries PTF Set for CICS 4.2. The most recent changes made to CICS are described in Updates in PTF Set 7. All other changes are listed in descending APAR order in the section Updates in all previous patches.
The existing System Network Architecture (SNA) communications code in TXSeries 4.2 applies the SNA receive_and_wait procedure to most communications occurring over region-to-region or Common Client-to-region intersystem connections. This SNA receive_and_wait procedure blocks processing until the remote region fully replies to the sent request. A timeout process for SNA conversations was required to remove the block and deallocate the conversation.
Changes have been implemented to provide a timeout process for use by SNA receive processes. Now, SNA receive processes issue a new message, ERZ59999E, stating that the time-out period has expired. The SNA receive process deallocates the SNA conversation and issues the abend message AB61, which describes the expiration of the SNA timeout period.
A timeout facility on TCP/IP connections between a distributed CICS region and a Universal Client for TXSeries CICS was required by feature 201992. Code changes were made to header and configuration files for implementation of this feature.
The regco.cdf files have been changed to allow a new IEntry field, TimeOutSupported. This feature is supported in a runtime-only mode, so no migration tool is needed; however, a cold start is required. The header file change and the extra #define code, used to modify the data stream, are added to the comcl_priv.h file. The CCIN function, a CICS function that receives information from remote systems, has been modified to read the TimeOutSupported value on the request for a client connection. The field is self-defining, so existing clients can still connect without code changes, other than setting the default value of TimeOutSupported to False. Setting the default value of TimeOutSupported is the only change required to support the timeout capability in the CCIN install request from the Universal Client.
Abend code U3466 was returned during the processing of the RegDC_CleanUp procedure because the procedure invoked a mutex before the mutex had been initialized. The abend code was triggered by a signal 28 (sigwinch) message, which caused the application server to fail.
Mutex initialization is now performed in the TasTA_InitTask procedure, rather than in the RegDC_TaskInit procedure. This change causes the calls to the procedures to occur in the proper sequence for handling the mutex initialization requirements.
On AIX multiprocessor machines, contention for the EventData mutex occurred when the main thread was waiting for the Event Responder Thread (ERT) to handle an event. The main thread cycled in an unlock/yield/lock loop within the function while the ERT was blocked from locking the EventData mutex.
A short (one-millisecond) delay was included into the unlock/yield/lock loop. This ensures that the ERT is able to lock the EventData mutex and process the event.
Code changes that were made to certification and decertification of the threadTID failed to properly handle thread cancellation procedures.
Additional changes were made to the threadTID processing to test for thread certification and handle thread cancellation as follows: If the main thread is certified, it cannot be canceled. If the main thread is decertified, it can be canceled.
Abends occurred on some user transactions resulting in display of the following messages:
ERZ057002E/0259 CICS internal error: Unsuccessful condition TASTA_MYCATASK->AsyncAborted for function 'TasLU_CheckForAbort' ERZ05605E/0017 Abnormal termination U5655: a crucial mutual \ exclusion lock at address xxxx is held by a terminated process.
These errors occurred because the processes that perform the thread certification and decertification were called at the wrong time in the code.
Code changes were made to implement the certification and decertification of threadTIDs around user transactions and user exits. However, if the CICS Application server (cicsas) process is XA-registered, the thread is not decertified. The XA specifications mandate that the XA Logical Unit of Work (LUW) cannot be aborted in a different thread. Also, the code ensures that the thread is not certified before calling the process to recertify it.
When a FORCEPURGE procedure was performed on a task that was holding a crucial mutex, the CICS region terminated abnormally and reported Abend U5655.
Changes were made to the ComCL_CCINInstall procedure to fix this problem. Now, the call to the ComCL_CallDFHCCINX procedure is enclosed in a TRY/CATCH error processing code block. If this code block encounters a SUPPR_EXCEPTION_PROCESS exception flag, the IEntry mutex is released, the runtime database entry is deleted, and the exception is reissued.
Terminal naming clashes caused CICS A28H abends to occur when transaction routing from a Terminal Owning Region (TOR) used autoinstall to sequentially assign terminal IDs (termids). The termids, along with the TOR netname, were shipped to a TXSeries Application Owning Region (AOR), where TXSeries does its own autoinstall. When a subsequent request using the same netname was received, the call to the ComSU_AddNodeToTree procedure failed due to a duplicate netname.
The code has been changed to search for the new termid and if it does not exist, make a similar check on the netname. If a match on the netname is found, locate the old terminal entry associated with it. Next, make the same checks currently made for a match between an old termid and a new termid. Then, if the old termid is not being used and is not marked for deletion, use the old termid; otherwise, create a new termid.
In the loop occurring between the issue of a STARTBR (start browse) command and an ENDBR (end browse) command, if an invalid key was used, a new Structured File Server (SFS) server Open File Descriptor (OFD) was created for every iteration, and the existing OFD was not reused. When an invalid key was used, the logic that set the status of the current OFD assigned a status that did not allow the OFD to be used again until it was cleaned up by a syncpoint.
The code has been changed to correct this problem. Now, if the DamFS_SetBrowseByKey process returns the message DAMFS_ENO_SUCH_RECORD, the following steps are taken:
Note that when the ENDBR command gets a valid FRTE, it discards any SFS cache and resets the FRTE current handle state to FREE. This allows any subsequent STARTBR commands to reuse the same SFS server OFD.
On CICS for Solaris, when the cicsterm command was run in a dtterm session started on a Solaris system, error messages were returned. This problem did not occur on sessions that were started on an AIX or HP dtterm and connected into a Solaris system using telnet. The following error messages were returned on a Solaris system:
ERZ100022E/1302 Failed to initialize 3270 screen management: 3120015 ERZ100024E/1003 Error received from 3270 display subsystem.
An error trace showed that the TerLD_Initialize procedure produced the message return(21,RSN_4).
A code correction was made to the TerLD_Initialize procedure, and it is now possible to use a cicsterm command in a Solaris dtterm session.
On CICS for AIX, issuing the cicscp create telnet_server command on a machine running IBM Distributed Computing Environment (DCE) version 2.2 produced the following error:
chmod: /var/cics_clients/TGDMTEST.key: A file or directory in the path name does not exist. ERZ058129W/0062: Failed to set permissions for file '' chgrp: /var/cics_clients/TGDMTEST.key: A file or directory in the path name does not exist. ERZ058130W/0063: Failed to set group for file '' chown: /var/cics_clients/TGDMTEST.key: A file or directory in the path name does not exist. ERZ058131W/0064: Failed to set owner for file '' ERZ096021E/0024: The DCE function 'sec_rgy_pgo_is_member()' failed with the error 'Registry object not found (dce / sec)' ERZ096004E/0005: An error was encountered during the processing of the cicscp command.
The cicscp create telnet_server command now works correctly when issued on a machine running IBM DCE version 2.2.
Several race conditions corrupted unprotected shared region data after concurrent updates were made from multiple threads. In some situations, the corrupted data caused the region to abnormally terminate with unpredictable symptoms and points of execution.
The race conditions have been eliminated, and unprotected shared region data is no longer corrupted.
When a multi-byte character set (MBCS) version of CICS was used, CICS parsed the MBCS data stream in an attempt to translate it. The parsing interfered with printer control sequences.
The new environment variable CICS_NO_PRINTER_PARSING can now be set to prevent CICS from parsing the MBCS data stream and interfering with printer control sequences.
Using the cicsddt ftod command with a file that had multple fields in the index produced the error message Warning! Index creation failed. The cicsddt ftod command now works correctly.
On CICS for HP-UX, the cicssfmt command was unable to locate the libcicssfmtsa.sl shared library, and failed with the following error:
/usr/lib/dld.sl: can't open shared library: /cics/ServLvl/hp800_ux90_N/src/inf/sf/src/libcicssfmtsa.sl /usr/lib/dld.sl: No such file or directory IOT trap (core dumped)
The cicssfmt command is now able to locate the shared library.
On CICS for AIX, CICS regions did not generate a traceback file when a process encountered a fatal exception. As a result, it was difficult to diagnose errors.
A new diagnostic facility has been added to enable a CICS region to generate traceback files when exception signals are received. The traceback file is named cicsNNNN.traceback, where NNNN specifies the process ID (PID) that received the signal. Traceback files are stored in the directory /var/cics_regions/regionName/dump/dumpDirectoryName, where regionName is the name of your region and dumpDirectoryName is the name of your dump directory (by default, dir1). The traceback file contains the following information:
If a CICS region or application server receives an exception signal, the resulting traceback file can be supplied to IBM support representatives as part of the diagnostic process.
On CICS for HP-UX, using the cicscp create telnet_server command to create a telnet server for an existing process in the TCP/IP services file incorrectly produced an error message stating that the server did not exist.
The cicscp create telnet_server command now recognizes existing processes in the TCP/IP services file.
On CICS for HP-UX, the cicscp create telnet_server command incorrectly relied on the nawk utility, even though nawk is not supported on HP-UX systems. As a result, attempts to create and start a telnet server produced the following messages:
ERZ096071I/0108: Creating a telnet server ERZ096037I/0052: The DCE is already running /bin/ksh: kill -HUP 'ps -e | grep inetd | /usr/bin/nawk '{print $1}'`: cannot open ERZ096163I/0109: cicscp has assigned port number 'portNumber' to telnet server 'serverName' ERZ096072I/0109: The telnet server 'serverName' was created successfully ERZ096002I/0003: cicscp command completed successfully
The cicscp create telnet_server command no longer relies on nawk, and the command now successfully creates and starts a telnet server on an HP-UX system.
When using an external call interface (ECI) program that executes the EXEC CICS OPEN FILE and EXEC CICS CLOSE FILE commands from five different connections, one process was able to close a file while another was still opening it. As a result, the region terminated abnormally. While the initial solution to this problem prevented the region from abnormally terminating, it also caused all CICS processes to wait indefinitely.
This situation no longer causes regions to fail and CICS processes to wait indefinitely.
If a CICS terminal connection was closed while the terminal was still running a transaction, the CCIN transaction was unable to delete the terminal entry from the Communication Definitions (CD) in the 24 iterations the transaction performed. Until the terminal entry was manually deleted from the CD, subsequent connection attempts failed.
The CCIN transaction now tries to delete the terminal entry indefinitely. If the old behavior is desired, the new region environment variable CICS_GIVEUPDELETINGCONNECTION can be set to reinstate the limit of 24 iterations for the CCIN transaction.
The CICS transaction scheduler held inconsistent data in region storage, causing CICS self-consistency checks to fail and the region to terminate abnormally. CICS self-consistency checks and the CICS region no longer fail for this reason.
Universal Client Terminals (version 3.1) for AIX failed to install. The flow for the CTIN transaction was modified for the 3.1 release to add an additional signon-capable field. This field is self-defining and should be ignored by any server that does not expect it. However, CICS rejected the flow with the error ERZ042004E/0112. Universal Client Terminals now install correctly.
When SNA was used with variable buffer lengths and a header was split across two buffers, the receipt of the header was processed incorrectly. Initially, only the first two bytes of the four-byte header were received. Another attempt was then made to read the full header. Instead of returning the full four-byte header, however, the function call returned the last two bytes of the header and the first two bytes of data. As a result, all subsequent processing of the data was invalidated. Headers are now processed correctly in this situation.
On CICS for Windows NT, when a cicssdt command was used with the ftos option to transfer a flat file to a SFS file, each record in the file lost bytes of data equal to one less than the record's sequence in the file. For example, if the record was tenth in the file, it lost nine bytes of data on transfer. This command now works correctly.
A CICS application server sometimes waited indefinitely for an internal SNA allocate or deallocate function call. CICS application servers no longer wait indefinitely for an SNA allocate or deallocate function call.
When a CICS application manager attempted to terminate a corrupted CICS application server and run cleanup functions, the application manager waited indefinitely for the server to release the region storage pool mutex, suspending all other processing by the region.
Now the CICS application manager calls the CICS application server cleanup functions before attempting to terminate the server. This action frees the necessary region storage pool mutex.
When distributed transaction processing (DTP) was attempted over a CICS family TCP/IP connection, the value SYSIDERR was returned instead of INVREQ, as described in the documentation. The correct value of INVREQ is now returned.
On CICS for Windows NT, using the cicsupdate command to set the NameService stanza entry to NONE failed with the error message ERZ034084W/0348. This command now works correctly.
On CICS for Windows NT, the CICS message ERZ058022E/210 did not list the operating system error code that was returned from the failure.
The operating system error code is now included in the message Error code (errorCode), where errorCode is the actual operating system error code.
On CICS for AIX , no method existed to monitor regions and transaction queues. An external interface is now available that monitors regions and transaction queues.
When a CICS application server detected an internal exceptional condition, it terminated with a U1001 abend code. Because abend codes that begin with the letter "U" denote region termination, the abend code and the documented actions were inappropriate.
A new abend code, A101, now appears with an appropriate message when this situation occurs.
When a CICS data conversion routine failed to open a code page, no failure code was provided. The operating system error number is now provided in the message errno is errorNumber (where errorNumber is the actual operating system error number).
Internal CICS trace initialization failed with a segmentation violation in certain cases. Internal CICS trace initialization has been modified to eliminate the segmentation violation.
On CICS for Windows NT, the CCIN transaction could not start because Process Initialization Parameter (PIP) data sent to a remote system was incorrectly specified. The error message ERZ030008E with communications error 15A00007/10086032 was written to the console file. This problem has been corrected.
When the cicstermp command failed, the resulting error message sometimes stated that the NetName was not known, even though the correct NetName was seen with the CEMT transaction and in system dumps. No method existed to view the ModelId, NetName, and TerminalID to help solve the problem.
Setting a new environment variable, CICSAUTOINSTALLMODE, now enables the ModelId, NetName Tree, and TerminalId Tree to be viewed in the CICS console messages. To view only the ModelID, set the value to 16. To view the NetName Tree and TerminalId Tree only, set the value to 32. To view the ModelId, NetName Tree, and TerminalId Tree, set the value to 48.
When the maximum number of ECI terminals indicated by the CICSECIMAXLU parameter were installed during a long-running ECI application, the terminals began to uninstall. Setting the new environment variable CICS_ECINODELETETERMINAL prevents terminals from uninstalling in this situation.
When a long-running process was traced, it was possible to use up all available trace file identifiers because the maximum number available was 999. When the limit of 999 is reached, CICS now reuses trace file numbers, starting with the oldest.
When the cicsterm command was used with the database COBOL examples included with the CICS product, errors were generated in certain database field values. The cicsterm command now works properly when used with the database COBOL examples included with the CICS product.
On CICS for AIX, CICS for Solaris, and CICS for Windows NT, the message ERZ036225E stated that a failing function was admin_vol_MapLogicalVol, when it was actually admin_vol_InitializeDisk. The message now reports the correct function name.
On CICS for Windows NT, the default cicslcli.ini file in a client enabled for euro currency support did not permit accented characters to be displayed correctly.
The cicslcli.ini file in a client enabled for euro currency support now permits accented characters to be displayed correctly. If users modify the cicslcli.ini file from the \opt\cics\bin directory, they must add the line UseOEMCP=N to the Client section to enable the correct display of accented characters.
The statistics transactions CST5, CST6, CST7, CST8, and CST10 failed to supply terminal statistics when more than 4,000 terminals were installed. The CST5, CST6, CST7, CST8, and CST10 transactions have been modified to handle a maximum of 12,000 installed terminals.
On CICS for Windows NT, when performing an asynchronous ALLOCATE on CICS for Windows NT, an internal CICS function sometimes returned before the ALLOCATE had completed.
The CICS internal function now waits for a longer time before returning to enable an asynchronous ALLOCATE to complete in most cases.
On CICS for Solaris and CICS for Windows NT, sometimes an application server refused to perform ASCII/EBCDIC conversion on fields routed over SNA connections. Application servers now perform ASCII/EBCDIC conversion on fields routed over SNA connections.
Micro Focus COBOL applications using CICS sometimes received runtime External File Handler (EXTFH) memory access violation errors. CICS now clears the internal storage location following a malloc function, which corrects the access violation error conditions.
The monitoring fields ElaspsedTimeInCICSSpace and SystemUserTimeInCICSSpace incorrectly included time spent in user programs. These fields now report only time spent in CICS processing.
When a CICS region used DB2 file management, the CICS Installation Verification Program (cicsivp) failed if the file already existed, and the region did not get configured to run the CICS Installation Verification Program. The CICS Installation Verification Program now recognizes and runs with an existing file.
When an application misused a Basic Mapping Support (BMS) map and the map was sent to a telnet session, the cicsteld command went into an endless loop.
CICS now checks the data stream for invalid controls and, if one is encountered, terminates the data stream at that point and returns an error. The cicsteld command now prints the data stream.
When a transaction was delayed by the EXEC CICS DELAY command and then canceled by a FORCEPURGE, the REQID used by the transaction was unavailable for use in other commands for the lifetime of the region. The REQID is now available under these conditions.
The CICS DUMP command waited indefinitely if it was issued when an application server was processing a long-running CICS transaction. Long-running transactions no longer cause the DUMP command to wait indefinitely.
When a program issued an EXEC CICS SYNCPOINT ROLLBACK command in a loop, a memory leak was exposed because a call necessary to free memory allocated for abort reason strings was not being made. CICS now frees the memory allocated for abort reason strings.
When an Oracle transaction was canceled by a FORCEPURGE, Oracle returned an XA_RMERR code, which caused the CICS region to abnormally terminate with either abend code U8022 or U8005.
The CICS internal code now accepts the XA_RMERR code without abnormally terminating the region. To enable this new code, the user must rebuild the XA switch load file.
When a CICS application server was shut down, it tried unsuccessfully to destroy the associated instance control block (ICB) used for interprocess communication. The associated ICB is now destroyed when a CICS application server is shut down.
Sometimes, when an internal CICS function could not take a lock immediately, a CICS application server became caught in a loop and consumed 100 percent of the CPU, preventing any process from releasing resources for which the CICS application server was waiting. The server now permits other processes to run and free resources in this situation.
On CICS for AIX , the cicscp command did not recognize an existing DCE 2.2 configuration because the configuration file is now called cfg.dat, rather than mkdce.data.
The cicscp command now looks for the file /etc/dce/cfg.dat to determine whether a DCE 2.2 configuration exists.
After creating 16 terminals, an ECI client failed with the error condition ECI_ERR_NO_CICS. An ECI client no longer fails after creating 16 terminals.
Sometimes when a terminal was abnormally terminated and all associated CICS tasks were canceled by a FORCEPURGE, the region abnormally terminated with code U5701. The CICS region no longer abnormally terminates under these circumstances.
When the CCIN transaction was restricted by TCLASS and a large number of CCIN transactions were scheduled as a result of Common Client systems disconnecting, the call to an internal CICS scheduling function failed. A return code provided earlier in the scheduling function was overwritten. This caused CICS to drive unnecessary cleanup at the end of the function, resulting in the region abnormally terminating with abend code U4802.
An additional storage variable now exists in the internal CICS source code for the intermediate function return codes. The termination code is now driven correctly.
On CICS for Windows NT, compiling user exit UE015050 with IBM VisualAge C++ caused dynamic distributed program links to fail. A new makefile with the correct parameters for IBM VisualAge C++ is now provided.
On CICS for Windows NT, a CICS region could not be started when the U.S. English version of TXSeries CICS 4.2 was installed on a Traditional Chinese version of Windows NT 4.0.
A CICS region started from the U.S. English version of TXSeries CICS 4.2 now runs on the Traditional Chinese version of Windows NT.
On CICS for AIX, using the cicscp command to simultaneously start a CICS region and SFS server caused the command to fail with the following error:
ERZ038182I/0182: Server started successfully. ERZ038255E/0120: Encina operation 'sfs_GetVolumeInfo' failed with error (1997905996) SFS_COMMUNICATION_ERROR ERZ010013I/0024: CICS has removed the lock file for region ERZ096004E/0006: An error was encountered during the processing of the cicscp command.
The cicscp command no longer fails when starting a region and SFS server at the same time.
When an external presentation interface (EPI) program was used, the CICS_EpiGetEvent function sometimes returned the CICS_EPI_ERR_MORE_EVENTS code, causing error-handling logic to be invoked unnecessarily.
The CICS_EpiGetEvent function now handles a return code of CICS_EPI_ERR_MORE_EVENTS similarly to the way it handles a return code of CICS_EPI_NORMAL, but continues to report all other errors.
After PTF2 or PTF3 was applied to TXSeries CICS 4.2, using the cicsmap command on certain COBOL BMS files produced errors in the PICIN and PICOUT operand lengths. The cicsmap command now works correctly when used on COBOL BMS files.
On CICS for AIX , the cicssfsshut and cicssfswarm commands failed if they were issued from within the System Management Interface Tool (SMIT).
The cicssfsshut and cicssfswarm commands now work properly when used within SMIT.
The CICS Intercommunication Guide (SC09-3900-00) incorrectly implies that TXSeries CICS 4.2 supports traditional Chinese and the Big 5 character set on Windows NT.
CICS 4.2 does not support traditional Chinese or the Big 5 character set. See your platform's Quick Beginnings document for a list of languages supported by CICS 4.2.
On CICS for Windows NT, the cicscheckup and cicscheckupservers commands did not detect and report Peer-to-Peer Communications (PPC) Gateway servers.
The cicscheckup and cicscheckupservers commands now successfully detect and report PPC Gateway servers.
On CICS for Windows NT, if you used the cicsddt dtof command to back up a data file and then attempted to restore the file by using the cicsddt ftod command, the attempt failed because of incompatible file formats.
The cicsddt dtof and cicsddt ftod commands now use the same file format, and this problem no longer occurs.
On CICS for Windows NT, the -verbose option of the cicsppcgwy command did not work. The -verbose option of the cicsppcgwy command now works correctly.
On CICS for Windows NT, the CICS local terminal (cicslterm) does not support the euro currency symbol. To access CICS for Windows NT applications that require the euro currency symbol, you must use the CICS Client version 2.0.4 with Fix Pack 8 or CICS Universal Clients version 3.0.2 instead of cicslterm. Each of these CICS Clients is packaged with a README file that provides information on setting up the Client to use the euro currency symbol.
On CICS for Solaris, a memory violation occurred if the cicssfscreate command was executed while tracing was enabled. The cicssfscreate command can now run successfully when tracing is enabled.
An exception raised during the execution of an ECI program was not reported by the CICS UNIX ECI client. An ECI client now correctly reports exceptions.
On CICS for AIX, the offset of an instruction in user code that resulted in an access violation was reported incorrectly. The offset is now reported correctly.
On CICS for AIX, the cicscp command did not support the start sna and stop sna arguments when used with IBM Communications Server for AIX, version 5.0.
The cicscp command now supports the start sna and stop sna arguments. For more information about IBM Communications Server for AIX see Using IBM Communications Server (Version 5.0) for AIX with CICS (SC33-1898-02). You can find this document on the World Wide Web at: http://www.transarc.com/Library/documentation/txseries
A transaction started asynchronously on a UNIX terminal deleted a transaction name that was specified in a previous EXEC CICS RETURN TRANSID command.
The results of a EXEC CICS RETURN TRANSID command are now correctly saved by the terminal. After the asynchronously started transaction completes, the transaction runs when the next AID key on the terminal is pressed.
The maximum size for core files generated for CICS program code and data areas was 64 KB. There is no longer a size restriction on core files for CICS program code and data areas.
On CICS for AIX, when exiting the xldb debugger after debugging a CICS application, a defunct process sometimes remained on the system.
The xldb process now terminates cleanly, preventing the defunct process from being started.
If a PPC Gateway server was installed, the cicsusedceservers command created the new DCE keyfile for the PPC Gateway in the incorrect directory. Also, when the cicsusedcceservers command was used with the -A option, the command attempted to migrate the PPC Gateway to use DCE. If a PPC Gateway was not installed, the command reported an error and stopped.
The cicsusedceservers command now creates the DCE keyfile for a PPC Gateway in the home directory of the PPC Gateway user ID. When the cicsusedceservers command is used with the -A option when a PPC Gateway is not installed, the command continues without reporting an error.
When using the execution diagnostic facility (CEDF transaction) to debug conversational transactions, a timing problem in the CICS local terminal code caused the terminal to become suspended after the first screen was displayed. The timing problem has been resolved, and the CICS terminal no longer becomes suspended.
On CICS for AIX, the stack trace in a core file did not show the names of functions from libraries for which the read permission for others/world was not set. The stack trace in a core file now correctly displays the names of functions.
Executing the EXEC CICS CANCEL command to modify a transaction that was started by using the INTERVAL, PROTECT, and REQID options sometimes caused a system to become suspended. A system no longer becomes suspended when using the EXEC CICS CANCEL command.
On CICS for Windows NT, when using IBM VisualAge C/C++, application developers were unable to link with the example library, libcicsmfmtsa.lib, which was supplied with the CICS product. The following message was reported by IBM VisualAge C/C++:
OLDNAMES.lib : fatal error LNK1101: invalid object module at file offset 0x0000859c+0x3c NMAKE : fatal error U1077: 'ilink' : return code '16' Stop.
The library was generated in a way that was usable by the Microsoft Visual C/C++ compiler but not by IBM VisualAge C/C++.
The library has been regenerated to work with IBM VisualAge C/C++.
The CAGE transaction was set by default to run at midnight Greenwich Mean Time (GMT). The CAGE transaction now runs by default at midnight using the local time of the operating system. To run this transaction at midnight GMT, the time must be set manually.
A CICS application server sometimes becomes suspended while waiting for a reply from a CICS Common Client.
In most cases, this is normal behavior. However, to force an application server to time out a transaction if the CICS Client does not reply within a certain period of time, you can set the value of the CICS_XP_RECV_TIMEOUT environment variable to the number of seconds the application server waits before backing out the transaction.
On CICS for Windows NT, dates were written to log files in U.S. English format regardless of the selected language. CICS for Windows NT now writes dates to log files in the preferred format of the selected language.
On CICS for Windows NT, the Reset button on the SFS Server Properties screen of the Administration Utility did not work correctly. The Reset button on this screen now works correctly.
On the Japanese version of CICS for Windows NT, if you selected Subsystem > Resource > Product > New > General from the menus of the CICS Administration Utility, you were not able to enter data into the Switch Load File field.
You can now enter data into the Switch Load File field when using the CICS Administration Utility.
On CICS for AIX, when SMIT was used to configure CICS in a non-English language, some options were not translated correctly. SMIT screens now display options in the appropriate language.
The tab key did not work in the Available CICS Regions panel of a cicsterm session. The tab key now works correctly in the Available CICS Regions panel of a cicsterm session.
Double-byte characters were not deleted correctly in the CICS-supplied transaction CECI WRITEQ TS. Double-byte characters can now successfully be deleted in the CECI WRITEQ TS transaction.
The CICS macro DFHMDF did not support proposed Micro Focus COBOL extensions to currency picture specifications.
The CICS macro DFHMDF now supports the proposed Micro Focus COBOL extensions to currency picture specifications. The proposed extensions include enabling multiple currency sign clauses to be specified, adding a PICTURE SYMBOL phrase, and enabling the CURRENCY SYMBOL definition to contain one or more characters.
To enable support for these extensions, the following changes have been made to the DFHMDF macro:
It was not possible to change a DCE password from within a CICS application server (cicsas) if the application server previously called Micro Focus COBOL code. Using Micro Focus COBOL with a CICS application server no longer prevents you from changing a DCE password within the application.
On CICS for Solaris, a large number of IP listeners or a transaction with multiple nested levels of EXEC CICS LINK calls sometimes resulted in an access violation. CICS for Solaris now successfully handles large numbers of IP listeners and transactions with multiple nested levels of EXEC CICS LINK calls.
On CICS for Solaris, the EPI workload example programs incorrectly reported microsecond values as nanosecond values. The EPI workload example programs on all platforms now correctly report microsecond values.
A race condition within CICS sometimes caused CICS to fail with a segmentation fault if trace was active. This race condition no longer occurs.
If the cicstran command was run on a Micro Focus COBOL program that had an INPUT-OUTPUT section but not an ENVIRONMENT DIVISION, the output of the command included an ENVIRONMENT DIVISION in the wrong position. The incorrectly ordered section caused a failure when the program was compiled.
The cicstran command now inserts an ENVIRONMENT DIVISION at the correct place in its output in this situation, and compiler errors no longer occur.
If the cicstran command was used to translate a Micro Focus COBOL program that already included a CONFIGURATION SECTION, the command inserted another CONFIGURATION SECTION. The extra section resulted in a compilation failure. The cicstran command no longer inserts an extra CONFIGURATION SECTION into Micro Focus COBOL programs.
On CICS for Solaris, a stressed CICS region (for example, a region with a large number of users or one that was running a transaction with multiple nested levels of EXEC CICS LINK calls) sometimes failed with an access violation. Stressed CICS regions no longer fail with access violations.
The cicstfmt command failed to release memory and sometimes failed, producing a core file. The cicstfmt command now works correctly.
A corrupted queue of asynchronously started transactions sometimes caused a CICS region to fail. This situation no longer causes CICS regions to fail.
When issued on CICS for AIX, the cicsservice command sometimes failed with an access violation while collecting region information. The cicsservice command now performs correctly on AIX.
A segmentation fault occurred if DCE credentials if an ECI client expired. If an ECI client's DCE credentials expire, the client now terminates gracefully, rather than failing with a segmentation fault.
If a Micro Focus COBOL program did not have a SPECIAL-NAMES paragraph in the ENVIRONMENT DIVISION, the CICS COBOL translator (cicstcl) inserted a SPECIAL-NAMES paragraph that was not terminated by a period (.) in the translator output file. The missing period resulted in a compiler warning.
The CICS COBOL translator (cicstcl) now correctly terminates an inserted SPECIAL-NAMES paragraph with a period, and compiler warnings no longer occur in this situation.
On CICS for Solaris, in a remote procedure call (RPC)-only environment, the cicscp stop dce command returned a failure message even though the command ran successfully. The cicscp stop dce command no longer returns false failure messages.
The cicscp command sometimes became suspended when it was used to start a SFS server in an RPC-only environment. The cicscp command no longer becomes suspended when used to start an SFS server in an RPC-only environment.
Different CICS regions sometimes allocated the same names to different autoinstalled terminals, causing errors when transaction routing was used. CICS regions now use random numbers to name autoinstalled terminals, thus greatly reducing the chances of name duplication.
In an RPC-only environment, issuing the cicscp command to start an SFS server sometimes resulted in an access violation. The cicscp command no longer produces access violations when used to start an SFS server.
CICS did not support the XA dynamic registration functionality available in Oracle version 8. CICS now supports the XA dynamic registration functionality available in Oracle version 8. As a result, a new switch load file (oracle8_xa.c) and a new makefile (oracle8_xa.mk) are included with CICS.
If the CICS-supplied transaction CDCN was used in an X Window environment, the debugger window did not open because CICS used the X Window display specification incorrectly. The CDCN transaction now works correctly with X Window.
The cicsupdateclass command failed with an access violation if it was issued without the -r option. The cicsupdateclass command no longer fails if it is issued without the -r option.
If a command that updates the CICS runtime database (for instance, the cicsadd and cicsupdate commands) was issued before the cicssetupclients command was issued, the command failed with no indication of what caused the failure.
In this situation, commands such as cicsadd and cicsupdate now return a message stating that the cicssetupclients command has not been run.
The output of the CEMT SET PROGRAM ALL, CEMT SET TERMINAL ALL, and CEMT SET TRANSACTION ALL transactions listed each item multiple times. The output of these transactions now lists each item only once.
The C example database programs for Sybase sometimes caused truncation failures. The example programs no longer cause truncation failures.
In an RPC-only environment, the cicscp command sometimes attempted to add redundant files for a region to an SFS server; the command sometimes failed under these circumstances.
The cicscp command no longer attempts to add files for a region to an SFS server if the files have already been added to the SFS server, and these failures no longer occur.
If a resource manager failed before the current unit of work was completed and returned the code XAER_NOTA in response to an xa_end call from CICS, CICS treated the code as a severe error.
CICS now treats the XAER_NOTA return code as an indication to roll back the current unit of work and no longer considers it a severe error.
If a CICS Common Client using the SNA protocol issued the CCIN transaction to a CICS region, the transaction failed with abend code A42E. A CICS Common Client using the SNA protocol can now successfully issue the CCIN transaction to a CICS region.
If transaction routing was used to run a transaction that was not known on a remote CICS region, CICS returned a misleading error message. The error message returned in this situation now specifies that the transaction is unknown on the remote region.
In a DTP conversation between two CICS regions, if one region issued a SEND WAIT call and then issued an ISSUE SIGNAL call, the data sent in the SEND WAIT call was sometimes lost. This error no longer occurs.
Each time a CICS region received an unknown user ID and granted public access rights to the user, the region wrote an ERZ045006W message to the CSMT file.
You can now prevent CICS from writing this message each time by setting the value of the CICS_SUPPRESS_BAD_USER environment variable to Yes. To set this environment variable, add the following line to the region's environment file (located in the /var/cics/regions/region_name directory):
CICS_SUPPRESS_BAD_USER=Yes
Error messages returned by the cicsteld command did not include the exception that caused the error. Error messages returned by the cicsteld command now include the exception that caused the error.
Two new CICS environment variables, CICSDB2CONF_CONNECT_USER and CICSDB2CONF_CONNECT_USING, are now provided for use with the cicsddt and cicsdb2conf utilities.
To enable the cicsddt and cicsdb2conf utilities to connect to DB2 Universal Database (UDB), set the value of CICSDB2CONF_CONNECT_USER to a valid DB2 UDB user ID and the value of CICSDB2CONF_CONNECT_USING to the user's DB2 UDB password.
The xa_open string, which includes the database password, is printed in the CICS console files when a region attempts to connect to an XA-compliant database.
CICS has a new environment variable called CICS_SUPPRESS_XA_OPEN_STRING. If you set this variable, the xa_open string containing the database password is not printed in the CICS console files when a region attempts to connect to an XA-compliant database. To set the CICS_SUPPRESS_XA_OPEN_STRING environment variable, add the following line to the region's environment file (located in the /var/cics_regions/region_name directory):
CICS_SUPPRESS_XA_OPEN_STRING=1
Setting this variable prevents CICS from writing the database password to the console files.
Tracing a stressed CICS region (for example, a region with a large number of users or one that was running a transaction with multiple nested levels of EXEC CICS LINK calls) sometimes resulted in an access violation. Tracing a stressed CICS region no longer causes an access violation.
CICS misinterpreted errors returned by EPI clients, causing incorrect symptoms to be written to the symptom records (symrecs) file. CICS now correctly interprets EPI client errors and writes correct information to the symrecs file.
If a transaction that had been passed a COMMAREA terminated abnormally, CICS sometimes attempted to deallocate the wrong area of memory when cleaning up the transaction. This resulted in access violations. CICS now correctly deallocates memory in this situation, and access violations no longer occur.
RPC failures sometimes caused a deadlock in an EPI client. RPC failures no longer cause deadlocks in EPI clients.
In a CICS RPC-only environment in which two SFS servers or an SFS server and a PPC Gateway server were running on the same machine, the servers sometimes attempted to use the same RPC endpoint, resulting in errors.
The cicscp command now adds unique identifiers to each server's entry in the binding file, thus preventing these errors. If you manually create a binding file entry for an SFS or a PPC Gateway server (that is, after running the cicssfscreate or cicsppcgwycreate commands), perform the following procedure to include a universal unique identifier (UUID) for the server in the server's binding file entry:
% /usr/bin/uuidgen
Make sure to note the UUID generated by the command, because it is necessary to supply it in Step 2.
<server_name> <UUID>@ncadg_ip_udp:<network_address> [<port_number>]
where server_name is the full pathname of the server (for example, /.:/cics/sfs/TASFS1), UUID is the output from the uuidgen command, network_address is the address of the network adapter on which the server is to listen, and port_number is the IP port on which the server is to listen (note that you cannot use a port that is already listed in your TCP/IP services file). The network_address variable is optional and can be specified either in Internet dotted decimal notation (for example, 123.45.67.8) or by a name that can be resolved by a TCP/IP name server. If you do not specify a value for the network_address variable, the default value is the network name of the local machine.
Note: | As soon as you specify the IP port number in the binding file, it is recommended that you add an entry to the TCP/IP services file to indicate that the port is now reserved for your server. Refer to your TCP/IP documentation for more information on the services file. |
The cicsinstall command failed on machines on which the CICS server code but not the CICS client code was installed. The cicsinstall command now works correctly on machines that are installed with the CICS server code but not the CICS client code.
If the cicsdb2conf command was issued with the -l option, it wrote to an incorrect file. The cicsdb2conf command now writes to the correct file when issued with the -l option.
On CICS for AIX, destructors for cached C++ programs were not consistently called when the CICS application server running the programs ended. CICS for AIX now ensures that destructors for these programs are called when the application server running the programs ends.
A CICS application server terminated abnormally if the EXEC CICS START command was used to pass it data between 32751 and 32767 bytes in length. CICS application servers no longer fail under these circumstances.
The cicscp start region command sometimes failed when issued in an RPC-only environment. The cicscp start region command now successfully starts a region when issued in an RPC-only environment.
An incorrectly sized variable caused the addition of a temporary data queue to a running region to fail with illegal address errors if trace was active. The variable is now set to the correct length and no longer causes illegal address errors.
Autoinstallation of CICS terminals sometimes failed because the installation process accessed the terminal index without first acquiring a valid mutex. The installation process now acquires a mutex before accessing the terminal index, and autoinstallation of CICS terminals works correctly.
The cicsrm command sometimes failed with an illegal address error because of a problem with allocating shared memory. The problem with allocating shared memory has been resolved, and the cicsrm command no longer fails with an illegal address error.
The cicsdb2conf command fails when used with DB2 version 2.1.2 and the AFS file system.
DB2 2.1.2 is not supported for use with AFS, but you can work around this problem by copying the DB2 binding files from AFS to a local directory on your machine and setting the CICS_DB2CONF_BIND environment variable to the location of that local directory.
On CICS for Solaris, if the cicscp start region command was issued in an environment with the LOCALE variable set to it (Italian), the command failed. The cicscp start region command now works correctly when the LOCALE variable is set to it (Italian).
If the cicstail command was issued without the -r option, the command failed with a syntax error. The cicstail command now works correctly if it is issued without the -r option.
CICS introspects (checks of a region's integrity) sometimes failed incorrectly, reporting corruption when no corruption existed. Introspects no longer fail incorrectly or falsely report corruption.
Attempts to connect to a CICS region from a CICS Common Client sometimes failed with communications errors because CICS closed sockets that were still allocated to connections. These errors sometimes also resulted in the CICS region terminating abnormally.
CICS no longer closes sockets that are allocated to connections, thus preventing many communications errors. When communications errors do occur, CICS writes diagnostics to the symrecs file instead of abnormally terminating the region.
A CICS application server (cicsas) sometimes failed with signal 30 after misinterpreting a signal sent by IBM SNA to CICS. CICS now interprets IBM SNA signals correctly, and CICS application servers no longer fail under these circumstances.
A CICS application server (cicsas) sometimes failed with signal 30. The symptom records (symrecs) file indicated that the error occurred in the RegDC_CleanUp function. CICS now handles this situation correctly, and these failures no longer occur.
CICS applications that used ECI sometimes truncated the length of the communications area (COMMAREA) after making several calls in an extended LUW. COMMAREA lengths are no longer truncated when an application that uses ECI makes multiple calls in an extended LUW.
If a recoverable temporary storage queue (TSQ) was written, read, and deleted, and another TSQ was then written, attempts to read the second TSQ failed. CICS now correctly reads a TSQ that was written after the deletion of a previous TSQ.
Null characters in a 3270 datastream were ignored when the datastream was set to use a multibyte character set (that is, when the PS operand on the datastream was set to 8). Null characters are now handled correctly in a multibyte 3270 datastream.
CICS self-consistency checks sometimes incorrectly determined the number of application server logs in use, resulting in the termination of the CICS region. CICS self-consistency checks no longer miscount the number of application server logs in use, and CICS regions no longer terminate for this reason.
Transaction Definitions (TD) queues on DB2 were not purged after being written and read. TD queues had to be explicitly deleted. TD queues on DB2 are now correctly purged from the database after being written and read.
If the CICS Installation Verification Program (cicsivp) was used with DB2, product trace failed when the DB2 username or password was not set. The CICS IVP program now functions correctly in this situation.
If you used the CICS-supplied transaction CESN or the CICS EXEC SIGNON command to log into CICS and change your password, the return message indicated only that the password was changed; it did not indicate what user had logged in.
The message returned in this situation now indicates the user ID as well as the fact that the password has been changed.
This chapter describes the updates to TXSeries included in the TXSeries PTF Set for Encina 4.2. The most recent changes made to Encina are described in Updates in PTF Set 11. All other changes are listed in descending APAR order in the section Updates in all previous patches.
Although comments in the header file for the trdce_WaitForInterface function indicated that the function would query the local runtime if a NULL server name was specified, this functionality was not implemented.
The trdce_WaitForInterface function now works as noted in the header file.
The Encina Transactional Remote Procedure Call (TRPC) service did not remove its endpoints during server shutdown. In environments where the number of ports was limited, or if the Distributed Computing Environment (DCE) was slow to remove stale endpoints, this sometimes caused failures when a server attempted to reuse that port during startup.
The trpc_Terminate function now properly calls the rpc_ep_unregister function so that TRPC endpoints are removed.
A memory leak occurred in a Common Object Request Broker Architecture (CORBA) Object Transaction Service (OTS) server when trace was enabled. This memory leak no longer occurs.
When the enccp interface was used to set a default value for the principalID of the node manager object, that value was used when new nodes were defined, even if a different value was specified when the node was defined by using Enconsole or enccp. This problem occurred because principalID attributes existed for both the ema_typeNode and enc_typeNodeManager objects.
The value of the principalID attribute specified for the ema_typeNode object now takes precedence over that specified for the enc_typeNodeManager object.
On Encina for Windows NT, the way in which messages were written to the event log required several enhancements:
The default destinations for CRITICAL messages now include both the standard error stream and the Windows NT event log. Also, the restriction on writing only CRITICAL messages to the event log has been removed, and support for writing TERMINATE messages to the event log has been added. A call to the DeregisterEventSource function eliminates leaked Windows NT handles.
On Encina for Windows NT, implicit server bindings were not randomized effectively. Server bindings are now randomized properly.
Sometimes a Structured File Server (SFS) server terminated with the following fatal error:
3c041816 F Encina Internal Error -- Call your Support Representative: btree_Read: Read previous: Condition not possible.
This error occurred because the TryLockPrevRecord routine specified an incorrect positioning type rather than preserving the requested positioning type that was passed to the function.
The TryLockPrevRecord routine now uses the correct positioning type.
On Encina for Windows NT with Gradient DCE 2.2.1, when connecting an Encina++ client to a server through a dial-in connection, Encina failed with an invalid page fault that occurred after the rpc_server_inq_bindings function was called.
Encina now checks the return status of all DCE calls in this routine and reports a FATAL error if a failure occurs.
When a target server terminated while multiple threads made concurrent TRPCs using the same OtsBinding object, the OTS client terminated with the following fatal error:
28180816 F Encina Internal Error -- Call your Support Representative: trpc_FreeBinding received an invalid trpc binding handle.
OTS now ensures that the TRPC handle is not NULL before calling the trpc_FreeBinding function.
A change in the implementation of trace functionality removed support for various printf-defined format-string features and syntax.
The trace format-string parser and output-string construction code now supports the full printf-defined format-string syntax.
When the OTS version of Encina was running on Windows NT, failures sometimes occurred when Encina application programming interfaces (APIs) were called from native Windows NT threads.
This has been corrected by modifying the Encina pthread emulation code to dynamically allocate and initialize data for each thread.
On Encina for AIX, a memory leak sometimes occurred when processing inbound Systems Network Architecture (SNA) transactions to a Peer-to-Peer Communications (PPC) Gateway server. This memory leak no longer occurs.
Attempting to start a Monitor application server (MAS) with an access control list (ACL) containing a group name that had become obsolete caused the Encina cell manager to fail with a segmentation fault. More complete error checking has been added to handle DCE errors that had previously been ignored.
Enconsole failed with a segmentation fault or similar random failure if a system event caused a large serious message to be reported (more than 500 characters).
Enconsole now truncates messages that do not fit into the buffer where the message string is built. The size of the formatting buffer was also increased to avoid the truncation of messages.
On Encina for HP-UX, a customer encountered an error and the following messages when attempting to run a Monitor COBOL program:
/usr/lib/dld.sl: Bad system id for shared library: /usr/lib/libEncMonCliCobol.sl /usr/lib/dld.sl: Exec format error
The error indicates that the library was built by using objects compiled for the PA_RISC2.0 architecture, which would not run on the customer's PA_RISC1.1 machine.
Now the COBOL flag +DA1.1 is added when building COBOL object files, and the error no longer occurs.
On Encina for Windows NT using OTS, Purify instrumented code reported a small memory leak each time a thread exited. The pthread-slot API emulation code now reclaims the memory used to build the per-thread slot-table.
Sometimes an SFS server failed while trying to allocate memory, leading the customer to note a possible memory leak. Collection of base development environment (BDE) plumbing data revealed that the source of the structures being leaked is /src/sfs/ddt/ddt_rec.c(705). The code in this structure deals with SFS records which use external fields, typically more than 10 external fields, so any application which uses this feature could be affected. The memory leak has been fixed.
After expanding the log volume for a server, the Log Service did not immediately use the added storage and continued to issue warning messages. The Log Service now checks for an expanded volume before triggering Log storage reclamation and issuing a warning message.
If an SFS transaction is aborted while an operation is being processed by the SFS server, the error code returned to the client application was SFS_COMMUNICATION_ERROR, while the error code SFS_TRANSACTION_ABORTED would be more accurate and specific.
The SFS client now maps the error code of TRPC_MGR_ABORTED to SFS_TRANSACTION_ABORTED, rather that simply returning the error SFS_COMMUNICATION_ERROR for any unsuccessful TRPC return code.
A customer requested the ability to have control over which errors from the connect system call are considered transient, and which ones are not. For transient errors, the connect system call is retried up to the number of times specified by the ENCINA_PPC_CONNECT_RETRY_COUNT environment variable after a delay of the number of seconds specified by the ENCINA_PPC_CONNECT_RETRY_INTERVAL environment variable.
The environment variable ENCINA_PPC_CONNECT_RETRY_ERRNO_LIST was added and allows you to specify which error values are to be considered transient. The error values must be specified as a comma-separated list of decimal error values. If this variable is not defined, the default value is the equivalent of 67,69,79 or EADDRINUSE, ENETDOWN, ECONNREFUSED.
When using an Encina library built with ASSERTs enabled, an ASSERT in the Encina Transaction Management-XA service (TM-XA) would regularly fail in certain situations, causing the application server using TM-XA to terminate. This problem has been corrected.
Attempting to start a mixed-mode OTS server with multiple processing agents (PAs) resulted in the second and all subsequent PAs failing with the following error:
The system exception: 10243 -- Invalid operation - The server 'MixedServer' is already active [Completion status: COMPLETED_NO] was raised.
Permit multiple PAs for a mixed-mode server by appending _PAnumber (where PAnumber is the PA number) to the server name registered. PA 0 continues to register using just the specified server name.
A free-memory-access error was reported by Purify instrumented code. No failure occurred, but this defect could produce a number of unexpected failures that could not be reproduced. The code now does not access mutexes in memory after that memory was freed.
The customer-exported (non-tpp) form of Encina tracing did not support the special %k formatting character for translating error codes. Supporting this character makes it easier for customers to generate meaningful trace messages. Also, previously, exceeding the 2K buffer limit for trace messages would cause a segmentation violation in the vsprintf function, while the new implementation simply truncates the message.
Customers can now also use the ENCINA_TRACE_NON_TPP_USE_VSPRINTF environment variable to specify which formatting support is desired, though each has its benefits and disadvantages. In particular, the internal trace routines protect against the segmentation violation when the 2k buffer limit is exceeded, but they do not support all of the features of vsprintf, such as fixed or variable field width or precision for strings, such as "%.s*". If the ENCINA_TRACE_NON_TPP_USE_VSPRINTF environment variable is set to a non-zero numeric value, vsprintf is used for formatting non-tpp tracing; otherwise, the internal Encina trace formatting routines are used. Now the implementation for filling a non-tpp trace buffer is closer to the tpp implementation, relying on trace_FormatValues to format output into the buffer.
On Encina for Windows NT, the Encina Restart Service (encinaRestart.exe) failed to correctly determine the configuration for IBM DCE 2.0, and checked for the incorrect processes running on the local system. As a result, the restart service did not automatically start the cell or node manager because it incorrectly detected that the DCE prerequisites services were not running. This led to the following errors in the Windows NT event log:
Encina restart status: 203 error querying DCE configuration assuming security client Encina restart status: 203 error querying DCE configuration assuming CDS client Encina restart status: 998 DCE services could not be started
The Encina Restart Service now correctly assumes a DCE client configuration if the DCE configuration cannot be determined. Also, the restart service now checks for either the sec_clientd or dced processes, since which process found depends on the version of DCE that is running.
Sometimes an OTS MAS encountered a segmentation violation when an exception was caught by the abortCheck function, and not raised again. The stack trace from the segmentation violation was as follows:
[1] Tran::AbortWithoutException [2] OtsStubSupport::ReturnDceException [3] _1_0_FtStatsAPI_GetAll [4] op1_ssr0x8541c
This occurred because it was incorrect to assume a Distributed Transaction Service (TRAN) context. Now, when there is no OTS transactional context, the case is ignored.
In OTS, a segmentation violation occurred in the TranFilter::IsTransactional function whenever an exception was thrown from a user-level in the RequestPreMarshal filter. The stack trace from the segmentation violation was as follows:
[1] TranFilter::IsTransactional [2] TranFilter::OutReplyFailure [3] CORBA::Filter::outReplyFailureEntry [4] ContextClasses::continueThreadDispatch [5] ConcurrentRequest::Execute [6] MessageQueue::HandleMessages [7] MessageQueue::Dispatch
This segmentation violation occurred because the user-level filter throwing the exception caused the OTS server-side TranFilter routine to execute the OutReplyFailure call in an unexpected sequence. This sequence is now properly handled.
A Recoverable Queueing Service (RQS) server queue was corrupted so that when attempting to dequeue from it caused the RQS server to terminate with a FATAL error. Examination of the corrupted data showed that the on-disk queue was empty, but that the queue contained a page of storage space that was marked as free. This corruption most likely occurred during RQS recovery, before the FATAL error condition was detected, so that no diagnostic information was available. Additional trace output has been added and enabled by default to obtain more information in the event that the failure occurs again.
Some Encina++ header files were not compatible with the Standard C++ library iostream. These files are now compatible.
Encina recoverable servers attempt to obtain an exclusive lock on its data and log volumes to ensure that two processes do not attempt to update volumes concurrently. The error ENC-bde-0046 (BDE_LOCK_NOT_GRANTED) is returned when that lock cannot be obtained. Additional trace information is not present to help determine which process has locked the volume. Now additional diagnostics can be obtained from the BDE event trace in the EncinaTraceBuffer file. The message is as follows:
080c9015 E Could not lock file_name, already locked by process with pid
The following warning was emitted by the PPC Gateway server when a request was received from the mainframe which specified an FMH5 security subfield value of 00, even though this value is valid for applications which chose not to pass security information with the request:
7028c017 W Invalid type of security subfield
While this warning is benign, it does cause the server output log to grow, which may detract from other meaningful messages emitted by the server.
The ENCINA_SERVER_GROUP environment variable, which is used to restrict the servers to which a client can make authenticated RPCs to servers that are a member of the specified group. This functionality did not work for servers in a foreign DCE cell. The client will now bind to the foreign cell if necessary, to perform the group membership check. This implies that the client must have test permission in that foreign cell for the specified group.
The following FATAL error occurred in an PPC Gateway server after an allocation failure:
74200828 A sna relay allocate failure, local LU = T45C9236, remote LU = DXBCIPP1, tpn = X098, status = ENC-ppc-0069: Transaction aborted asynchronously 00000006 F ASSERT failed: line 1432 in file .../ppc/gwy/ppc_gwyServer.c.
The assertion was replaced by code to handle this failure which is a return response state PPC_STATE_RESET.
An Encina++/Orbix server that uses the SERIALIZE_TRPCS_AND_TRANSACTIONS can incorrectly fail with a FATAL error when the server is a subordinate server in an explicit transaction and either the xa_prepare or Resource::prepare calls votes for rollback. The FATAL error generated is as follows:
d41fb0c6 F Method SynchAndLockAfterComplMgr::RegisterWork() failed.
The fatal error is no longer encountered in this situation.
A rare race condition can lead to a deadlock in a Fast Local Transport (FLT) server between the fltPipe_ServerAcceptConnection and fltPipe_ServerRelease functions. The fltPipe_ServerAcceptConnection is executed when a client is establishing a connection with the FLT server; fltPipe_ServerRelease is executed when the client is terminating a connection.
In order to preserve the locking hierarchy for FLT, the serverFds.mutex must now be acquired before the client latch.
An RQS server recovery sometimes became deadlocked while restarting after an unexpected termination, preventing the server from starting. The locking and synchronization features in the queue code were improved to prevent this failure.
While inserting record into an SFS server RSN file, 300 at a time, an SFS server failed with the following fatal error:
34200c16 F Encina Internal Error -- Call your Support Representative: area_GetPage: Page 0xf01 area 0xd out of range. latch mode 0x1 00000006 F .../src/server/area/area_page.c 398
This error occurred because the SFS code for reading a chunk of a relative record file only validated the first page in the chunk that is allocated in the area. Now each page to be read is validated to be within the allocated range.
In certain situations, an RQS server appeared to lose space on disk storage. Over time, the number of records that could be enqueued before a storage exhausted error occurred decreased. This was likely to happen when completing large batch deletes of records that had been moved from one RQS queue to another by using the rqs_Requeue interface, although it is possible for this to occur over time without batch processing. Examining trace from the RQS server suggested that the background daemon thread that reclaims this space occasionally stopped or disappeared. This could also cause other background tasks to not be performed on time, or possibly never performed, resulting in unpredictable server behavior.
This problem was corrected by fixing a defect in the background scheduling code that allowed the space reclamation thread to become deadlocked or delayed for extreme periods. Several scalability problems in the reclamation code that could cause slow processing when a large number of records are deleted at the same time were also corrected.
It was difficult to capture tracing for an event that took long to detect, since the ring buffer could wrap before the event is detected, and the tracing dumped to a file. Increasing the size of the ring buffer or using other means to capture trace can be prohibitive. The desired behavior would be to capture tracing to the ring buffer, then write it to a file before reusing the ring buffer.
To provide this support, the ENCINA_TRACE_BUFFER_DUMP_ON_UIDS was reorganized for use under different conditions. Setting a new environment variable ENCINA_TRACE_BUFFER_DUMP_WHEN_FULL enables this functionality. The trace files written when ENCINA_TRACE_BUFFER_DUMP_WHEN_FULL is enabled have the same name (EncinaTraceBuffer) and binary format as those written when ENCINA_TRACE_BUFFER_DUMP_ON_UIDS is enabled. The number in the file name is incremented each time a new file is written.
The original implementation of the ENCINA_PPC_CONNECT_RETRY_COUNT and ENCINA_PPC_CONNECT_RETRY_INTERVAL environment variables was not executed if the ENCINA_PPC_IP_ADDR environment variable was set.
The ENCINA_PPC_CONNECT_RETRY_COUNT environment variable now properly sets the number of times the connect will be retried after a transient error occurs. The ENCINA_PPC_CONNECT_RETRY_INTERVAL environment variable now sets the number of seconds between connect attempts. The default values for these environment variables are 4 and 2, respectively.
Enconsole cannot be used to cold start a server that has a minimum protection level of pkt_privacy specified, unless the default protection level for the DCE cell is also pkt_privacy. This problem occurs because the DCE API used to modify ACLs during cold starts always uses the default protection level, which is typically lower than pkt_privacy.
Enconsole and enccp now use a different DCE API, which allows the protection level of pkt_privacy to be explicitly specified. If an attempt to use pkt_privacy fails (if using a non-domestic version of DCE) another attempt is made using the protection level pkt_integ.
Sometimes on fast machines, when starting a new Encina cell manager for the first time by using enccp or Enconsole, the start operation became suspended. The process became suspended after the second restart of the ecm process. This problem occurred because of a race condition in the ecm initialization, caused by an invalid timeout argument. Passing the correct timeout value solved this problem.
If the operating system could not lock an Encina server's volume, the server terminated with a FATAL error, but not report what sort of system error occurred. The system error code is now included the FATAL error string.
A race condition can lead to a deadlock in an SFS server when a lock conflict occurs. The two deadlocked threads' stack traces will look similar to the following:
[1] _switch [2] _mutex_suspend_lock [3] pthread_mutex_lock [4] pthread_mutex_lock [5] ofdt_Lookup [6] admin_IsRangeLockSpace [7] ConflictCallback [8] ExecuteConflictCallbacks
and
[1] _switch [2] _mutex_suspend_lock [3] pthread_mutex_lock [4] pthread_mutex_lock [5] _lockTran_Lookup [6] lockTran_Lookup [7] Release [8] lock_ReleaseAll [9] svr_ReleaseOfd [10] svr_RegisterConflictCallback [11] WatchDog
In order to prevent deadlocking over internal lock service data structures, the conflict callback should not complete any operations that they could block. Therefore, the logic requiring that the open file descriptor (OFD) be locked was moved from the conflict callback into a routine that is executed from a separate thread.
A MAS server with a scheduling policy of MON_EXCLUSIVE failed to release the interprocess mutex used to protect a reservation state. This rare race condition occurred when a Monitor client that used explicit reservations (i.e. mon_AcquireReservations) connected to a MAS server, but was terminated while the server granted the reservation. As a result, the MAS server stopped servicing requests for any Monitor client that used explicit reservations.
The interprocess mutex is now released in this situation, whether the explicit reservation is successful or not.
If an error was encountered while log archives were being flushed, it was possible for potential waiters to be blocked indefinitely. This was possible when the extent_FlushPrimary function failed and the extent_FlushToArchives function returned a LOG_VOL_ERROR message without clearing the bufferInProgress function and signaling the waiters.
This problem has been corrected.
If a node manager's handle to the cell manager became invalid for any reason other than a failure of the cell manager, or if the node manager was not notified when the cell manager had restarted, the node manager was unable to send pings. As a result, the cell manager sometimes erroneously reported that a node manager was not operational, due to the way the liveness monitoring package (lmp) dealt with invalid handles.
The lmp now resets the binding when the ping RPC fails.
A workaround for a DCE defect resulted in an extra timeout when Encina tried to determine if a server was running.
The DCE defect has been corrected, and Encina now more quickly determines if a server is running.
The OTS aborted transactions if an exception was thrown on a request to a transactional object, even if it was a user exception.
A new environment variable, ENCINA_OTS_NO_ABORT_ON_USER_EXCEPTION, can now be set to allow user exceptions. The default value is FALSE.
If Tran-C calls were made without first properly initializing Tran-C, the following fatal error message was displayed:
08353426 F Encina Internal Error - - Call your Support Representative: pdg/2.5/source/src/client/bde/dce/bde_thread.c: 1753: System call failure: pthread_getspecific, errno 22 (Invalid argument) [0x0]
A more appropriate and helpful error message is now displayed:
2c340816 F Transactional-C has not been properly initialized
When importing one Data Definition Language (DDL) file from another DDL file, the generated include function was missing the .H extension. For example it was written as #include foo rather than #include foo.H.
The proper .H extension is now generated by DDL.
The sfs_DeleteRange function acquired a lock on each record that it processed. Even if the record was then determined to be out of range, the lock was not released. This sometimes resulted in a deadlock in special situations within CICS.
When it is detected that the current key is out of range and the OFD is using the TranCursorStability descriptor, the extra key lock is now dropped.
The cell manager limited the number of concurrent tasks to three. (A task is queued for execution for each transactional update, such as start or stop requests and repository updates.) Having a fixed limit of three tasks sometimes caused a problem when long-running tasks, such as start requests, were executed. For example, a start request could be executed continuously because the server was exiting during initialization (because of an unavailable resource) and the number of restart attempts was intentionally set very high. Once three such starts were in progress, no other tasks could be executed by the cell manager.
The cell manager now uses a new environment variable, ENCINA_MON_TASK_TPOOL_SIZE, to determine the preferred size of the pool of threads used to execute tasks. Additionally, the thread pool is allowed to grow to four times the preferred size. Therefore, even though the default value is still 3, a maximum of 12 tasks can be executed concurrently. If additional capacity is desired, you can set the environment variable to the preferred number of threads.
Users desired more control over the values used for refreshing the handle cache maintained by the PPC scheduling code. This includes control over:
You can now adjust these values by using the following environment variables:
An OTS (non-DCE) server sometimes terminated with the following error:
Could not calculate XIDs of prepared transactions during recovery.
This failure occurred because during recovery, TM-XA constructs exchange identifiers (XIDs) for all possible nesting models and some possibly exceeded the size limit imposed on XIDs.
This situation no longer results in a fatal error. An XID constructed for an inappropriate nesting model is ignored. The correct XID is generated and matched during recovery.
A PPC Gateway server experienced a transient error while trying to establish a TCP connection, retrying the connection up to four times at two-second intervals. However, some users wanted to customize the retry settings.
Two new environment variables have been added:
If a client used the implicit transaction mode to call a server the first time, and the transaction was aborted by the OtsAdmin::Tran::Rollback function while the transaction mode call was in progress, the client was able to successfully commit a transaction that should have been aborted.
The problem has been corrected by adding and improving error checking after the various TRAN communications service calls.
A segmentation violation sometimes occurred when a PPC Gateway server received a remote SNA request with a userid of exactly eight bytes.
The problem has been eliminated by null-terminating the string used for userid conversions.
If the login context expired while Enconsole was dormant, the pop-up menu telling the user to log in often became visible after the user had already begun to log in.
If Enconsole is dormant when the login context expires, the title bar is now updated to indicate login expired; no pop-up menu appears.
As originally implemented, when a TRPC server-side transaction aborted, the RPC was always terminated via the exception TRPC_SERVER_SIDE_ABORT. However, applications sometimes needed to be able to return out parameters on the RPC, even though the transaction was aborted, just as the TX transaction-demarcation specification allows.
This enhancement introduces a new TRPC server-side support function, trpc_ServerSideIgnoreAbort, which can be called from within the scope of a manager function to request that the TRPC stub code does not terminate the transaction, assuming that the TRPC otherwise terminates normally. Instead, the RPC completes normally, so that out parameters must be returned to the client. (Any abort reason is still stored at the server and retrieved by the client, so the trpc_serverSideAbortReason command can still be called to obtain the reason for a server-side abort.)
A new TRPC status code, TRPC_MGR_ABORTED_RPC_OK, is either returned or raised, depending upon whether the application includes a parameter of type trpc_status_t for the TRPC, so that the client application can determine if the out parameters are valid and handle them appropriately.
If an unexpected program type attempted to connect to a TCP port, the PPC Gateway server sometimes terminated with the following FATAL error:
6c0c4416 F PPC/TCP: corrupted data received
This could happen accidentally, for example, due to a configuration error in a program using a fixed TCP address, or in a denial-of-service attack on the gateway.
The original logic for detecting an invalid connection has been changed to ignore such a connection and to generate a WARNING message with diagnostic information to help identify the errant program.
Encina incorrectly denied access to services due to an invalid ACL check when the principal included only the primary group ACL (such as when the inprojlist no option was specified) in the DCE Privilege Attribute Certificate (PAC). Encina incorrectly tested for a non-nil group universal unique identifier (UUID) when it should have been testing for a nil group UUID.
Encina now correctly tests for a nil group UUID and properly evaluates any non-nil primary group ACL.
The monReserve_GetPaReservationStatus function showed the value LONG_TERM_RESERVED for short-term reservations and RESERVED when long-term reservations were used.
The monReserve_GetPaReservationStatus command now shows the appropriate values for each type of reservation.
The field names in the TransIdentity structure were erroneously listed as coordinator and terminator, terms that were not permitted in the CORBA Interface Definition Language (IDL). (The CORBA IDL does not permit coordinator or Coordinator.)
The field names in the TransIdentity structure are now listed as coord and term, respectively.
When well-known endpoints (WKE) were used with an Encina binding file and the ENCINA_REGISTER_WKES environment variable was used to force registration with the DCE endpoint mapper, multiple Encina servers running on a single machine overwrote one another's entries in the endpoint map.
Multiple Encina servers running on a single machine no longer overwrite one another's entries in the DCE endpoint map.
Several RQS private_warnings callbacks, issued under ordinary circumstances while reestablishing client callbacks after an unexpected termination of the application, were confusing and sometimes incorrect.
server prod.v4.1.wfmRouteS.hq3y2u04 node hq3y2u04 paNum 0 68 22898 00/01/03-10:08:12.731777 8cbc6427 W CCBM: Simple Refresh RPC aborted, <NULL>. server rqs01 node hq3y2u04 paNum -1 34 29158 00/01/03-10:08:12.872943 8ccc7017 W CM: Reference to client in obsolete server gen, id {serverGen37 serverClientIdx 0}. server prod.v4.1.wfmRouteS.hq3y2u04 node hq3y2u04 paNum 0 68 22898 00/01/03-10:08:12.909600 8cbc8037 W CCBM: Server crashed, restarted. Must reregister.server prod.v4.1.wfmRouteS.hq3y2u04 node hq3y2u04 paNum 0 68 22898 00/01/03-10:08:12.940856 8cbc6837 W CCBM: Successfully refreshed after server crash.
server prod.v4.1.wfmRouteS.hq3y2u04 node hq3y2u04 paNum 0 68 22898 00/01/03-10:08:12.974038 8cb40417 W rqs_StatusToString: Unknown status code: 84017931 server prod.v4.1.wfmRouteS.hq3y2u04 node hq3y2u04 paNum 0 68 22898 00/01/03-10:08:13.007286 8cbc6857 W CCBM: Error RQS_STATUS_CODE_ILLEGAL refreshing callback 0, queue {Header 0, elem 4, uniqueId 11} server prod.v4.2.wiq_pkgS.hq3y2u04 node hq3y2u04 paNum 0 67 22910
The inappropriate warning messages have been changed to events and several of the fatal messages have been changed to uncond_events messages. Also, the entries in the status arrays have been initialized to eliminate those types of warnings.
After a successful dequeue, an RQS client sometimes noticed that the returned elementType was blank. This occurred when the client was accessing a type that had been destroyed and re-created by another RQS client. The RQS client cached name/ID mappings and the first client was not properly notified when the second client destroyed and re-created the type.
The RQS_OBSOLETE_ELEMENT_TYPE is now returned to the client and uses the rqs_ElementTypeRetrieve function to refresh cached information. The client-cached type ID does not become out of sync with the server.
You were unable to use the ENCINA_BINDING_FILE environment variable if you chose to use Encina++ without using the DCE CDS.
The following instructions give the steps necessary to use ENCINA_BINDING_FILE environment variable with Encina++, if you choose not to use CDS:
In an Encina++ Toolkit environment using CDS, the following environment variables must be set for both the client and the server:
% setenv ENCINA_CDS_ROOT /.:/cdsRoot % setenv ENCINA_OTS_TK_MODE 1
(The ENCINA_TK_MODE environment variable can also be used, but it will be made obsolete by the above variable.)
Additionally, the following variable must be set for the Encina++ Toolkit server:
If the server is not recoverable:
% setenv ENCINA_OTS_TK_SERVER_ARGS serverName=serverName
If the server is recoverable:
% setenv ENCINA_OTS_TK_SERVER_ARGS "servername=serverName \ restartString=restartFile1:restartFile2 logDevice=/dev/rdsk/c0t1d0s3"
In an Encina++ Toolkit environment without CDS, the following environment variables must be set (in addition to the ones above) for both the client and the server:
% setenv ENCINA_BINDING_FILE bindingFilePath
The Encina++ binding model supports four ways of binding to a server-side object:
Binding by object reference does not require a lookup because you already possess the required binding. For the other binding modes, the binding file must contain an appropriate entry.
When binding by interface, the entry $ ENCINA_CDS_ROOT/interface/interfaceName must exist in the binding file, listing the binding string for the server that exports this interface. When binding by server name, there must be an entry for $ENCINA_CDS_ROOT/server/serverName. When binding by object, there must be an entry for $ENCINA_CDS_ROOT/object/objectName.
Consider the following example:
Two servers, S1 and S2, are running on machines named siam and kramer, respectively. Server S1 exports interface I1 and named objects 011 and 012. Server S2 exports interface I2 and the named object 021. The binding files should contain entries similar to the following:
/.:/cdsRoot/server/S1 ncadg_ip_udp : siam [2021] /.:/cdsRoot/interface/I1 ncadg_ip_udp : siam [2021] /.:/cdsRoot/object/011 ncadg_ip_udp : siam [2021] /.:/cdsRoot/object/012 ncadg_ip_udp : siam [2021] /.:/cdsRoot/server/S2 ncadg_ip_udp : kramer [2042] /.:/cdsRoot/interface/I2 ncadg_ip_udp : kramer [2042] /.:/cdsRoot/object/021 ncadg_ip_udp : kramer [2042]
The state none returned by the tran_GetLocalState function was sometimes misleading. For example, the state none was returned in the following situations:
When a transaction has never been active, the tran_GetLocalState function now returns the subtree commitment if it is available; only when it is unavailable does the tran_GetLocalState function return the state none.
A server using TMXA_SERIALIZE_ALL_XA_OPERATIONS with TM-XA sometimes became locked if an ancestor transaction was aborted while the descendent was still associated with the resource manager.
This occurred because one thread attempting to perform the abort required the RM lock held by the descendant transaction. When the descendant transaction completed, the tran_End function was blocked because the other thread added a tran_DelayAbort function.
The TM-XA abort-callback now takes the GLOBAL lock, then tries to take the RM lock. If it gets the RM lock, the callback thread proceeds with the XA abort work. If the callback cannot get the RM lock, it records this as a deferred or pending abort, and calls the tran_DelayAbort function to prevent the TRAN from further resolving the transaction. When the RM lock is released, a test is made to see if there are any pending aborts. If there are pending aborts, the thread that owns the RM lock completes the XA abort work for the transactions to be aborted.
During restart processing, TRAN did not drop family locks properly and unlock-time finalizations were deferred, causing problems for the OTS.
TRAN now drops family locks as each new transaction is processed during restart.
A colon (:) could not be used for the path separator in the restart string for recoverable Encina servers on Windows NT, so a semicolon (;) was used instead.
You can now use the semicolon as a separator on other platforms as well.
Note: | If you use a semicolon on UNIX systems, you possibly need to use quotation marks or escape characters with this character since the semicolon is a meta-character in many UNIX shells. |
Although use of the TMXA_SERIALIZE_ALL_XA_OPERATIONS environment variable should allow a suspended association to be resumed in any Encina thread in a given process, the program checked to ensure that the same thread that suspended the association was used to resume it.
Now when the TMXA_SERIALIZE_ALL_XA_OPERATIONS environment variable is used, the whole process is considered to be the thread of control, and a suspended transaction can be resumed from any thread.
The OTS function register_subtran_aware was not throwing the switch NotSubTransaction for top-level transactions.
The problem has been corrected; NotSubTransaction is now thrown for top-level transactions.
When an RQS client request failed due to a communications error with the server, a warning was issued that contained the following misleading status:
RPC failed. Can't talk to server : serverName. Reason : ENC-trp-0029 RPC failed for unknown reasons (most likely that DCE cannot pass right status)
The warning now includes an appropriate DCE status that corresponds to the exception raised by the RPC runtime.
The OTS set the branch qualifier length, bqual_length, of the otid_t structure to one less than it should have been.
The branch qualifier length is now set correctly and the nesting model code is now included in the branch qualifier.
If an OTS subordinate server terminated at commit time, during a call to tran_ProvideOutcome that was triggered by a call to ProxyTran_i::commit from a superior coordinator, the restarted server was unable to repeat the call to ProxyTran_i::commit because tran_ProvideOutcome failed.
The process no longer depends on tran_ProvideOutcome succeeding after the failure. It now relies on TRAN to commit the local transaction, or the superior server to repeat the Resource::commit call.
A change was introduced in Encina 2.5 and retrofitted as a patch to Encina 2.0 and 1.1 to add support for disk partitions larger than 4 GB.
However, this fix had a negative effect on I/O performance for the SFS and the RQS servers. If, after a successful file open operation, the file descriptors (FD) limit was encountered while trying to perform 64-bit I/O to the file in a new thread, improper locking sometimes occurred. This locking led to a process suspension in which several threads were blocked.
This problem no longer occurs because the locking has been corrected.
Enconsole and enccp failed to cold start an RQS server if it was defined with authentication and authorization disabled. The failure generated the following error message:
initializing rqs server with data volume dataVol ... done adding initial acl, group:encina_admin_group:caxtq ... FAILED Command failed with the following status: DCE-rpc-0044: Unknown interface (dce / rpc) Call to function alibUtils_SetGroupAcl failed with the following status: DCE-rpc-0044: Unknown interface (dce / rpc)...
Enconsole and enccp now cold start an RQS server even if the server was defined with authentication and authorization disabled. The ACL interface (rdacl) is now enabled when the RQS server is running with authorization disabled.
In certain instances, the OTS idle server callback was not being executed. This caused the OTS server to become suspended after about five minutes (as soon as the OTS garbage collection executed) if the application's own garbage collection had released any objects. This happened because the waitingThreadCount function was not properly maintained.
The waitingThreadCount function is now properly maintained so that the idle server callback function is executed appropriately.
Sending more than five concurrent MAS start requests to a node sometimes caused a deadlock in the node manager. Each start request blocked until PA 0 sent an RPC to the node manager during its initialization, but the RPC could not be serviced if the entire default thread pool was consumed with MAS start requests.
There is now a separate internal thread pool for the monNmAppl interface. The default size is 1, and you can resize it by using the ENCINA_MON_INTERNAL_TPOOL_SIZE environment variable.
On Encina for HP-UX, the showProcInfo function did not work with the HP-UX 4.02 version of the dde debugger due to changes in this version of the debugger.
The showProcInfo function now works with any recent version of HP-UX dde.
On Encina for Windows NT, in the client-generated tidl stub code (*TC.C), C++ exception handling was used and resulted in the following compiler warning:
warning C4530: C++ exception handler used, but unwind semantics are not enabled. Specify -GX
The warning has been disabled because it was irrelevant in this situation.
The OTS prematurely terminated the wait for heuristic damage reports when executing an after-resolution callback.
The after-finished callback is now used for reporting heuristic information, instead of the after-resolution callback.
During a warm startup, the enccp and emadmin commands sometimes reported duplicate entries for the RQS with the following error:
ENC-eai-0091 ENCONSOLE_MULTIPLE_REFERENCES_TO_VOLUME
Duplicate entries for the RQS no longer occur.
When a recoverable application became unavailable, processing of transactions by other applications slowed down as TRPC threads became blocked trying to generate a new handle for the failed application.
When this situation occurs, the TRPC now dedicates one thread to generate a new handle to the failed application. If other threads encounter messages for the application, they move the messages to a queue. If the application restarts successfully, the queued messages are delivered; if the application does not restart, the queued messages are discarded.
Although DCE allows a configurable number of RPCs to be queued at a server, sometimes it is preferable to queue requests at the client to avoid flooding the RPC runtime and, potentially causing transient RPC failures in a highly-loaded system.
You can now use the new environment variable ENCINA_BINDING_MAX_CONCURRENT_RPCS_PER_PA to limit the number of concurrent RPCs sent by a single client to a single PA.
HP-UX patch PHSS_14920 introduced an incompatible National Language Support (NLS) message change that caused a segmentation violation in enccp when an invalid command was entered. The relevant part of the stack trace was:
'main(29) : Called from: sprintf (hpux_export stub) +0018 (C012F258) 'main(28) : Called from: \\Tcl_Eval (000BE56C) 'main(27) : Called from: \\Tcl_CatchCmd (000C06FC) 'main(26) : Called from: \\CatchCmd (00028E88) 'main(25) : Called from: CatchCmd (hpux_export stub) (00028E38) 'main(24) : Called from: \\Tcl_Eval (000BE2B8) 'main(23) : Called from: \\InterpProc (000F4A1C)
A different string (presumably the same one previously used by the DCE libtcl) is now used to compile enccp, and the segmentation violation no longer occurs.
There was no way to safely remove a logical volume from an SFS server, even if the volume was completely empty.
A new command, sfsadmin remove lvol, is now included in the sfsadmin command suite to enable you to remove a logical volume from an SFS server. It removes (disassociates) a logical volume from an SFS server. The syntax is as follows:
sfsadmin remove lvol [-server server_name] volume_name
Note: | This command is available only temporarily. It will not be available in the next release because it is superseded by the acquire/release vol support command. |
Arguments:
-server server_name-Specifies the name of the SFS server.
volume_name-Specifies the name of the logical volume to be removed.
Currently, an SFS server retains information about logical volumes that have been deleted by using the tkadmin delete lvol command. This behavior causes problems during server restarts and file creation. Query operations on the deleted volume also fail. The sfsadmin remove lvol command removes volume-related information from an SFS server so that after a logical volume is deleted by subsequent tkadmin commands, the server can continue to operate correctly.
Caution:
Before using the sfsadmin remove lvol command, you must make sure
that there are no pending transactions in the server. Removing a
logical volume while there are existing transactions can cause the server to
terminate abnormally and can cause problems during later restarts. Even
if existing transactions are accessing other SFS volumes (not targeted for
removal), it is safer to allow those transactions to complete as well.
Procedure:
To remove an SFS logical volume, perform the following steps:
Refer to the Encina Administration Guide Volume 1: Basic Administration for details on managing server transactions.
Caution:
After the sfsadmin remove lvol command completes, it is strongly
recommended that you stop the server and restart it before resuming normal
server operations. Doing any recovery work immediately following an
sfsadmin remove lvol command (without first stopping and restarting
the server) can cause the server to access the nonexistent volume.
(In-memory data structures are not updated until a shutdown and subsequent
warm start. Therefore, incorrect volume information can be
logged. This can cause problems in future server restarts.)
Note: | The names of logical volumes persist at the server, even after you use the
tkadmin delete lvol command to delete them. It is
recommended that you rename the deleted logical volume to clearly identify it
as the removed volume. Use the following sequence of commands:
On Non-AIX UNIX and Windows NT:
Example: In the following example, the SFS logical volume named sfsVol1 is deleted from an SFS server and renamed deletedSfsVol1. The physical volume and disk backing sfsVol1 are also deleted.
On AIX:
Example: In the following example, the SFS logical volume sfsVol1 is unmapped from its associated AIX logical volume and then renamed. On AIX, the physical volume and disk backing sfsVol1 must be deleted by using the AIX logical volume manager.
|
Notes:
You can also safely issue additional sfsadmin remove lvol commands to remove multiple logical volumes.
Permissions:
Encina SFS administer (A) permission on the SFS server
When a client was making a large number of concurrent requests using the same RQS handle, and a communications error caused the Fast Local Transport (FLT) handle to be invalidated, a segmentation violation sometimes occurred. In a similar situation, a segmentation violation sometimes occurred with the FLT disabled.
Both of these problems have been corrected.
If a "bind by object reference" OTS RPC failed, subsequent calls to the trpc_GetManagerInfo function from outside a manager function returned the message TRPC_SUCCESS rather than the expected status TRPC_NOT_IN_MGR (ENC-trp-0039).
The correct status is now returned. If you have been using the following workaround, it is now safe to delete it.
The tidl compiler has been modified to generate the code shown in the following workaround:
In the client generated tidl stub code (*TC.C), replace the following code for each RPC:
Bind(callHandle_.tranInfoP, callHandle_.ifSpecP) ; with: try { Bind(callHandle_.tranInfoP, callHandle_.ifSpecP) ; } catch ( . . . ) { trpcStub_LeaveClientStub(&callHandle) ; throw ; }
On Windows NT, exception handling cannot coexist with DCE exception handling (which is structured) in the same function, so the code above should be moved into a static function such as:
static void LocalBind(OtsBinding *otsBn, trpcStub_call_t &callHandle_) { try { otsBn->Bind(callHandle_.tranInfoP, callHandle_.ifSpecP) ; } catch ( . . . ) { trpcStub_LeaveClientStub(&callHandle_) ; throw; } }
and the function called as follows:
LocalBind(this, callHandle_);
This enhancement solves several problems involving the ENCINA_TPM_HANDLE_REFRESH_INTERVAL environment variable.
This change addresses these issues by allowing more latitude in setting the environment variable ENCINA_TPM_HANDLE_REFRESH_INTERVAL.
Now, if the environment variable ENCINA_TPM_HANDLE_REFRESH_INTERVAL is set, the mon_InitClient function does not attempt the RPC to the cell manager; instead, the specified value is used for the refresh interval.
However, if the previous behavior is desired, you can preserve it by using the existing Monitor API. If the cell manager is unavailable during initialization, the mon_InitClient function returns the status code MON_CELL_UNAVAILABLE. The application can then call the mon_SetHandleCacheRefreshInterval function to set the binding cache refresh interval to the desired value.
Note: | While the values for the cell attribute and the ENCINA_TPM_HANDLE_REFRESH_INTERVAL environment variable are specified in seconds, the value specified by the mon_SetHandleCacheRefreshInterval function is specified in minutes. |
If an RQS server deleted a FLT handle and subsequently received an FLT call from a client, the call was delayed for 60 seconds (the default FLT timeout value) before being completed by a TRPC.
If an RQS server receives a call to an FLT handle that it does not recognize, it now notifies the calling client immediately, resulting in an immediate TRPC to complete the call, as well as the generation of a new FLT handle.
An unexpected exception raised by the replay_completion function resulted in the following fatal error:
d41fb886 F Unexpected exception when replaying completion
All exceptions other than INV_OBJREF are now retried.
The OTS did not allow concurrent threads to work on behalf of the same transaction in interoperability mode.
The ResumeProxyTran and EndWorkOnForeignTran classes now use BeginWorkingOn and EndWorkingOn methods, instead of suspend and resume methods.
The OTS call to the replay_completion function was not nonblocking.
The OTS call to the replay_completion function is now nonblocking. The replay_completion work is now done in a background thread. This adjustment also helps to avoid recovery problems when the restarting server tries to access OTS resources.
On Encina for Windows NT, although enccp checked the system registry for local cell directory locations, enccp did not provide a means for setting them. Instead, it depended on the user first using Enconsole to set them, which updated the registry.
When a cell or node manager is created by using enccp commands, default values for drives containing the encinalocal and encinamirror directories are set as follows:
Two Windows NT-only enccp commands were added:
On Encina for Windows NT, the Encina Restart Service did not detect when a command file (.cmd) to restart a node already existed.
The Encina Restart Service now checks for the presence of .cmd files.
External Encina tracing did not support the special formatting character %k for translating error codes.
External Encina tracing now supports the special formatting character %k, thus making it easier for customers to generate meaningful trace messages.
During restart, a recoverable server (probably the cell manager) encountered the following fatal error:
18744c26 F Recovered Fragment lsn does not correspond to its position in backup stream.
This occurred because the possibility existed for two log extents to have the same log sequence number (LSN). Two extents could have the same LSN if the extents consisted entirely of meta-records (which do not have LSNs assigned) and if the LSNs of the extents were based on the order in which they were read, instead of the order in which they were written.
Each extent's LSN is now incremented to at least one greater than the first LSN of the previous extent.
In OTS, the Current::commit (TRUE) function for subtransactions executed wait for heuristic information logic, which was inappropriate for subtransactions. This happened because the Tran::operator = function did not copy the isNested data member.
The heuristic information logic is now executed correctly.
An uninitialized TRPC handle in the TRPC stub code sometimes caused a fatal error if an exception was raised before the handle was initialized.
Initialization is now performed correctly, and a fatal error no longer occurs.
An unexpected abort sometimes occurred during a server-side transaction (SST) when the client made an SST to a recoverable server, which then transmitted the transaction to another server. This caused the transaction to abort with the following message:
ENC-trp-0035: The server-side transaction was aborted or took an exception (TRCP_SERVER_SIDE_ABORT)
This abort was performed erroneously because the tranGetLocalState function was returning an unexpected state (TRAN_LOCAL_STATE_PREPARING) for the transaction.
The tranGetLocalState function now checks for the resolved outcomes before checking isLoggingPrepare, because it is legitimate to be logging for the benefit of others, and yet be resolved locally.
Performing an ACL check on an RQS server, when authenticated as the Encina administrator (encina_admin), using the dcecp or enccp commands, sometimes failed with the following message:
Error: operation on acl not authorized
This error occurred because the call to obtain the ACL did not include the caller's handle, so the RQS AclLookup function returned the message sec_acl_not_authorized and a null ACL.
Local calls (null sec_acl_mgr handle) are now permitted to use the AclLookup function. The implementation of the rdacl function uses this lookup for the rdacl_get_access function and other calls.
When cold starting a previously defined MAS that was not shut down cleanly, the server terminated with a fatal error that included the status code DCE-rpc-0164 (rpc_s_entry_already_exists).
The server now ignores the status code DCE-rpc-0164 (rpc_s_entry_already_exists) when calling the rpc_ns_group_mbr_add function to add a processing agent PA to the server group.
There were minor spelling errors in the following messages: rec_status.msg, ros_status.msg, trace_private.msg, and trace_tmp.msg.
The misspellings have been corrected and the message numbers have remained the same. There is no impact on the translations, and the English version is correct.
On Encina for AIX, the volume-locking logic used to ensure exclusive access to volumes did not properly support 64-bit addresses.
The volume-locking logic used to ensure exclusive access to volumes now supports 64-bit addresses.
The OTS sometimes failed with fatal errors if calls to the commit_subtransaction or rollback_subtransaction methods of the SubtransactionAwareResource function threw exceptions that were not caught by the application.
When unexpected exceptions are caught, a warning instead of a fatal error is now generated .
The DDL program sometimes terminated unexpectedly because of a memory violation.
The delete operation function in the DDL cleanup path, which caused an invalid memory access, has been removed.
On Encina for AIX, PPC allocate calls failed when an ENETDOWN signal was returned. This occurred when taking a node out of the switch network, causing the switch to send an ENETDOWN signal to all TCP connections on all nodes, even those that were not in contact with the node being removed.
The PPC now treats the ENETDOWN signal as a transient error, and retries up to five times every two seconds.
When server-side transactions were used with the TM-XA transaction-duration locking support, the process failed with the following fatal error:
5c0ca036 F Encina Internal Error -- Call your Support Representative : Unable to obtain ancestor for tid 10000 00000006 F . . ./2.0/source/src/server/tmxa/data.c 4041
The TM-XA threadTid callback has been modified to ignore the TRPC wrapped transaction identifier (TID) used in server-side transactions.
The enccp interface needed the same enhancements as those made to the emadmin interface in earlier patches. These enhancements allow you to issue a resync operation for restoring the cell repository after recovering from a failure.
The new attribute action is now supported in enccp.
During initialization, if a PA failed while holding the interprocess mutex that is used to protect the reservation information, attempts to restart the PA sometimes failed in the InitSharedPaInfo function because the new mutex could not be obtained.
The initialization process now waits only 60 seconds to obtain the interprocess mutex. If it cannot be obtained, the process continues under the assumption that a previous PA instance failed while holding it, and that it is safe to continue with initialization and unlock the mutex.
To provide more control over tuning the cleanup of TRPC handles used for the delivery of out-of-band messages, an enhancement was needed to control the maximum idle count and frequency of cleanup execution.
You can now control the frequency of cleanup execution by using the ENCINA_TRPC_CLEANUP_INTERVAL environment variable. Setting this environment variable determines how frequently TRPC cache cleanup is executed. Handles that have been idle too long or that have been marked invalid are removed from the cache by this cleanup processing. The default value is 30 seconds; changes must be written in microseconds (for example, 40000000 microseconds for a 40-second idle time).
You can also control the maximum idle count by using the ENCINA_TRPC_CLEANUP_MAX_IDLE_COUNT environment variable. Setting this environment variable determines when a handle used for TRPC out-of-band messages has been idle too long and should be removed from the cache. When a handle has been idle for the specified number of cache cleanup passes, it is removed from the cache. The default value is 20 seconds; changes must be written in microseconds (for example, 40000000 microseconds for a 40-second idle time).
Tran-C implemented a fixed two-minute wait for another thread to abort a transaction. This produced the following fatal error if the timeout was exceeded:
2c301416 F tc_serial_AbortNamedTran: looped N times waiting for transfer of control for tid tid...
However, since RPC communications timeouts were possibly involved, no reasonable fixed timeout was applicable to all situations.
The fatal error has been changed to a warning, issued every five minutes, until the abort is complete.
A race condition between an administration call executed from Enconsole and the return of another TRPC sometimes caused a server to fail with a segmentation violation. The stack trace from the core file read as follows:
[1] admin_trpc_mgr_CallsInProgress( ) [2] op0_ssr( ) [3] rpc_cn_call_executor( )
TRPCs that are in the process of leaving the server are now ignored by an administration call if relevant information has already been freed.
A conflict in an SFS server sometimes caused the external file handler (EXTFH) to destroy an OFD. This resulted in a fatal error message similar to the following:
88047016 F Encina Internal Error -- Call your Support Representative: extfh: sfs_RestoreContext FAILED with status ENC-sfs-0059: Invalid OFD. 00000006 F .../pdg/2.0_ports/source/src/sfs/extfh/cobol_common.c 1330
The error message did not contain the name of the file in question, making it difficult to determine the cause of the error.
The fatal error message now contains the name of the file that caused the error.
The OTS incorrectly depended on the function _narrow to throw an exception to determine if a resource was registered with the sub_tran_aware method.
The OTS now uses the is_nil function to determine if a resource is sub_tran_aware.
If you attempted to restore a failed Encina cell manager from a backup of its repository, the attempt failed because hidden attributes in the repository did not enable the restored cell manager to resynchronize with nodes in the cell.
After you restore a cell manager's data volume, you must resynchronize the values of some special repository attributes maintained by the running node managers and the cell manager. Because a backup of a cell manager's repository captures the state of that cell at a single point in time, the repository information does not necessarily reflect the actual state of the nodes and servers in the cell at the time you perform the restore. To bring the repository up to date, the cell manager must retrieve current attribute values from the node managers. To do this, use the action attribute of cell and node objects to force a resynchronization of these internal attributes between the cell manager and the running node managers.
Backing up and restoring a cell manager's repository
The following procedure describes how to back up and restore a cell manager's repository.
Note: | Encina volumes can be backed up by using any one of the following
methods: tkadmin, an enccp script such as
saveRepository (for the cell manager repository only), or an
operating system command such as the UNIX dd command.
This procedure uses the saveRepository script to back up and then restore a cell manager's repository. The other methods mentioned can be used to back up and restore the entire cell manager data volume. Regardless of the method used, Step 4 (resynchronizing repository attributes) must follow the restore procedure so that a running cell can function normally. |
Backing up a cell manager's repository
The saveRepository script queries the attributes of all objects in the repository (taking a snapshot of the repository) and then creates a script that can be used to restore those attributes. The script generates output in the form of a standalone enccp script. The generated script can be used to recreate all objects and their attribute values following a complete loss of the repository. The restore procedure consists of running the generated script and then resynchronizing the repository so that it reflects the current state of running nodes. After the resynchronization is complete, the cell can function normally. The saveRepository script assumes that the raw disks originally backing the cell manager's volumes still exist, and it restores the same volume objects.
Note: |
|
% dce_login encina_admin
% setenv ENCINA_TPM_CELL cell_name
% saveRepository > restoreCell.ecp
% chmod +x restoreCell.ecp
Restoring a cell manager's repository
After a failure involving loss of a cell manager's data volume, do the following:
% restoreCell.ecp
enccp> ecm modify -action resync
The cell manager issues audit messages when the resynchronization begins and when it is completed. Concurrent resynchronization requests are not permitted. You can resynchronize the entire cell or synchronize nodes one at a time as follows:
Cellwide resynchronization
To resynchronize all nodes in a cell, change the value of the cell object's action attribute to resync. The cell manager attempts to contact all defined nodes and initiates resynchronization with the nodes it is able to contact. (Setting the action attribute for the cell object is the same as setting the action attribute of each node object in the cell.) The cell manager issues a warning for those nodes that cannot be resynchronized--for example, for nodes that are stopped. If servers are running on a node but the node is not running, change the value of the node object's action attribute after restarting the node.
Note: | Resynchronizing the entire cell will block access to the repository until the resynchronization is complete--that is, attempts to start new Enconsole processes or perform operations in existing Enconsole processes must wait until the cell can be contacted. If you want to maintain access to the cell during resynchronization, it is recommended that you use per-node synchronization. |
Per-Node synchronization
You can resynchronize nodes in a particular order (based on importance, activity, or number of servers, for example). First determine which nodes are running and then resynchronize just the running nodes. To resynchronize a node, change the value of the node object's action attribute to resync. This starts resynchronization of the desired node.
The OTS attempted to execute the replay_completion function indefinitely, or attempted to execute both the commit and rollback upcalls if the replay_completion function was retried after the coordinator had finished a transaction.
The program does not execute the replay_completion function if the transaction has already been resolved.
TRAN generated unnecessary commit-with-respect-to (CWRT) message traffic that Orbix could not gracefully handle.
TRAN no longer sends CWRT requests to other applications when a descendant is still active. CWRT answers are only to sites that send messages containing the wantsOutcome message set. Since the transaction beginner does not require CWRT information from others, wantsOutcome is not set.
In high load situations, an RQS server sometimes failed with a segmentation violation. The stack trace from the core file shows the failing thread as follows:
t@48 (1@120 stopped in qsmQset_GetAcl at 0xc0fd4 0x000c0fd4: qsmQset_GetAcl+0x0104: ld [%13 + 0x4], %14 current thread: t@48 => [1] qsmQset_GetAcl ( ) [2] qsm_GetQsetAcl ( ) [3] verifyQsetAuth ( ) [4] qsm_Dequeue ( ) [5] rqsServer_QSDequeque ( ) [6] rqsSrv_TQSDequeque ( ) [7] rqsSrv_TQSDequeque_msr ( ) [8] op11_ssr ( )
This failure was due to a data page being referenced outside any operation and was therefore unprotected from being reused.
The relevant information from the data page is now extracted from within the operation.
The trdce routine sec_ModifyAcl was altering the IN ACL and not creating an OUT ACL in cases where the aclEntry was present in the IN ACL. This resulted in a segmentation violation and sometimes unexpected changes to the default ACLs for an RQS because the IN ACL (which could be a default ACL) possibly was modified unintentionally.
The trdce routine now creates the OUT ACL, adding or replacing the requested entry as appropriate.
At times, an OTS client did not perform proper initialization and then invoked a request on an object reference for a transactional object in an OTS server. This behavior caused the server to terminate with the following fatal error:
d41fc856 F Encina Internal Error -- Call your Support Representative: Unknown request received 00000006 F src/ots/runtime/common/corba/TranCommData.C 459
OTS clients now initialize properly.
When using an XA-compliant resource manager that does not support migration (such as MQSeries), subtransactions sometimes aborted with the following error:
ENC-tmx-0002 (TMXA_DID_NOT_MIGRATE)
The TM-XA threadTid callback now correctly sets the RM flags for transaction suspension.
Transaction_i objects need to be marked uniquely by using a global TID. Otherwise, a quick termination and restart of a transaction-factory might cause a client to complete work on transactions that it did not intend.
A global TID is now used with the Transaction_i object.
On Encina for Windows NT, attempting to start a server with expired credentials sometimes resulted in the following DCE error:
DCE-rpd-0168 No permission for name service operation
This error, which was observed on Windows NT only, did not occur if the CDS entry for the server already existed.
In addition, when a server was started with expired credentials, the trace redirection RPC used to direct all serious messages to the cell manager for distribution to Serious Message clients like Enconsole, sometimes failed. As a result, any Serious Messages generated by the server were only output locally instead of also being recorded by the cell manager.
The DCE error has been eliminated by isolating and removing the DCE call that caused the error. The trace redirection problem has been corrected by checking for expired credentials and ensuring that the RPC handle is not stamped with them.
Due to a database problem involving repeated checkpoint requests, the node manager became saturated with XA logging requests. This caused a shortage of log space and a dramatic increase in the size of the node manager process.
Checkpoint requests are no longer taken in response to high use of log space. A warning is now issued when the amount of available log space becomes low.
The recoverable storage allocator (RSA) used by RQS had a single daemon thread used for servicing a variety of requests, such as merging elements reclaimed from the orphan queue. Under high load conditions, this thread was sometimes starved by forward processing, resulting in higher than expected volume utilization for the RQS data volume.
Each request is now run in a separate thread. Also, a rare condition that possibly led to the mergeRequested boolean remaining set, which prevented subsequent merges, has been corrected.
An internal data structure was not being initialized properly when a startup or shutdown task was modified for server dependencies. Starting a server set that included several dependencies among servers within the set resulted in the cell manager encountering the following fatal error:
60e85416 F Encina Internal Error -- Call your Support Representative: TaskFinished called for unknown tid: 555683020 00000006 F . . . /field/pdg/2.5/source/src/tpm/cm/cmTasks.c 609
The internal data structure is now properly initialized when a startup or shutdown task is modified for server dependencies.
A client running on a Solaris 2.6 machine sometimes failed to establish a connection with a PPC Gateway server due to an unexpected error status (EACCESS) from the bind system call.
The logic has been changed to recognize the new error status as a transient error.
The OTS sometimes leaked Synchronization objects due to incorrect reference counting.
The reference counting now works correctly.
Enconsole terminated with a fatal error if a user submitted duplicate delete requests for the last message on the Serious Messages screen.
Enconsole now simply makes a beep sound to indicate that the duplicate requests cannot be processed, instead of terminating with a fatal error.
On Encina for Windows NT, the abort reason strings for an Encina++/DCE application were not passed from the server to the client application. If the server called abortTran with a string describing the reason for the abort, the client did not retrieve the string.
On the server, the abort reason was overwritten when it was converted from a C++ to a DCE exception. On the client, the abort reason was not passed in an appropriate Tran object, and the transaction was not stopped before the abort reason was retrieved.
The Encina++/DCE application abort reason strings are now passed from the server to the client application.
The Encina++ binding-by-name logic incorrectly ignored the interface's major version number, resulting in clients binding to incompatible servers.
The client-side binding logic has been changed to ensure that it binds only to servers exporting a compatible interface version.