Errori - Pathsend - Pathway-ServerClassSend
Errori - Pathsend - Pathway-ServerClassSend
Abstract
This manual describes how to write two types of programs as part of a Pathway
application: requester programs that use the Pathsend application program interface
(API) and server programs that service requests from all types of Pathway requesters.
Product Version
NonStop TS/MP D44
Supported Releases
This manual supports D44.00 and all subsequent D4x releases and G03.00 and all
subsequent G-series releases until otherwise indicated in a new edition.
Ordering Information
For manual ordering information: domestic U.S. customers, call 1-800-243-6886; international customers, contact
your local sales representative.
Document Disclaimer
Information contained in a manual is subject to change without notice. Please check with your authorized Tandem
representative to make sure you have the most recent information.
Export Statement
Export of the information contained in this manual may require authorization from the U.S. Department of
Commerce.
Examples
Examples and sample programs are for illustration only and may not be suited for your particular purpose. Tandem
does not warrant, guarantee, or make any representations regarding the use or the results of the use of any examples
or sample programs in any documentation. You should verify the applicability of any example or sample program
before placing the software into productive use.
U.S. Government Customers
FOR U.S. GOVERNMENT CUSTOMERS REGARDING THIS DOCUMENTATION AND THE ASSOCIATED
SOFTWARE:
These notices shall be marked on any reproduction of this data, in whole or in part.
NOTICE: Notwithstanding any other lease or license that may pertain to, or accompany the delivery of, this
computer software, the rights of the Government regarding its use, reproduction and disclosure are as set forth in
Section 52.227-19 of the FARS Computer Software—Restricted Rights clause.
RESTRICTED RIGHTS NOTICE: Use, duplication, or disclosure by the Government is subject to the
restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at
DFARS 52.227-7013.
RESTRICTED RIGHTS LEGEND: Use, duplication or disclosure by the Government is subject to restrictions
as set forth in paragraphþ(b)(3)(B) of the rights in Technical Data and Computer Software clause in
DAR 7-104.9(a). This computer software is submitted with “restricted rights.” Use, duplication or disclosure is
subject to the restrictions as set forth in NASA FARþSUP 18-52þ227-79 (Aprilþ1985) “Commercial Computer
Software—Restricted Rights (Aprilþ1985).” If the contract contains the Clause at 18-52þ227-74 “Rights in Data
General” then the “Alternate III” clause applies.
U.S. Government Users Restricted Rights — Use, duplication or disclosure restricted by GSA ADP Schedule
Contract.
Unpublished — All rights reserved under the Copyright Laws of the United States.
New and Changed Information
This is the third edition of the NonStop TS/MP Pathsend and Server Programming
Manual.
Writers of Pathsend requesters and all Pathway servers should read this manual. Writers
of SCREEN COBOL requesters should read the Pathway/TS TCP and Terminal
Programming Guide.
This third edition includes changes to reflect product changes, and also additional
enhancements. Substantive changes (changes that are not simply editorial) are marked
by change bars in the right-hand margin of the page.
Product Changes
This manual documents the following changes to NonStop TS/MP and related products:
• New Pathsend procedure calls have been added to support context-sensitive
communication (dialogs) between requesters and servers.
Section 3, Writing Pathsend Requesters, now describes how to use these procedure
calls in a Pathsend requester. Section 5, Pathsend Procedure Call Reference,
provides detailed syntax for the procedure calls. Section 6, Pathsend Errors,
describes new error messages related to the calls.
• A new TUXEDO to Pathway translation server is now available as part of Release 2
of the NonStop TUXEDO system. This translation server allows TUXEDO
requesters (that is, TUXEDO clients and TUXEDO servers acting as clients) to
access Pathway servers.
Other Transaction Processing Environments on page 1-13 and Writing Pathway
Servers That Interoperate With TUXEDO Requesters on page 4-17 now mention the
availability of the TUXEDO to Pathway translation server. Details on the use of this
translation server are provided in the NonStop TUXEDO System Pathway
Translation Servers Manual.
• Changes are being made to the Remote Server Call (RSC) product, and some of the
protocols formerly listed in Section 2 of this manual may no longer be supported.
Therefore, all mention of support for specific platforms and protocols under Clients
Using RSC and POET on page 2-15 has been removed and replaced by a more
general statement. For detailed information about the platforms and protocols
supported by the RSC product, refer to the Remote Server Call (RSC) Programming
Manual.
Examples
Example 2-1. Sample Pathsend Requester Program Structure 2-15
Example 2-2. COBOL85 Server Program Example 2-25
Example B-1. Context-Free Pathsend Requester Program B-2
Example B-2. Context-Free Server Program B-53
Figures
Figure i. Related Documentation xiii
Figure 1-1. Pathsend Interprocess Communication 1-11
Figure 1-2. Example Application Using a Pathsend Requester 1-16
Figure 2-1. Data Flow for a Business Task 2-3
Figure 2-2. Relationships Between Transaction Functions 2-5
Figure 2-3. Pathway Application Programming for the TMF Subsystem 2-7
Figure 2-4. GDSX as a Front-End Process 2-18
Figure 2-5. GDSX as a Back-End Process 2-24
Tables
Table 1-1. Task and Manual Correspondences 1-2
Table 2-1. Considerations for Requester Programs 2-11
Table 4-1. Meaning of Error Codes Returned by Context-Sensitive Server in
Reply 4-15
Table 5-1. Summary of Pathsend Procedure Calls 5-1
Table A-1. Limits for Pathsend Requesters A-1
Related Documentation
This manual is one in a set of Tandem manuals for the NonStop TS/MP and Pathway/TS
products. Figure i, Related Documentation, shows the manuals that are most closely
related to this manual.
The following paragraphs describe each of the supporting manuals shown in Figure 1.
• Pathway/TS TCP and Terminal Programming Guide. This guide describes how to
write requester programs using SCREEN COBOL.
• Guardian Programmer’s Guide. This guide provides information about
programming in the Guardian environment, including use of the Guardian procedure
calls. It is useful to programmers who are writing Pathway servers, especially if
they are writing them in C, C++, the Transaction Application Language (TAL), or
the Portable Transaction Application Language (pTAL).
Further information
Pathway/TS Operator
about Pathway
TCP and Messages
application
Terminal Manual
programming
Programming Information about
Guide problem
management Guardian
Guardian Procedure
Programmer's Errors and
Guide Messages
NonStop Manual
TS/MP
Pathsend
and Server
Programming
Manual
Introduction
Information Information to NonStop
about about related Transaction
NonStop
managing products Processing
TS/MP
a PATHMON
System
environment
Management NonStop
Manual TM/MP
Application
Programmer's
Guide
NonStop
TUXEDO Sys
App Dev
Guide
NonStop
TUXEDO Sys
Pathway
Transl Servers
Manual
CDT022
For information about informational, warning, and error messages, refer to the following
manuals:
• Guardian Procedure Errors and Messages Manual. This manual describes the
Guardian messages for Tandem systems that use the Tandem NonStop Kernel. The
manual covers various types of error codes and error lists associated with Guardian
procedure calls and also the interprocess messages sent to application programs by
the operating system and the command interpreter.
• Operator Messages Manual. This manual describes system messages. For each
message the manual provides an explanation of the cause, a discussion of the effect
on the system, and suggestions for corrective action. The “PATHWAY Messages”
section describes the operator messages generated by the PATHMON environment.
For information about managing the PATHMON environment in which your Pathway
applications run, you might want to read the following manual:
• NonStop TS/MP System Management Manual. This manual describes how to start,
configure, and manage a PATHMON environment. This manual also includes
information about monitoring and adjusting your PATHMON environment to
optimize performance, suggestions for diagnosing and fixing problems, and
manageability guidelines such as how to start objects in parallel to improve
performance. It also describes the commands for configuring, starting, and
managing a PATHMON environment.
For information about related Tandem products, see the following publications:
• Introduction to NonStop Transaction Processing. This manual describes the
architecture, components, and benefits of Tandem transaction processing products,
including NonStop TS/MP, Pathway/TS, and related products such as the NonStop
TUXEDO system.
• NonStop TM/MP Application Programmer’s Guide. This guide provides
information about programming for the Transaction Management Facility (TMF)
subsystem, including use of the TMF procedure calls. It is useful to programmers
who are writing Pathsend requesters and Pathway servers, especially if they are
writing them in C, C++, the Transaction Application Language (TAL), or the
Portable Transaction Application Language (pTAL).
• NonStop TUXEDO System Application Development Guide. This guide provides
information about writing NonStop TUXEDO applications. Pathsend requesters can
interoperate with NonStop TUXEDO applications either directly by using the
NonStop TUXEDO Application Transaction Monitor Interface (ATMI) functions, or
indirectly by using the Pathway translation server for the NonStop TUXEDO
system.
• NonStop TUXEDO System Pathway Translation Servers Manual. This manual
provides information about writing Pathsend and SCREEN COBOL requesters that
interoperate with NonStop TUXEDO servers by using the Pathway to TUXEDO
translation server, and information about writing Pathway servers that interoperate
with TUXEDO requesters (clients or servers acting as clients) by using the
TUXEDO to Pathway translation server. It also provides configuration information
for the two translation servers.
UPPERCASE LETTERS. Uppercase letters indicate keywords and reserved words; enter
these items exactly as shown. Items not enclosed in brackets are required. For example:
MAXATTACH
lowercase italic letters. Lowercase italic letters indicate variable items that you supply.
Items not enclosed in brackets are required. For example:
file-name
{ } Braces. A group of items enclosed in braces is a list from which you are required to
choose one item. The items in the list may be arranged either vertically, with aligned
braces on each side of the list, or horizontally, enclosed in a pair of braces and separated
by vertical lines. For example:
LISTOPENS PROCESS { $appl-mgr-name }
{ $process-name }
ALLOWSU { ON | OFF }
| Vertical Line. A vertical line separates alternatives in a horizontal list that is enclosed in
brackets or braces. For example:
INSPECT { OFF | ON | SAVEABEND }
… Ellipsis. An ellipsis immediately following a pair of brackets or braces indicates that you
can repeat the enclosed sequence of syntax items any number of times. For example:
M address-1 [ , new-value ]...
[ - ] {0|1|2|3|4|5|6|7|8|9}...
An ellipsis immediately following a single syntax item indicates that you can repeat that
syntax item any number of times. For example:
"s-char..."
Punctuation. Parentheses, commas, semicolons, and other symbols not previously described
must be entered as shown. For example:
error := NEXTFILENAME ( file-name ) ;
LISTOPENS SU $process-name.#su-name
Quotation marks around a symbol such as a bracket or brace indicate the symbol is a
required character that you must enter as shown. For example:
"[" repetition-constant-list "]"
Item Spacing. Spaces shown between items are required unless one of the items is a
punctuation symbol such as a parenthesis or a comma. For example:
CALL STEPMOM ( process-id ) ;
If there is no space between two items, spaces are not permitted. In the following
example, there are no spaces permitted between the period and any other items:
$process-name.#su-name
Line Spacing. If the syntax of a command is too long to fit on a single line, each continuation
line is indented three spaces and is separated from the preceding line by a blank line.
This spacing distinguishes items in a continuation line from items in a vertical list of
selections. For example:
ALTER [ / OUT file-spec / ] CONTROLLER
[ , attribute-spec ]...
!i and !o. In procedure calls, the !i notation follows an input parameter (one that passes data
to the called procedure); the !o notation follows an output parameter (one that returns
data to the calling program). For example:
CALL CHECKRESIZESEGMENT ( segment-id !i
, error ) ; !o
!i,o. In procedure calls, the !i,o notation follows an input/output parameter (one that both
passes data to the called procedure and returns data to the calling program). For
example:
error := COMPRESSEDIT ( filenum ) ; !i,o
!i:i. In procedure calls, the !i:i notation follows an input string parameter that has a
corresponding parameter specifying the length of the string in bytes. For example:
error := FILENAME_COMPARE_ ( filename1:length !i:i
, filename2:length ) ; !i:i
!o:i. In procedure calls, the !o:i notation follows an output buffer parameter that has a
corresponding input parameter specifying the maximum length of the output buffer in
bytes. For example:
error := FILE_GETINFO_ ( filenum !i
, [ filename:maxlen ] ) ; !o:i
Nonitalic text. Nonitalic letters, numbers, and punctuation indicate text that is displayed or
returned exactly as shown. For example:
Backup Up.
lowercase italic letters. Lowercase italic letters indicate variable items whose values are
displayed or returned. For example:
p-register
process-name
[ ] Brackets. Brackets enclose items that are sometimes, but not always, displayed. For
example:
Event number = number [ Subject = first-subject-value ]
A group of items enclosed in brackets is a list of all possible items that can be displayed,
of which one or none might actually be displayed. The items in the list might be
arranged either vertically, with aligned brackets on each side of the list, or horizontally,
enclosed in a pair of brackets and separated by vertical lines. For example:
LDEV ldev [ CU %ccu | CU %... ] UP [ (cpu,chan,%ctlr,%unit) ]
{ } Braces. A group of items enclosed in braces is a list of all possible items that can be
displayed, of which one is actually displayed. The items in the list might be arranged
either vertically, with aligned braces on each side of the list, or horizontally, enclosed in
a pair of braces and separated by vertical lines. For example:
LBU { X | Y } POWER FAIL
process-name State changed from old-objstate to objstate
{ Operator Request. }
{ Unknown. }
| Vertical Line. A vertical line separates alternatives in a horizontal list that is enclosed in
brackets or braces. For example:
Transfer status: { OK | Failed }
% Percent Sign. A percent sign precedes a number that is not in decimal notation. The
%þnotation precedes an octal number. The %Bþnotation precedes a binary number.
The %Hþnotation precedes a hexadecimal number. For example:
%005400
P=%p-register E=%e-register
to read all sections of this manual. Table 1-1 is a descriptive map listing which sections
are relevant to particular programming tasks.
If you are writing SCREEN COBOL requesters, you need the Pathway/TS TCP and
Terminal Programming Guide and the Pathway/TS SCREEN COBOL Reference Manual
for programming information.
If you are writing Pathsend requesters that communicate with NonStop TUXEDO
servers, or if you are writing Pathway servers that handle requests from NonStop
TUXEDO requesters (clients or servers acting as clients), you also need the manuals for
the NonStop TUXEDO system, particularly the NonStop TUXEDO System Application
Development Guide, for additional information. If you are using the Pathway to
TUXEDO translation server or the TUXEDO to Pathway translation server, you also
need the NonStop TUXEDO System Pathway Translation Servers Manual. This manual
provides configuration, startup, and programming information.
Ease of Development
Development costs are one of the highest expenses associated with online transaction
processing (OLTP) systems. The more sophisticated the features and safeguards that are
built into your OLTP application—for example, multiprocessing, fault tolerance, and
data integrity—the greater the costs. When you use NonStop TS/MP and related Tandem
transaction processing products to create your OLTP applications, development time and
efforts, and therefore costs, can be measurably reduced.
This cost reduction occurs because:
• NonStop TS/MP and related products provide the most complex components of an
OLTP application. NonStop TS/MP includes the transaction monitor (PATHMON),
the command interpreter for management (PATHCOM), and the means for
interprocess communication.
In addition, the NonStop Transaction Manager/MP (NonStop TM/MP) product
provides the transaction manager, and the Pathway/TS product provides a
multithreaded terminal control process (TCP) for communication with terminals,
including fault tolerance and transaction protection. (On Tandem NonStop system
models earlier than the Himalaya systems, Pathway/TS is packaged as part of the
Pathway transaction processing system.)
Used with or without NonStop TM/MP and Pathway/TS, NonStop TS/MP provides
a run-time Pathway environment to simplify your development efforts for scalable
OLTP applications on a massively parallel processor architecture.
• Tandem makes valuable application development tools and utilities available for the
Pathway environment. These development tools and utilities can significantly reduce
the amount of programming time and effort required to generate a working Pathway
application.
The Remote Server Call (RSC) product facilitates client/server computing, allowing
workstation applications to access Pathway servers. A large number of packaged
tools and utilities are commercially available for use with RSC, including Tandem’s
Pathway Open Environment Toolkit (POET).
• The Pathway environment helps you standardize program code. You can repeat and
reuse code; you do not have to write the same requester and server programs over
and over again. This ability to reuse code saves development time.
• The Pathway environment allows you to isolate and test your requester and server
programs before adding them to a running application. This capability is important
because coding errors are difficult, time-consuming, and expensive to find after an
application is put into production.
• OLTP products that are compatible with the Pathway environment are available from
third-party vendors through the Tandem Alliance program.
In addition to making initial development faster and easier, the structured Pathway
environment allows you to implement enhancements and develop new applications by
simply adding new requesters, sharing existing servers, or adding new servers to the
existing application. You can use code modules in the existing application as templates
for new modules in the modified or new application.
Manageability
Online transaction processing operations present a dynamic environment in which
hundreds of different transactions—from disparate locations and many different I/O
devices—can be entered concurrently and processed within seconds. To process
hundreds of transactions, thousands to millions more application program instructions
must be executed. It is critical that you be able to control and monitor such a complex
processing environment.
To control and monitor your Pathway environment—as well as simplify the task of
system management—NonStop TS/MP provides the following:
• A PATHMON process, which provides a single point of control over your OLTP
applications and operations
• A choice of two different system management interfaces: the interactive PATHCOM
interface and the Subsystem Programmatic Interface (SPI)
• Status and error reporting capabilities, provided through a log file and through the
Event Management Service (EMS)
Because NonStop TS/MP provides these processes and capabilities, you do not have to
spend the time and money to develop, test, and implement comparable mechanisms.
For more information about the PATHMON process, the management interfaces, and
status and error reporting capabilities in the Pathway environment, refer to the
NonStop TS/MP System Management Manual, the Pathway/TS System Management
Manual, the NonStop TS/MP Management Programming Manual, and the Pathway/TS
Management Programming Manual.
Data Integrity
If your database is corrupted by a hardware or software failure, you might need weeks to
isolate and then correct the problem. Because an inaccessible or inconsistent database
can have a dramatic, adverse effect on business operations, Tandem developed the
Transaction Management Facility (TMF) subsystem, provided in the NonStop TM/MP
product, as a way of ensuring database consistency. The TMF subsystem, which works
with NonStop TS/MP, protects the entire database from catastrophic system failures by
maintaining an audit trail of database changes (that is, transactions); an audit trail is also
commonly known as a transaction log. You can use the audit trail to rebuild the database
in the event of a hardware or software failure.
The design of Pathway servers supports the integrity of individual transactions and
therefore transaction processing protection as a whole. Because the requester/server
model allows a clear division of processing functions, application programmers can code
each server program to handle a specific set of transaction types: for example, checking
an account balance, entering a new customer, or updating the parts inventory. The server
processes service their transactions by performing the same set of tasks over and over
again. In this way, a valid transaction is defined as a specific set of tasks both by the
requester program and within the server logic.
If for any reason a server is unable to complete all tasks involved in processing a
transaction, it can abort the transaction and thereby maintain the transaction’s integrity.
The server does not have to wait for the requester to abort the transaction.
Fault Tolerance
Because OLTP systems automate core business operations and deliver key business
services, companies depend on OLTP applications to stay up and running—even if a
hardware or software component fails.
Tandem NonStop systems, which are specifically intended for online transaction
processing, are designed to remain continuously available during the hours when
transactions are being entered and business is being conducted. Typically, a Tandem
NonStop system can continue processing despite the failure of any single software or
hardware component within that system. This ability is referred to as fault tolerance.
In the Pathway environment, automatic fault tolerance (that is, fault tolerance that does
not require any additional programming effort on your part) is provided by the use of
process pairs and the actions of the PATHMON process, the TMF subsystem, and the
terminal control process (TCP) provided with the Pathway/TS product.
In the Guardian operating environment, the functions and tasks of an application are
performed by processes, which are running programs. A process pair consists of a
primary process, which does some specific function in the overall work of the
application, and a secondary (backup) process, which remains ready to take over if the
primary process fails. During processing, the primary process keeps the backup process
informed of what it is doing (for example, sending a request) by means of special
interprocess messages, in an activity called checkpointing. Through checkpointing, the
backup process has enough information to take over and continue if the primary process
fails.
Both the PATHMON process and the TCP can be configured as process pairs to support
Pathway applications. When the PATHMON process is configured as a process pair, you
are ensured the ability to control and monitor OLTP system operation even if the
primary PATHMON process fails. When a TCP is configured as a process pair and the
primary TCP fails, terminals controlled by the TCP can still be used.
Pathway server classes provide additional fault tolerance by allowing requests to be
rerouted to surviving server processes in a server class if one server process fails.
Besides process pairs and server classes, fault tolerance in a Pathway application is
ensured by the PATHMON process, the TCP, and the TMF subsystem. Using
information stored in the PATHMON configuration file, the PATHMON process
automatically restarts processes at their initialization level after a failure, allowing these
processes to resume work immediately.
System Security
The Guardian operating environment includes basic mechanisms for controlling access
to files, whether they are data files or program files. Because NonStop TS/MP runs in
the Guardian operating environment, Guardian system security parameters also apply to
Pathway users and processes. In addition, you can supplement the security features of
the Guardian environment with the Safeguard product, which provides authentication,
authorization, and auditing capabilities for Guardian files.
Scalability
Your organization must be able to expand its transaction processing system as its
operations evolve and its technical requirements change. Tandem NonStop systems are
expressly designed to support incremental, modular expansion, allowing you to increase
the size and processing power of your transaction processing system by:
• Adding hardware and application resources to your existing system
• Linking individual Pathway applications into a single network or adding more
Pathway applications to an existing network
• Supporting an open systems architecture in which standards-based networks as well
as devices and systems from other vendors can be connected to your Tandem system
Distributed Processing
Data communications technology allows organizations to extend their online operations
over long distances to form global networks and to support distributed processing. The
Pathway environment, in conjunction with the Tandem NonStop Kernel operating
system, allows you to distribute application processes within a single system.
Additionally, NonStop TS/MP and NonStop TM/MP, in conjunction with the Expand
networking software, allow you to spread processes, data, and transactions across a
network of Tandem NonStop systems. The coordination of transactions among
application servers residing within an Expand network and possibly accessing different
resource managers (NonStop SQL/MP and Enscribe) is known as distributed transaction
processing (DTP).
Pathway Applications
Pathway applications consist of two types of programs: requester programs and server
programs. This design allows application logic to be distributed near the resources it
manages. For example, presentation services are located near terminal devices or
workstations; database logic resides in server programs near that database. Requesters
and servers communicate by using the Guardian file system or the message system that
is part of the Tandem NonStop Kernel.
Users interact with your application by using devices and processes controlled by your
requester programs. Often these devices are terminals through which the users enter and
retrieve transaction data. They might also, however, be intelligent devices such as
personal computers, workstations, point-of-sale devices, or automatic teller machines
(ATMs). Or, they might be Guardian processes that provide transaction input from a file
or other batch medium.
Server processes receive requests from requester processes to access a database to add,
retrieve, or modify information. Server processes process request messages and send
reply messages with the results of the work on the database.
Server Processes
Server processes provide the following benefits:
• Server processes help ensure transaction integrity and, therefore, the integrity of the
database.
• Server code can be reused by many requester programs, and you can separate
presentation services from database functions.
• You can control which transactions can be performed on your node. You can control
the logic of the servers, database names, disk names, and so on.
• In distributed environments, server processes provide high performance by allowing
you to use remote servers instead of performing multiple remote I/O operations,
placing transaction processing close to system resources.
Server Classes
Server classes provide the following benefits:
• You can minimize use of system resources—for example, processes and file opens—
because server classes are shared and highly utilized.
• You can maximize performance because server classes allow multiple copies of
server processes to run concurrently in multiple processors.
• Based on configuration settings determined by the system manager or operator, the
PATHMON process can dynamically create additional server processes within the
server class to maintain acceptable throughput as the workload increases.
• By temporarily freezing and stopping the server class and changing configuration
parameters, the system manager or operator can adjust the number of servers that are
active at any one time to suit response-time requirements.
• The system manager or operator can balance the workload over multiple processes
and across multiple processors, which provides fault tolerance in addition to load
balancing: if a processor fails, the server class is still available.
Requesters
The Pathway application programming environment provides two programming
interfaces for requesters:
• The Pathsend application program interface (API), provided in the NonStop TS/MP
product
• The SCREEN COBOL language, provided in the Pathway/TS product
Requesters written using these two interfaces are briefly described in the following
paragraphs. In addition, other Tandem products are available to assist you in writing
requesters and clients that communicate with Pathway servers. These products include
the Remote Server Call (RSC) product and the Pathway Open Environment Toolkit
(POET) for workstation clients and the Extended General Device Support (GDSX)
product for front-end and back-end processes.
Section 2, Designing Your Application, provides additional information about how
Pathsend requesters, SCREEN COBOL requesters, RSC and POET clients, and GDSX
processes can be used in Pathway applications.
Pathsend Requesters
The Pathsend procedure calls and the LINKMON process allow Guardian processes to
access Pathway server classes. The Pathsend procedures bring the benefits of Pathway
server classes to a wide range of requesters, providing flexibility in application design.
They also provide high performance for requesters that do not need a complex,
multithreaded interface to terminals or intelligent devices. Finally, they provide support
for both context-free and context-sensitive servers.
Pathsend requesters support the following features:
• Use of the TMF subsystem
• Automatic retry of I/O operations to a server process if the primary process of a
server process pair fails, through use of the Guardian file system
The Extended General Device Support (GDSX) product provides a set of “pseudo
Pathway procedures” that allow you to call Pathsend procedures in the user-supplied part
of a GDSX program. A GDSX process can thus function as a Pathsend requester. GDSX
processes can communicate with devices by means of a number of data communications
protocols, as described in the Extended General Device Support (GDSX) Manual.
Pathsend Processes
In writing programs to run as Pathsend processes, you use a set of procedures that are
part of the Guardian procedure library. These procedures allow you to send request
messages to server processes within a server class and to receive the servers’ replies.
You can call the Pathsend procedures from programs written in C, C++, COBOL85,
Pascal, the Transaction Application Language (TAL), or the Portable Transaction
Application Language (pTAL).
Pathsend procedure calls are provided for both context-free and context-sensitive
communication with servers. A context-free server accepts a single message from a
requester, performs the requested tasks, and issues a single reply to respond to the
requester. After the reply message is issued, the server retains no information (context)
that can be used in subsequent requests. A context-sensitive server engages in a
multiple-message communication, or dialog, with a requester. Between messages, the
server retains information (context) pertaining to the dialog.
The use of the Pathsend procedure calls is described in Section 3, Writing Pathsend
Requesters, and their syntax is described in Section 5, Pathsend Procedure Call
Reference. Design considerations related to context-free and context-sensitive servers
are discussed in Section 2, Designing Your Application.
LINKMON Processes
LINKMON processes, together with the PATHMON process, perform link-management
functions for Pathsend processes. (A link is a connection to a server process.) A
LINKMON process executes in each processor, or CPU, of a system. As a link manager,
a LINKMON process is responsible for managing links on behalf of all the Pathsend
processes executing in its processor.
If you have the NonStop TS/MP software installed on your system, a LINKMON
process is automatically started in each processor. You cannot start a LINKMON process
with a RUN command.
Figure 1-1 shows a sample Pathsend environment in which Pathsend processes and a
LINKMON process reside in the same processor on system \A. The LINKMON process
sets up communication to the Pathway server class on system \B through the PATHMON
process controlling the server class. The role of the PATHMON process in establishing
this communication is described in Section 3, Writing Pathsend Requesters.
As shown in the figure, only server-class control information is passed to the
LINKMON process; the application data moves directly from the Pathsend requester
process to the server process.
CPU X
Pathsend
Requester
Control
Control Data
Information
Information Server Class X
LINKMON Server
Control Information
004
Although you can obtain some information about LINKMON processes through the
PATHMON process (by means of PATHCOM or SPI), LINKMON processes are not
managed as PATHMON-controlled objects. For details about management of
LINKMON processes, refer to the NonStop TS/MP System Management Manual.
Client/Server Capabilities
The Remote Server Call (RSC) product and the Pathway Open Environment Toolkit
(POET) bring client/server capabilities to the Pathway environment by allowing you to
move requester functions to a workstation. RSC allows client programs residing on a
workstation to access Pathway server classes in any of three different ways:
• Through a Pathsend requester provided by RSC; this requester works with the
LINKMON process.
• Through a special intelligent device support (IDS) requester supplied with RSC; this
requester works with the terminal control process (TCP) provided in the Pathway/TS
product.
• Through an IDS requester that you develop yourself in the SCREEN COBOL
language; this requester works with the TCP provided in Pathway/TS.
RSC also allows requesters to access Guardian processes directly. To facilitate access to
servers and Guardian processes, RSC consists of multiple components within both the
workstation and Tandem computer environments.
The Pathway Open Environment Toolkit (POET) provides tools for developing RSC
clients for the Microsoft Windows environment. These tools include a simplified
programmatic interface, name mapping, and data conversion mapping.
For information about RSC, refer to the Remote Server Call (RSC) Programming
Manual. For information about POET, refer to the Pathway Open Environment Toolkit
(POET) Programming Manual.
Application
SNA
SNAX/APN
PATHMON
Server Class
Request
Pathsend Server
LINKMON
Requester
Reply
Database
CDT017
In this scenario, clerks at an order entry office enter their transactions into terminals
attached to an IBM system. Processing of the transactions, however, requires access to a
database that is linked to a Tandem NonStop system.
1. The clerks enter transactions into their terminals and initiate processing by pressing
function keys. Any preliminary checking or editing is performed by the application
on the IBM system.
2. The IBM system collects the transactions and sends them to a Pathsend requester
located on the Tandem NonStop system. The transactions are sent by using a high-
speed networking product; for example, Tandem’s SNAX Advanced Peer
Networking (SNAX/APN) product.
3. The Pathsend requester accepts the transactions for the Tandem NonStop system and
formats a request message containing the name of the server class and the data
needed by the server to complete its work. The TMF transaction begins.
4. The Pathsend requester forwards the request message to the LINKMON process by
calling the Pathsend SERVERCLASS_SEND_ procedure. (This is a context-free
message.)
5. If the LINKMON process does not have a link to the specified server class, the
LINKMON process asks the PATHMON process for a link to a server process in the
server class. The PATHMON process replies that a server process is available. If the
LINKMON process already has a link to the server class, this step is not performed.
6. The LINKMON process forwards the request to the server process by using
NonStop Kernel interprocess communication.
7. The server process receives and reads the request message.
8. Executing NonStop SQL/MP statements in its program, the server process accesses
the database and updates the appropriate information.
9. The server process formats a reply message, which verifies that the information has
been updated, and replies to the LINKMON process by using NonStop Kernel
interprocess communication.
10. The LINKMON process receives and forwards the reply messages to the Pathsend
requester. The TMF transaction ends.
11. The Pathsend requester returns the reply messages to the IBM system, where the
application displays the information on the terminal screens.
Designing Transactions
The first step in developing a Pathway application is to identify and define the
transactions that your application will process. To do this, you isolate the business tasks
you plan to automate, analyze the flow of information within those tasks, list the
transactions that result from the analysis, and then identify the various components of
the transactions. After these tasks are performed, you protect each transaction, and
therefore the integrity and consistency of the database, with the Transaction
Management Facility (TMF) subsystem.
3. Accept: 4.
\WHS
—Check quantity available
— List of ordered items
for delivery of each Inventory
— Quantity of each item
ordered item. Data
5. Accept: 6.
7. Accept: 8.
\WHS
— Subtract quantity ordered
— Confirmation from quantity available. Inventory
Data/
Shipping
Data
9, 10.
\REG
— Update customer balance.
— Record order data. Customer
Credit Data/
Order Data
11.
\CORP
— Record order information.
Accounts
Receivable
Data
12.
\WHS
— Record order information.
Inventory
Data/
Shipping
Data
CDT028
Order-ID
Order-ID
Customer Information
1 Customer
Customer-ID
Assemble Order Header
Customer-Details Header
Quantity Ordered
Order Cost
3
Display Totals
Confirm Order Complete Order Totals
"Done" Order 4
1 Assemble information for order header; display at terminal and add to database;
optionally change customer information.
2 Accept items in order, check item availability and customer credit; display item details
at terminal and add to database.
3 Display totals at terminal and get confirmation; update item quantity and customer balance;
add totals to database; inform related applications about order.
4 Later, when order is shipped and customer billed, add shipping and invoice numbers to database.
CDT029
Protecting Transactions
After listing and grouping the components of the Enter Sales transaction, you protect the
integrity of each transaction, and ultimately the consistency of the database, with the
TMF subsystem. The following pages outline how to integrate the TMF subsystem with
your business transactions. For information about the overall features of the TMF
subsystem, including database file recovery and audit trails, refer to the Introduction to
NonStop Transaction Processing.
COBOL85, C, COBOL85, C,
C++, Pascal, or C++, Pascal,
TAL TAL, ...
Requester Server
CDT032
To illustrate this assertion, consider a situation where a transaction fails after it changes
the customer’s balance, records the order information, and records the order invoice, but
before it records the shipping information. In this scenario, the customer is going to be
billed for an order never received. Consequently, your basic criterion for database
consistency is as follows: all database updates that are related to the order must be part
of one TMF transaction.
Any record modified or inserted by a database operation that is protected by the TMF
subsystem is locked and unavailable to other transactions until the initial transaction
ends successfully. This type of locking protocol means that you always have a design
tradeoff—consistency versus concurrency—with respect to locking records that are
actively accessed by the application. If records are locked too early, other transactions
cannot access them and the application’s concurrency (its ability to process many
transactions at the same time) suffers.
As the Enter Sales transaction demonstrates, all of the data collection and validation
operations can happen before you begin the TMF transaction—although some
revalidation may be done again as part of the transaction. Assembling the order header
and assembling the order involve reading records in the database but not changing the
records. The rest of the operations change the database and should all be done within a
TMF transaction.
As a general rule, you should design the application’s transactions to maintain
consistency under all circumstances. After the application is installed and running
successfully, you can look for ways to improve its concurrency.
Aborting Transactions
If the requester or the server program detects a problem during the processing of a TMF
transaction, the requester or server causes the transaction to be aborted with a special
procedure call or statement (for example, a call to ABORTTRANSACTION in a
Pathsend program). For requesters, the statement that aborts a transaction is executed in
lieu of the statement that ends a transaction; for example, in a Pathsend program the
requester either completes the transaction with a call to ENDTRANSACTION or causes
it to be backed out, because of an error, with a call to ABORTTRANSACTION.
In the past, program designs typically assigned the task of aborting transactions to
requesters. Current program design often assigns that task to servers. Servers abort
transactions and inform the requesters of those actions, thus ensuring protection of data.
The aborting of transactions by servers is described further under Designing Server
Programs, later in this section.
The TMF subsystem backs out aborted transactions by using information contained in
the TMF audit-trail files. For more information about transaction backout and audit-trail
files, refer to the NonStop TM/MP Application Programmer’s Guide.
Logical Design
During the logical design process, you determine which classes of data must be
maintained by your application and identify the relationships that exist between the
classes. Each class of data names something that the database will store information
about. For example, in an application that processes sales orders, orders is a class of
data and order-items is a relationship between a particular order and the inventory
items within the order. These data classes and relationships generally become records in
files accessed by the application.
After specifying data classes, you list the attributes (data items) for each class of data.
For example, some of the attributes are order-ID, cust-ID, and order-total.
These attributes become fields in the records of the database. After specifying attributes
for data classes, you diagram the relationships between each of the files in the database
and then normalize your database files. To normalize files is to ensure, at a minimum,
that:
• There are no repeating fields.
• Data is dependent on the entire key (a unique element) of a field.
• Data is dependent on nothing but the key.
Physical Design
You undertake the physical design of your database by selecting the appropriate file
types and record keys for each of the files in the database. Whether you are using the
NonStop SQL/MP software or the Enscribe software as your database management
system (DBMS), these file types can be classified as key-sequenced, relative, entry-
sequenced, or unstructured:
Key-sequenced Each record in the file has a primary key and up to 255 alternate
keys. The primary key is a field or combination of fields within the
record.
Relative Each record in the file has a unique record number, which is the
primary key, and can have up to 255 alternate keys. The record
number is a unique value that corresponds to the physical location
of the record within the file.
Entry-sequenced Each record in the file has a unique record number and can have up
to 255 alternate keys. The record number corresponds to the order
in which a record is stored in the file. The primary key is the
relative byte address of the record.
Unstructured Each record in the file has a unique record number that can be used
as the primary key. Alternate keys are not supported.
Although the file type you choose depends on your application requirements, generally
you should choose key-sequenced files for a database that will be accessed and
maintained by a Pathway application. Key-sequenced files provide more flexibility than
the other file types.
Database Managers
Databases supporting Pathway applications can run under either the NonStop SQL/MP
relational database management system or the Enscribe database record manager. Both
of these products support the creation and use of large databases capable of operating in
local or distributed systems.
The NonStop SQL/MP (Structured Query Language/MP) product is both a database
management system (DBMS) for production environments and a relational database
management system (RDBMS) for decision-making in an information-center
environment. The NonStop SQL/MP product allows you to think about and represent
files in the database as a collection of similarly structured lists. For more information
about designing NonStop SQL/MP databases, refer to the NonStop SQL/MP Reference
Manual.
The Enscribe database record manager provides a record-at-a-time interface between
Pathway servers and your database. For more information about designing Enscribe
databases, refer to the Enscribe Programmer’s Guide.
IDS Requesters
Standard SCREEN COBOL requesters are screen oriented; they send data back and
forth between the Working-Storage Section of the program and a terminal’s display
screen by way of screen templates defined in the Screen Section. Standard SCREEN
COBOL requesters use SCREEN COBOL ACCEPT and DISPLAY statements in the
Procedure Division to interact with display terminals.
SCREEN COBOL requesters that employ the IDS facility within the TCP send data
back and forth between the Working-Storage Section and an intelligent device (or a
front-end process that controls the device) by way of message templates defined in the
Message Section. IDS requesters use SCREEN COBOL SEND MESSAGE statements
and their associated REPLY clauses in the Procedure Division to interact with the
intelligent devices or front-end processes.
Although IDS sends and receives data through Message Section templates instead of
Screen Section templates, the TCP still provides:
• Link management for access to Pathway server classes
• TMF support to ensure transaction protection and database integrity
Pathsend Requesters
As an alternative to writing SCREEN COBOL requesters, you can write Pathsend
requesters in C, C++, COBOL85, Pascal, TAL, or pTAL. In such requesters, you use
Pathsend procedure calls to communicate with Pathway servers. The LINKMON
process manages links to your server processes on behalf of Pathsend requesters.
Design Considerations
Pathsend requesters are a good choice for your applications if you need to do the
following:
• Take a high volume of transactions from a limited number of devices. In this
scenario, there are relatively few requester processes, the requesters are busy, and
configuration and management is minimal.
• Access servers that are shared by Pathway requesters and applications other than
OLTP applications: for example, a security checking server or a logging server. If
such servers are used infrequently or if the workload varies, server processes can be
automatically deleted when not needed and restarted through the PATHMON
process when needed again.
• Access servers from environments containing a mix of online transaction processing
and batch processing: that is, environments where the same set of servers handle
both online requests and requests from batch applications such as NetBatch Plus
processes.
• Write nested servers, which act as requesters by making requests to servers in other
server classes, perhaps server classes managed by a different PATHMON process.
• Write context-sensitive servers, which are discussed later in this section under
“Designing Server Programs.”
Pathsend procedure calls give you more flexibility than WRITEREAD calls for server-
to-server communication. The application gets all the advantages of server classes,
including advantages not readily available with WRITEREAD; for example, load
balancing, adjusting the number of servers to fit response-time requirements, and
configuration and operations management. You can use the Pathsend procedure calls in
C, C++, COBOL85, Pascal, TAL, and pTAL programs.
The Pathsend procedures and the LINKMON process, however, do not provide
multithreading, fault tolerance, device configuration, or operations management for
requesters. Therefore, if you need these capabilities in a Pathsend requester, you must
provide the programming for them.
In addition, Pathsend procedure calls that send messages to server classes must be
protected by the TMF subsystem to ensure data integrity in your Pathway application.
The Pathsend procedures and the LINKMON process do not support the checkpointing
of Guardian interprocess message synchronization IDs. This lack of checkpointing
support is an important consideration when writing fault-tolerant requester programs
that do not use the TMF subsystem. Section 3, Writing Pathsend Requesters, provides
more information about writing fault-tolerant Pathsend programs.
The Pathsend procedures allow you to indicate a specific timeout value for each message
sent to a server class. For example, if you perform SERVERCLASS_SEND_ calls to
local and remote systems, you can specify shorter timeout values for the local sends and
longer values for the remote sends.
You can restrict access to Pathway server classes by Pathsend requesters by having the
LINKMON process perform security authorization checks on each send operation.
The Pathsend procedures and the LINKMON process log error messages in the event of
a processing failure. Your Pathsend requester can check for these errors and perform
recovery actions.
Program Structure
The example in Example 2-1 outlines a Pathsend requester program written in TAL.
This program handles data entry for the order-processing application introduced at the
beginning of this section.
Note. The program in Example 2-1 illustrates program structure only; it is not a complete
program. For an example of a complete, running Pathsend requester program, refer to
Appendix B, Examples.
Filenum:=SCSendOpNum
CALL AWAITIOX ( FileNum, Countread, Tag, -1D ); Wait for completion of send
operation
CALL FILEINFO ( FileNum, SendError ); and get the resulting send error.
classes by using either the Pathsend API and the LINKMON process or the terminal
control process (TCP) provided in the Pathway/TS product. If the TCP is used, it can
route a request message to a Pathway server by using either the intelligent device
support (IDS) requester supplied as part of RSC or an IDS requester that you develop
yourself. The TDP can also send request messages from a workstation to a Guardian
process.
The Pathway Open Environment Toolkit (POET) provides tools for developing RSC
clients for the Microsoft Windows environment. These tools include a simplified
programmatic interface, name mapping, and data conversion mapping.
For information about designing and coding requesters with the RSC product, refer to
the Remote Server Call (RSC) Programming Manual. For information about using the
POET product, refer to the Pathway Open Environment Toolkit (POET) Programming
Manual.
PATHMON
Server Class
General Device
NonStop
TM/MP
NonStop
SQL/MP
Database
CDT126
When developing a front-end process using GDSX, consider the following points:
• A GDSX front-end process is a good choice when a specified data communications
protocol is not supported by the Pathway TCP but is supported by GDSX.
• A GDSX front-end process is also a good choice when performance is critical.
SCREEN COBOL might not be efficient enough to handle a large amount of
application function.
• A GDSX process can be designed to be context-sensitive, through use of the
context-sensitive Pathsend pseudo-procedures.
• GDSX processes are managed either through the Subsystem Control Facility (SCF)
interactive interface or through a management application program using the
Subsystem Programmatic Interface (SPI).
For further information about designing and coding GDSX processes, refer to the
Extended General Device Support (GDSX) Manual.
After you code and compile your server program, the server object code and library code
are shared among all processes of the same server class.
Design Considerations
Before structuring and coding a server program, you should consider some design issues
that can affect server performance and efficiency. First, you must decide whether to
program single-threaded or multithreaded servers. Additionally, you should be aware of
the issues related to context-free versus context-sensitive servers, server packaging,
nested servers, aborting transactions, process pairs, early replies, and audited and
unaudited servers. You might also consider the use of a GDSX back-end process.
program or in the database. When you program a server to be context-free, you code the
server to be independent of its previous request. In essence, every request must be
treated as if it were the first request received by the server.
SCREEN COBOL and the TCP support only context-free servers. However, if you use
Pathsend requesters, you can use either context-free or context-sensitive servers. In most
cases, it is preferable to use context-free servers. However, context-sensitive servers
might be a better solution if you need to do one of the following:
• Retrieve large blocks of information (larger than 32 KB) from a database
• Browse a database and repeatedly get the next record, saving the cursor position
Context-sensitive servers require additional programming for both requester and server.
The requester must first establish a dialog with a server class and then send messages
within the dialog. All messages in a dialog will be sent to the same server process in the
server class. Programming details are explained in Section 3, Writing Pathsend
Requesters, and Section 4, Writing Pathway Servers.
Nested Servers
A server written in C, C++, COBOL85, Pascal, TAL, or pTAL can use the Pathsend
procedures to send a request message to a server in another server class and receive a
reply. In such a case, the server is acting as a requester. Servers communicating with
each other in this manner are called nested servers.
For example, consider a situation where a requester on one node requires the services of
two server classes on another node. Instead of sending to server class A, waiting for a
reply, and then sending to server class B, the requester could send to server class A, and
server class A could send to server class B, get the response, and then reply to the
requester. This use of nested servers reduces the number of messages sent across data
communications lines and enables application logic to be distributed near the resources
it manages.
Consider the following when considering the use of nested server programs:
• Single-threaded servers that send to other server classes can cause process
deadlocks. A process deadlock is a situation in which two processes cannot proceed
because each is waiting for a reply from the other.
For example, if a process in server class A sends a request to server class B and the
process in server class B then sends a request to server class A, a deadlock might
occur. Even if there is more than one process in server class A, there is no guarantee
that the second request would not be sent to the same process that sent the original
request.
To avoid this problem, the server program for server class A should keep a read
operation posted on $RECEIVE and wait for completion of either the send operation
or the read operation. Although this multithreading increases the complexity of the
program, it is necessary in order to prevent deadlock.
• Single-threaded servers that send to other server classes can cause low server
utilization in the same way that any single-threaded process that calls another
process can: the server process sending the request is idle until it receives a reply
from the server to which it sent the request.
• Single-threaded servers that send to other server classes can, therefore, result in
longer queues for a server class, and these longer queues can affect application
performance.
Aborting Transactions
A request sent to the server can have one of three outcomes:
• All the work for the request was completed successfully.
• None of the work for the request was completed.
• The work for the request was only partially completed.
In the first case, the requester can commit the transaction. In the second case, the
requester can commit the transaction and then retry it. In both of these cases, the
information in the server’s reply is sufficient to ensure the integrity of the transaction.
However, if the transaction work was only partially completed, as in the third case, the
server needs to ensure that the transaction is not committed, so that the incomplete work
can be backed out. To ensure transaction backout, the server should call the
ABORTTRANSACTION procedure after it reads the server’s request and before it sends
its reply. A call to ABORTTRANSACTION by the server does not end the transaction—
only the requester can end it—but it ensures that the transaction is aborted. The
requester should then call either ABORTTRANSACTION or ENDTRANSACTION
after it replies to the server. (If the requester calls ENDTRANSACTION in this
situation, the ENDTRANSACTION call returns an error because the transaction has
already been aborted. However, either call ensures that the resources associated with the
transaction are released.)
Early Replies
You should program your servers so that when a server process reads a request message,
it completely processes the request before it replies to it. This practice is often called the
no-early-reply rule. If you do not follow this rule, the server process loses the TMF
transaction identifier it requires to finish processing a transaction. After the reply, any
further attempts to lock, write, or delete records in the same audited files will fail. In
addition, failure to follow the no-early-reply rule can create a queue of incomplete
transactions for single-threaded servers. The queue occurs when the requester, which has
been replied to prematurely, sends one more request to the server and the server
increases its potential queue by one request. A single-threaded server queue can result in
poorer performance for the application system.
Server Class
GDSX Comm
Server
Process
CDT129
For further information about designing and coding GDSX processes, refer to the
Extended General Device Support (GDSX) Manual.
PROGRAM-ID. ORDER-SERVER.
ENVIRONMENTAL DIVISION.
CONFIGURATION SECTION.
SPECIAL NAMES. Defines source library file
FILE “$src.srvlib.orderlib” IS COBOL-LIB. names.
FILE “$obj.srvlib.ocmgrobj” IS COMM-MGR.
SELECT LAST-ID
ASSIGN TO $DATA.ORDER.LASTID
ORGANIZATION IS RELATIVE
ACCESS IS SEQUENTIAL
RECORD KEY IS WS-LASTID-REL-KEY
FILE STATUS IS FILE-STAT IN WS-FILE-INFO.
.
.
.
DATA DIVISION.
01 ORDER-MSG.
.
.
.
01 ORDER-REPLY.
.
.
.
01 ERROR-STATUS-REPLY.
.
.
.
FD LAST-ID
RECORD CONTAINS 12 CHARACTERS
LABEL RECORDS ARE OMITTED
01 LAST-ID-RECORD.
02 LAST-ID PIC 9(12).
.
.
.
DO-REQUEST.
IF function-code OF
order-check-msg = ORDER-CHECK
PERFORM DO-ORDER-CHECK
ELSE IF function-code OF
order-check-msg = ORDER-COMIT
PERFORM DO-ORDER-COMIT
ELSE PERFORM BAD-REQUEST IN ERROR-MGR.
DO-ORDER CHECK.
.
.
.
requests more smoothly. However, because the TMF subsystem guarantees only the
consistency of the database and not fault tolerance for other operations (such as
messages sent over data communications lines), your application might need to use
process pairs along with TMF level recovery.
TMF programming is described in the NonStop TM/MP Application Programmer’s
Guide. The Guardian Programmer's Guide discusses process pairs and checkpointing.
The following paragraphs provide information specific to the use of these features in a
Pathsend program.
Fault-Tolerant Programming
The following paragraphs describe issues related to the use of Pathsend procedure calls
in fault-tolerant programs and discuss the appropriate levels of recovery that your
application can perform after takeover by a backup Pathsend process.
For Pathsend calls that are protected by the TMF subsystem, on takeover the new
primary process must determine whether the current transaction ended or aborted. If the
transaction aborted, the new primary process can retry the entire TMF transaction. That
is, the backup process can begin a new TMF transaction and reissue the Pathsend calls.
This retry mechanism relies on the TMF subsystem’s capability to back out all work that
the server process carried out on the original request.
For Pathsend calls not protected by the TMF subsystem, the proper recovery depends on
the nature of the request:
• Retryable requests that are not protected by the TMF subsystem can be repeated
many times without adverse effect. An example of this kind of request is a request to
read a bank account balance. Requests to retrieve data from a database are retryable
requests.
For these requests, on backup takeover, the backup can simply reissue the request.
The request could be processed more than once by different server processes without
resulting in data corruption.
• Nonretryable requests that are not protected by the TMF subsystem cannot be
processed more than once without having adverse effects. An example of this kind
of request is a request to subtract $50.00 from a bank account balance.
For these requests, there is no way for the server class to detect duplicate requests;
Pathsend does not support checkpointing of Guardian sync IDs. Therefore, the
backup process cannot send the request again because the operation might be
processed more than once. Because the request cannot be safely retried, the
Pathsend process cannot ensure that the request gets processed at least once.
Because the request thread suspends while a checkpoint is in progress, checkpointing
large buffers can affect the performance of your application. You should checkpoint the
entire context of nonretryable requests, but avoid checkpointing unnecessary data: for
example, data from retryable requests or data that has not changed since the last
checkpoint.
The LINKMON process opens servers that are configured with the TMF parameter OFF
with a sync depth of 1, and I/O operations to the server process are automatically retried
if the primary process of a server process pair fails.
See the Guardian Programmer’s Guide for detailed information about checkpointing
and sync IDs.
Security Issues
There are two levels of security to consider for Pathsend processes: security at the
network level and security at the server-class level. In addition, if you are using the
Remote Server Call (RSC) product, you can provide additional security to control access
to servers.
Network Security
If your Pathsend process is to access a Pathway server class on another system, the user
ID of the PATHMON process controlling the server class has to have corresponding user
IDs and remote passwords with the following systems:
• The system where the requesting process is running
• The system where the PATHMON process is running
• The system where the server class is running
This level of security is required because the LINKMON process must be able to open
the PATHMON process (to make link requests); the LINKMON process must be able to
open the server processes (to send user requests); and the PATHMON process must be
able to open the server processes (to send startup messages). All of these opens are
performed with the PATHMON user ID.
Note. The user ID of the Pathsend process need not have remote passwords to the
PATHMON system or to the server-class system to access the server class. Moreover, the
Pathsend-process user ID need not be known on the PATHMON or server-class systems.
Server-Class Security
LINKMON processes perform authorization checks on each server-class send operation
to make sure that the user ID of the Pathsend process at the time of the send conforms to
the server class’s OWNER and SECURITY attributes. You set these attributes for server
classes at configuration time if those server classes are to be accessed by Pathsend
processes.
The NonStop TS/MP System Management Manual describes how to set the SERVER
OWNER and SERVER SECURITY parameters in PATHCOM.
Resource Utilization
On a requester’s first SERVERCLASS_DIALOG_BEGIN_ call, an extended segment is
added to the requester’s segment space for use as a workspace. This segment can be up
to 64 KB in size. It is deallocated when the requester process is terminated.
abort occurs. In either case, the requester should abort the transaction when it receives
an error reply.
If the server is shut down by the operator, the following occurs:
• For dialogs that currently have an I/O operation outstanding, the I/O operation is
first completed, and action is then taken depending on the error value returned:
• If the I/O operation is completed with an error value of FEOK (0), then the
FEOK value is passed back to the requester along with all user data.
• If the I/O operation is completed with an error value of FEContinue (70), the
requester receives error 233, FEScError, and SERVERCLASS_SEND_INFO_
returns Pathsend error 929, FEScDialogAborted. No user data is passed back to
the requester.
• If the I/O operation is completed with any other file-system error, the requester
receives error 233, FEScError, and SERVERCLASS_SEND_INFO_ returns the
file-system error that occurred. No user data is passed back to the requester.
After completion of the I/O operation, the dialog is aborted and the LINKMON
process closes the server process. The server process should interpret the close
operation as a dialog abort.
• For dialogs that have no I/O operation outstanding, the dialog is aborted and the
LINKMON process closes the server process. The server process should interpret
the close operation as a dialog abort.
When writing requesters as process pairs with or without the TMF subsystem, note that
it is not possible to checkpoint dialogs. The dialog and the transaction, if any, are
aborted when the requester fails.
If you are using the Transaction Management Facility (TMF) subsystem, you should
also be familiar with general programming guidelines and considerations for TMF
servers, as described in the NonStop TM/MP Application Programmer’s Guide.
When a requester fails, all transactions initiated by that requester but not yet completed
at the time of the failure are automatically aborted.
For more information about the checkpointing strategy used by the TCP, refer to the
Pathway/TS TCP and Terminal Programming Guide.
Consideration for Servers Used With Remote Server Call (RSC) Clients
Some Remote Server Call (RSC) clients are written to check for an integer reply-code
value in the first two bytes of the server’s reply message. If the RSC client program calls
the RscSetOption function to set TMF_OPTION to either 2 (RSC_END_TRANS) or 3
(RSC_BEGIN_END_TRANS), the RSC transaction delivery process (TDP) monitors
this reply code from the server to determine whether the client should end the
transaction. The reply code is a feature that can allow optimization to reduce network
traffic. For further information about use of the RSC reply code, refer to the Remote
Server Call (RSC) Programming Manual.
Nested Servers
A Pathway server can use Pathsend procedure calls to make requests to servers in other
server classes. In such a case, the server is acting as a server with respect to the requester
that sends requests to it, but it is also acting as a Pathsend requester with respect to
another server. Servers communicating with each other in this way are known as nested
servers. Because they are Pathsend programs, nested servers must be written in C, C++,
COBOL85, Pascal, pTAL, or TAL.
If you use nested servers, you should try to prevent queues of requests from developing,
because a single-threaded server that calls Pathsend procedures waits for a response
before proceeding. Servers usually just wait for disk I/O, a high-priority activity. Waiting
for a low-priority server might tie up system resources.
For information about how to code the requester functions of nested servers (that is, how
to use the Pathsend procedure calls), refer to Writing Pathsend Requesters. An example
of a nested server, called PATHSRV, is given in Example B-2 on page B-53.
information about use of the Enscribe locking facilities, refer to the Enscribe
Programmer’s Guide.
Servers do not reply to request messages until all work for the request has been
completed. The contents of the reply message indicate the outcome of the request, which
is one of the following:
• All the work for the request was completed successfully.
• None of the work for the request was completed.
• The work for the request was only partially completed.
In the first case, the requester can commit the transaction. In the second case, the
requester can commit the transaction and then retry it. In both of these cases, the
information in the server’s reply is sufficient to ensure the integrity of the transaction.
However, if the transaction work was only partially completed, as in the third case, the
server needs to ensure that the transaction is not committed so that the incomplete work
can be backed out. To ensure transaction backout, the server should call the
ABORTTRANSACTION procedure after reading the server’s request and before
sending its reply. A call to ABORTTRANSACTION by the server does not end the
transaction—only the requester can end it—but such a call imposes the requirement that
the requester also call ABORTTRANSACTION, rather than ENDTRANSACTION,
after the requester’s reply.
proceed because they are each waiting for the other to release a lock.) One way to
cope with deadlock is to use timeout.
In addition, your requester program must use the necessary transaction-control
procedure calls or statements to begin and end the transaction and to abort or restart the
transaction if necessary.
Note. Whenever your server begins work on a new queued message, it must call the
ACTIVATERECEIVETRANSID procedure to change the current transaction identifier, as
described in the NonStop TM/MP Application Programmer’s Guide.
Locking Records
If your application uses the TMF subsystem, your servers must follow the TMF locking
rules. Locking gives the TMF subsystem the control required to ensure that transactions
are presented with a consistent view of the database. With respect to the locking of
records, you must consider the following aspects of your application:
• Repeatable reads.
• Errors that result from locks being held by the transaction identifier instead of the
process identifier and OPENID of the file opener.
• Errors that result from reading deleted records.
• Batch updates by a transaction that acquires a large number of locks. You should use
file locks instead of record locks for batch updating.
For details about how to handle these aspects of your application, refer to the
NonStop TM/MP Application Programmer’s Guide.
Example 1
Some logical transactions do not have to be identified as TMF transactions. For
example, a logical transaction locates a single record and displays the record contents.
Because this transaction changes nothing in the database, it does not affect consistency
and does not have to be a TMF transaction.
Example 2
A data-entry transaction with a group of accesses that insert new data into the database
should be a TMF transaction. For example, a logical transaction records receipt of some
items for a stockroom by accepting the stock codes and quantity received from a data-
entry operator and then updates the records (in an audited file) for the items.
Because the first guideline applies, you should arrange to begin a TMF transaction after
the data is accepted and to end the transaction after the last record is updated. The TMF
subsystem ensures that all changes resulting from the one operator entry either are
permanent or are backed out in case the transaction aborts. Note that because any change
to an audited file requires a transaction identifier, this example is also true if the
transaction inserts only one record in the file.
Example 3
An update transaction should be a TMF transaction. For example, assume a logical
transaction does the following:
1. Accepts a specification from the operator
2. Performs the equivalent of an inquiry operation to find the data that will be updated
3. Releases the locks obtained for the inquiry
4. Displays the data for the operator
5. Accepts modifications to the displayed data (saving a copy of the original displayed
data)
6. Performs the inquiry a second time
7. Verifies that the results of the first inquiry and the second inquiry are the same
8. Writes the modified record to the database
The transaction should be implemented as two TMF transactions. The first should begin
after the data is accepted and should end (rather than release the locks) after the last
record is read. The second should begin after the modifications to the displayed data
have been accepted and should end after the last modified record is written to the
database. If the inquiry part of the transaction is just a single read, however, there is no
need for the first inquiry to be part of a TMF transaction.
Transaction Deadlocks
An application that uses the TMF subsystem might hold more record locks and hold
them longer than it would without the TMF subsystem because:
• Implicit locks are held on the keys of deleted records.
• Implicit locks are held for inserted records.
• Locks are held until the transaction is either committed or aborted and backed out.
The increased locking could cause new possibilities for transaction deadlock. If
transaction deadlock might become a problem, consider implementing the methods for
coping with deadlock discussed in the Guardian Programmer’s Guide.
Server Timeouts
Another kind of timeout problem that can occur for servers being debugged is related to
the configured timeout value for the server class (set in the PATHCOM SET SERVER
TIMEOUT command). This timeout covers only the time taken by the I/O to the server
process. If a timeout occurs, the LINKMON process or the TCP cancels the send
operation, and the Pathsend call or SCREEN COBOL SEND request fails. Changing the
value of the timeout parameter during debugging might help prevent this problem from
occurring.
Dialog Control
The server controls the dialog by means of a file-system error code it returns in its reply.
Table 4-1 shows the effect of the reply error codes.
Use of error values other than 1 (FEEOF) is not recommended. Any other error value
causes the LINKMON process to close the link to the server and return it to the
PATHMON process. If there are no other links to that server process, the server process
is deleted; then, if that process is later needed to service subsequent requests, it will need
to be re-created, thereby affecting system performance. It is recommended, therefore,
that servers always reply with FEEOF to abort a dialog. The server should return any
additional information in the message itself rather than in the reply code.
Whether the current TMF transaction, if any, is also aborted when an error value is
returned depends on the setting of dialog flag bit 14 in the call to
SERVERCLASS_DIALOG_BEGIN_, as explained in the following subsection.
Continuing a Dialog
To indicate that the dialog should continue, the server replies to a message in the dialog
with an error value of FECONTINUE (70).
Aborting a Dialog
The server can abort a dialog by replying to any message in the dialog with an error
value of FEEOF (1).
Terminating a Dialog
After the dialog has started, either the requester or the server can abort it, but only the
server can end it. To end the dialog, the server replies to a message in the dialog with an
error value of FEOK (0).
either FEOK (0) or FEEOF (1); these values direct the LINKMON process to release the
link for re-use.
If a processor or network failure occurs, it is possible to have a dialog abort but not
receive a Pathsend dialog abort message. Therefore, to monitor all aborted dialogs, your
server must also monitor CPU down, remote CPU down, and loss of communication
with network node system messages if it uses FILE_GETRECEIVEINFO_, or CLOSE
system messages if it uses CRE_Receive_Read_ or the COBOL85 or FORTRAN
language. The server should treat such messages as dialog aborts.
Servers can monitor CPU down, remote CPU down, and loss of communication with
network node system messages by calling the Guardian procedures MONITORCPUS
and MONITORNET, which are described in the Guardian Programmer’s Guide.
It is also possible to get Pathsend dialog abort messages that do not represent actual
aborted dialogs. A server can receive such a message if the requester calls
SERVERCLASS_DIALOG_BEGIN_ and then cancels the message. In that case, the
LINKMON process sends the Pathsend dialog abort message even though the server
might not have received the first message in the dialog. Similarly, if the requester calls
SERVERCLASS_SEND_ with the nowait option and then cancels the operation before
being notified of completion of the operation through the AWAITIOX procedure, the
server receives the Pathsend dialog abort message even if it has already replied to the
last send operation.
A cancel operation can also occur if the requester abends while a server-class send
operation is in progress, whether or not the send operation was invoked with the nowait
option.
The procedures whose names begin with SERVERCLASS_DIALOG_ are used for
requests to context-sensitive servers. The SERVERCLASS_SEND_ procedure is used
for requests to context-free servers. The SERVERCLASS_SEND_INFO_ procedure is
used to obtain information about both context-free and context-sensitive requests.
The method for accessing these procedures from a Pathsend program depends on the
programming language you use. You can write Pathsend programs in C, C++,
COBOL85, Pascal, pTAL, or TAL. The topics that follow explain how to call the
Pathsend procedures from each of the supported programming languages.
Note. For general information about calling these and other Tandem system procedures from
programs written in various programming languages, refer to the information about accessing
Guardian procedures in the Guardian Programmer’s Guide.
None of the Pathsend procedures set the condition-code register. Therefore, language
restrictions on procedures that set this register do not apply to the Pathsend procedures.
Note. For some Pathsend procedures, some parameters in the TAL calling syntax contain an
embedded colon and are of the form name:length. These parameters are TAL parameter
pairs. For further information about parameter pairs and their use in mixed-language
programming (for example, calls to these procedures from languages other than TAL or pTAL),
refer to the TAL Programmer’s Guide.
error
is an integer variable defined earlier in your data declarations.
pathmon-process-name, pathmon-process-name-len,
server-class-name, server-class-name-len, message-buffer,
request-len, maximum-reply-len, actual-reply-len, timeout,
flags, scsend-op-num, and tag
are variables defined earlier in your data declarations. The types of these variables
should be the C types that correspond to the TAL variable types specified in the
Pathsend procedure-call description later in this section. For a table of these
corresponding data types, refer to the information about mixed-language
programming in the C/C++ Programmer’s Guide.
To use the Pathsend procedures in a C program, you must first have named them in an
#include <cextdecs> preprocessor directive.
pathmon-process-name, pathmon-process-name-len,
server-class-name, server-class-name-len, message-buffer,
request-len, maximum-reply-len, actual-reply-len, timeout,
flags, scsend-op-num, and tag
are variables defined in the WORKING-STORAGE SECTION of the DATA
DIVISION. The types of these variables should be the COBOL85 types that
correspond to the TAL variable types specified in the Pathsend procedure-call
description later in this section. For a table of these corresponding data types, refer
to the information about invoking non-COBOL routines in the COBOL85 Manual.
If the length of a string parameter is declared in a separate parameter (as in
SERVER_CLASS_SEND_), this parameter must be passed to the procedure. If the
length is declared as part of the string parameter in the form name:length (as in
SERVERCLASS_DIALOG_BEGIN_ and SERVERCLASS_DIALOG_SEND_),
the length must not be passed explicitly.
error
is an integer variable (USAGE NATIVE-2) defined in the WORKING-STORAGE
SECTION of the DATA DIVISION.
For further information, refer to the COBOL85 Manual.
error
is a variable of type IO_Error_Number defined earlier in your data declarations.
pathmon-process-name, pathmon-process-name-len,
server-class-name, server-class-name-len, message-buffer,
request-len, maximum-reply-len, actual-reply-len, timeout,
flags, scsend-op-num, and tag
are variables defined earlier in your data declarations. The types of these variables
should be the Pascal types that correspond to the TAL variable types specified in the
Pathsend procedure-call description later in this section. For definitions of these
corresponding data types, refer to the information about mixed-language
programming and data-type correspondence in the Pascal Reference Manual.
To use the Pathsend procedures in a Pascal program, you must first have named them in
a SOURCE PEXTDECS compiler directive. For further information, refer to the Pascal
Reference Manual.
error
is an integer variable defined earlier in your data declarations.
pathmon-process-name, pathmon-process-name-len,
server-class-name, server-class-name-len, message-buffer,
request-len, maximum-reply-len, actual-reply-len, timeout,
flags, scsend-op-num, and tag
are variables defined earlier in your data declarations, with types as specified in the
Pathsend procedure-call description later in this section.
To use the Pathsend procedures in a TAL or pTAL program, you must first have named
them in a SOURCE EXTDECS compiler directive. For further information, refer to the
TAL Programmer’s Guide.
SERVERCLASS_DIALOG_ABORT_ Procedure
The SERVERCLASS_DIALOG_ABORT_ procedure aborts the specified dialog.
A call to SERVERCLASS_DIALOG_BEGIN_ to begin a dialog must be matched by a
call to SERVERCLASS_DIALOG_ABORT_ or SERVERCLASS_DIALOG_END_ at
the end of the dialog.
Syntax
The syntax of the SERVERCLASS_DIALOG_ABORT_ procedure is:
dialog-id input
INT(32):value
is the dialog identifier previously returned from the
SERVERCLASS_DIALOG_BEGIN_ call that began the dialog.
This parameter is required.
Considerations
The following considerations apply to the SERVERCLASS_DIALOG_ABORT_
procedure:
• If the server has opened $RECEIVE for system message handling and is using the
Common Run-Time Environment (CRE), aborting the dialog will cause the server to
receive a system message -121, PATHSEND DIALOG ABORT.
• SERVERCLASS_DIALOG_SEND_ operations in progress within this dialog at the
time of the call to SERVERCLASS_DIALOG_ABORT_ are canceled.
SERVERCLASS_DIALOG_BEGIN_ Procedure
The SERVERCLASS_DIALOG_BEGIN_ procedure initiates a dialog with a server
process in a server class and sends the first message in the dialog.
The procedure identifies the server class to the system and returns a dialog identifier for
subsequent dialog operations. A SERVERCLASS_DIALOG_BEGIN_ call must be
matched by a SERVERCLASS_DIALOG_ABORT_ or
SERVERCLASS_DIALOG_END_ call at the end of the dialog.
The completion of this processing—that is, getting the final outcome (success or failure)
and, if successful, the reply data—occurs in one of two ways, depending on whether the
send operation is initiated as waited or nowait:
• For waited send operations, initiation and completion are both performed by the
SERVERCLASS_DIALOG_BEGIN_ procedure.
• For nowait send operations, initiation is performed by the
SERVERCLASS_DIALOG_BEGIN_ procedure, and completion is performed by
calling the AWAITIOX procedure.
Syntax
The syntax of the SERVERCLASS_DIALOG_BEGIN_ procedure is:
error := SERVERCLASS_DIALOG_BEGIN_
( dialog-id ! o
,pathmon-process-name:length !
i:i
,server-class-name:length !
i:i
,message-buffer !
i,o
,request-len ! i
,maximum-reply-len ! i
,[ actual-reply-len ] ! o
,[ timeout ] ! i
,[ flags ] ! i
,[ scsend-op-num ] ! o
,[ tag ] ); ! i
dialog-id output
INT:ref:EXT(32):1
returns an identifier that can be used for subsequent operations on this dialog.
This parameter is required.
pathmon-process-name:length input:input
STRING:ref:EXT:*, INT:value
contains the external Guardian process name of the PATHMON process controlling
the server class (for example, $PM or \AB.$PMN). The process name portion can
have up to five characters after the dollar sign ($) if it is a local process name and up
to four characters after the dollar sign if it is a process on a remote system. The
name cannot include an optional first or second name qualifier, must be left justified
in the buffer, and can contain trailing blanks.
The integer value is the byte length of the pathmon-process-name string. This
value can range from 2 through 15.
This parameter is required.
server-class-name:length input:input
STRING:ref:EXT:*, INT:value
contains the name of the server class to send to (for example, EMP-SERVER). This
name must conform to the Pathway server-class naming rules, must be left justified
in the buffer, and can contain trailing blanks. This server-class name, along with the
pathmon-process-name, uniquely identifies a server class.
The integer value is the byte length of the server-class-name string. This
value can range from 1 through 15.
This parameter is required.
request-len input
INT:value
is the byte length of the data contained in message-buffer. The range of
acceptable values is 0 through 32767 bytes.
This parameter is required.
maximum-reply-len input
INT:value
is the maximum number of bytes that the reply message from the server class can
contain. The range of acceptable values is 0 through 32767 bytes.
No more than maximum-reply-len bytes of the actual reply are placed into
message-buffer upon successful completion of a send.
It is not an error if the server replies with a byte count not equal to the maximum-
reply-len value specified by the requester in the call to this procedure. If the
server replies with a byte count greater than the maximum-reply-len value, the
actual bytes transferred are truncated to maximum-reply-len.
This parameter is required.
actual-reply-len output
INT:ref:EXT:1
returns a count of the number of bytes returned in the server process reply. This
parameter is for waited I/O only and can be omitted for nowait I/O. The return value
of this parameter is 0 if nowait I/O is used. For nowait I/O, the actual reply length is
returned by AWAITIOX.
timeout input
INT(32):value
specifies the maximum amount of time, in hundredths of a second, that the
LINKMON process waits for the completion of this send. This value must be either
-1D or a value greater than 0D. The default is -1D (wait indefinitely).
If there is an outstanding I/O operation to a server process when a
SERVERCLASS_DIALOG_BEGIN_ operation times out, the I/O operation is
canceled.
See Timeout Considerations for Pathsend Programming later in this section for
details about timeout for waited and nowait operations.
flags input
INT:value
flags.<15>
with a value of 1 indicates that this operation is to be performed nowait. A value
of 0 indicates that this operation is to be performed waited. The default is 0.
flags.<14>
if set to 0, selects the one-transaction-per-dialog model. In this model, the
dialog records the transaction identifier that is current at the time of the
SERVERCLASS_DIALOG_BEGIN_ call. Subsequent
SERVERCLASS_DIALOG_SEND_, SERVERCLASS_DIALOG_ABORT_,
and SERVERCLASS_DIALOG_END_ calls that use the returned dialog-id
must specify this transaction identifier, or the calls will fail.
ENDTRANSACTION will fail unless the dialog has been ended (not aborted).
When this bit is set to 0, the TMF subsystem treats a dialog like an I/O
operation: the ENDTRANSACTION operation fails until the dialog has
finished. The same restriction applies to a nested server (a server that receives a
request and then becomes a requester to other servers): if a server receives a
message in a dialog and then initiates a dialog with another server, it must
complete the entire initiated dialog before replying to the message from the
received dialog.
A value of 1 selects the any-transaction-per-dialog model. In this model, all
server-class send operations within the dialog will contain the transaction
identifier that is current at the time of the send, and there are no restrictions on
ENDTRANSACTION other than those associated with calls to the
WRITEREAD procedure.
The default is 0.
flags.<0:13>
must be 0.
scsend-op-num output
INT:ref:EXT:1
returns the server-class send operation number. You can use the server-class send
operation number in place of the file-number parameter in calls to CANCEL,
CANCELREQ, and AWAITIOX for nowait sends, and in calls to FILEINFO for
waited and nowait sends, to indicate that the calls refer to server-class send
operations. The value of scsend-op-num is determined on the first successfully
initiated nowait send. This value is returned on every subsequent nowait send that is
initiated successfully. A value of -1 is returned for nowait sends that are not
initiated successfully. A value of -1 is always returned for waited sends.
See Server-Class Send Operation Number later in this section for more information
about the server-class send operation number.
tag input
INT(32):value
is used for nowait I/O only. The tag is stored by the system and then passed back
to the application by the AWAITIOX procedure when the nowait operation is
completed. You can use the tag parameter to identify multiple nowait I/O
operations. For waited I/O, this parameter is not used and can be omitted.
The default is 0D.
Considerations
If the SERVERCLASS_DIALOG_BEGIN_ procedure fails but does not return a valid
dialog identifier, the dialog was never created. In this case, there is no need to abort the
dialog.
For additional considerations, refer to Usage Considerations for Pathsend Procedures at
the end of this section.
SERVERCLASS_DIALOG_END_ Procedure
The SERVERCLASS_DIALOG_END_ procedure cleans up resources for the specified
dialog after the server has ended it.
A call to SERVERCLASS_DIALOG_BEGIN_ must be matched by a call to
SERVERCLASS_DIALOG_ABORT_ or SERVERCLASS_DIALOG_END_ at the end
of the dialog. For the SERVERCLASS_DIALOG_END_ procedure to work correctly,
the server must previously have ended the dialog by replying with an error value other
than FEContinue (70).
This procedure does not perform any I/O operations.
Syntax
The syntax of the SERVERCLASS_DIALOG_END_ procedure is:
dialog-id input
INT(32):value
is the dialog identifier previously returned from the
SERVERCLASS_DIALOG_BEGIN_ call that began the dialog.
This parameter is required.
Considerations
None.
SERVERCLASS_DIALOG_SEND_ Procedure
The SERVERCLASS_DIALOG_SEND_ procedure initiates a send within the specified
dialog.
The completion of this processing—that is, getting the final outcome (success or failure)
and, if successful, the reply data—occurs in one of two ways, depending on whether the
send operation is initiated as waited or nowait:
• For waited send operations, initiation and completion are both performed by the
SERVERCLASS_DIALOG_SEND_ procedure.
• For nowait send operations, initiation is performed by the
SERVERCLASS_DIALOG_SEND_ procedure, and completion is performed by the
AWAITIOX procedure.
This procedure is similar to the context-free SERVERCLASS_SEND_ procedure, with a
few differences as described under “Considerations.”
Syntax
The syntax of the SERVERCLASS_DIALOG_SEND_ procedure is:
error := SERVERCLASS_DIALOG_SEND_
( dialog-id ! i
,message-buffer !
i,o
,request-len ! i
,maximum-reply-len ! i
,[ actual-reply-len ] ! o
,[ timeout ] ! i
,[ flags ] ! i
,[ scsend-op-num ] ! o
,[ tag ] ); ! i
dialog-id input
INT(32):value
is an identifier, previously returned from SERVERCLASS_DIALOG_BEGIN_, that
specifies the dialog for this send operation.
This parameter is required.
request-len input
INT:value
is the byte length of the data contained in message-buffer. The range of
acceptable values is 0 through 32767 bytes.
This parameter is required.
maximum-reply-len input
INT:value
is the maximum number of bytes that the reply message from the server class can
contain. The range of acceptable values is 0 through 32767 bytes.
No more than maximum-reply-len bytes of the actual reply are placed into
message-buffer upon successful completion of a send.
It is not an error if the server replies with a byte count not equal to the maximum-
reply-len value specified by the requester in the call to this procedure. If the
server replies with a byte count greater than the maximum-reply-len value, the
actual bytes transferred are truncated to maximum-reply-len.
This parameter is required.
actual-reply-len output
INT:ref:EXT:1
returns a count of the number of bytes returned in the server process reply. This
parameter is for waited I/O only and can be omitted for nowait I/O. The return value
of this parameter is 0 if nowait I/O is used. For nowait I/O, the actual reply length is
returned by AWAITIOX.
timeout input
INT(32):value
specifies the maximum amount of time, in hundredths of a second, that the
LINKMON process waits for the completion of this send. This value must be either
-1D or a value greater than 0D. The default is -1D (wait indefinitely).
If there is an outstanding I/O operation to a server process when the
SERVERCLASS_DIALOG_SEND_ operation times out, the I/O operation is
canceled.
See Timeout Considerations for Pathsend Programming later in this section for
details about timeout for waited and nowait operations.
flags input
INT:value
flags.<15>
with a value of 1 indicates that this operation is to be performed nowait. A value
of 0 indicates that this operation is to be performed waited. The default is 0.
flags.<0:14>
must be 0.
scsend-op-num output
INT:ref:EXT:1
returns the server-class send operation number. You can use the server-class send
operation number in place of the file-number parameter in calls to CANCEL,
CANCELREQ, and AWAITIOX for nowait sends, and in calls to FILEINFO for
waited and nowait sends, to indicate that the calls refer to server-class send
operations. The value of scsend-op-num is determined on the first successfully
initiated nowait send. This value is returned on every subsequent nowait send that is
initiated successfully. A value of -1 is returned for nowait sends that are not
initiated successfully. A value of -1 is always returned for waited sends.
See Server-Class Send Operation Number later in this section for more information
about the server-class send operation number.
tag input
INT(32):value
is used for nowait I/O only. The tag is stored by the system and then passed back
to the application by the AWAITIOX procedure when the nowait operation is
completed. You can use the tag parameter to identify multiple nowait I/O
operations. For waited I/O, this parameter is not used and can be omitted.
The default is 0D.
Considerations
The SERVERCLASS_DIALOG_SEND_ procedure is similar to the context-free
SERVERCLASS_SEND_ procedure, with the following differences:
• The dialog identifier, obtained from the SERVERCLASS_DIALOG_BEGIN_ call
that started the dialog, is used to identify the dialog, which is associated with a
particular server class.
• The SERVERCLASS_DIALOG_SEND_ call fails if the current transaction
identifier does not match the transaction identifier used for the
SERVERCLASS_DIALOG_BEGIN_ call, unless this feature has been overridden
by setting the flags.<14> bit to 1 in the call to
SERVERCLASS_DIALOG_BEGIN_.
• The send fails if there is already an outstanding send in the dialog from a previous
nowait call to this procedure.
For additional considerations, refer to Usage Considerations for Pathsend Procedures at
the end of this section.
SERVERCLASS_SEND_ Procedure
The SERVERCLASS_SEND_ procedure initiates a context-free send operation to a
server process in the specified server class.
The completion of this processing—that is, getting the final outcome (success or failure)
and, if successful, the reply data—occurs in one of two ways, depending on whether the
send operation is initiated as waited or nowait:
• For waited send operations, initiation and completion are both performed by the
SERVERCLASS_SEND_ procedure.
• For nowait send operations, initiation is performed by the SERVERCLASS_SEND_
procedure, and completion is performed by calling the AWAITIOX procedure.
Syntax
The syntax of the SERVERCLASS_SEND_ procedure is:
pathmon-process-name input
STRING:ref:EXT:*
contains the external Guardian process name of the PATHMON process controlling
the server class (for example, $PM or \AB.$PMN). The process name portion can
have up to five characters after the dollar sign ($) if it is a local process name and up
to four characters after the dollar sign if it is a process on a remote system. The
name cannot include an optional first or second name qualifier, must be left justified
in the buffer, and can contain trailing blanks.
This parameter is required.
pathmon-process-name-len input
INT:value
is the byte length of the pathmon-process-name string. This value can range
from 2 through 15.
This parameter is required.
server-class-name input
STRING:ref:EXT:*
contains the name of the server class to send to (for example, EMP-SERVER). This
name must conform to the Pathway server-class naming rules, must be left justified
in the buffer, and can contain trailing blanks. This server-class name, along with the
pathmon-process-name, uniquely identifies a server class.
This is a required parameter.
server-class-name-len input
INT:value
is the byte length of the server-class-name string. This value can range from
1 through 15.
This parameter is required.
request-len input
INT:value
is the byte length of the data contained in message-buffer. The range of
acceptable values is 0 through 32767 bytes.
This parameter is required.
maximum-reply-len input
INT:value
is the maximum number of bytes that the reply message from the server class can
contain. The range of acceptable values is 0 through 32767 bytes.
No more than maximum-reply-len bytes of the actual reply are placed into
message-buffer upon successful completion of a send.
It is not an error if the server replies with a byte count not equal to the maximum-
reply-len value specified by the requester in the call to this procedure. If the
server replies with a byte count greater than the maximum-reply-len value, the
actual bytes transferred are truncated to maximum-reply-len.
This parameter is required.
actual-reply-len output
INT:ref:EXT:1
returns a count of the number of bytes returned in the server process reply. This
parameter is for waited I/O only and can be omitted for nowait I/O. The return value
of this parameter is 0 if nowait I/O is used. For nowait I/O, the actual reply length is
returned by AWAITIOX.
timeout input
INT(32):value
specifies the maximum amount of time, in hundredths of a second, that the
LINKMON process waits for the completion of this send. This value must be either
-1D or a value greater than 0D. The default is -1D (wait indefinitely).
If there is an outstanding I/O operation to a server process when a
SERVERCLASS_SEND_ operation times out, the I/O operation is canceled.
See Timeout Considerations for Pathsend Programming later in this section for
details about timeout for waited and nowait operations.
flags input
INT:value
flags.<15>
with a value of 1 indicates that this operation is to be performed nowait. A value
of 0 indicates that this operation is to be performed waited. The default is 0.
flags.<0:14>
must be 0.
scsend-op-num output
INT:ref:EXT:1
returns the server-class send operation number. You can use the server-class send
operation number in place of the file number parameter in calls to CANCEL,
CANCELREQ, and AWAITIOX for nowait sends, and in calls to FILEINFO for
waited and nowait sends, to indicate that the calls refer to server-class send
operations. The value of scsend-op-num is determined on the first successfully
initiated nowait send. This value is returned on every subsequent nowait send that is
initiated successfully. A value of -1 is returned for nowait sends that are not
initiated successfully. A value of -1 is always returned for waited sends.
See Server-Class Send Operation Number later in this section for more information
about the server-class send operation number.
tag input
INT(32):value
is used for nowait I/O only. The tag is stored by the system and then passed back
to the application by the AWAITIOX procedure when the nowait operation is
completed. You can use the tag parameter to identify multiple nowait I/O
operations. For waited I/O, this parameter is not used and can be omitted. The
default is 0D.
Considerations
Refer to Usage Considerations for Pathsend Procedures at the end of this section.
SERVERCLASS_SEND_INFO_ Procedure
The SERVERCLASS_SEND_INFO_ procedure retrieves error information about the
last SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_,
SERVERCLASS_DIALOG_SEND_, SERVERCLASS_DIALOG_END_, or
SERVERCLASS_DIALOG_ABORT_ operation that was initiated or completed with
return error 233 (FEScError) or 0 (FEOK).
If the return error from the previous Pathsend call is 0 (FEOK), both the Pathsend error
and the file-system error will always be 0, so you do not need to call
SERVERCLASS_SEND_INFO_.
Syntax
The syntax of the SERVERCLASS_SEND_INFO_ procedure is:
pathsend-error output
INT:ref:1
returns the Pathsend error. See Section 6, Pathsend Errors, for descriptions of
Pathsend errors.
file-system-error output
INT:ref:1
returns the file-system error. See the Guardian Procedure Errors and Messages
Manual for descriptions of file-system errors.
Considerations
The following considerations apply to the SERVERCLASS_SEND_INFO_ procedure:
• The condition code setting has no meaning following a call to
SERVERCLASS_SEND_INFO_.
• A call to SERVERCLASS_SEND_INFO_ before a call is ever made to
SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ results in return
error 0 (FEOK), Pathsend error 906 (FEScNoSendEverCalled), and file-system error
0 (FEOK).
Condition Code
The condition-code setting has no meaning following a Pathsend procedure call.
Waited I/O
The following considerations apply to waited Pathsend procedure calls:
• The tag parameter has no meaning and can be omitted.
• On a successful completion of a waited Pathsend procedure call, the
actual-reply-len parameter indicates the number of bytes in the reply.
For an example of issuing a waited call to SERVERCLASS_SEND_, see the Pathsend
server program example PATHSRV, Example B-2 on page B-53. In this COBOL85
program, paragraph 460-SEND-TO-SUBSIDIARY-SERVER performs a waited
SERVERCLASS_SEND_ call.
Nowait I/O
The following considerations apply to nowait Pathsend procedure calls:
• The maximum nowait depth for Pathsend procedure calls is 255 per process.
In other words, a Pathsend requester process can have no more than 255 outstanding
nowait server-class send operations at any one time.
• You complete a nowait Pathsend procedure call with a call to AWAITIOX.
You cannot use the AWAITIO—without the X—procedure to complete a nowait
server-class send operation. The SERVERCLASS_SEND_,
SERVERCLASS_DIALOG_BEGIN_, and SERVERCLASS_DIALOG_SEND_
procedures use a 32-bit extended message buffer address, and AWAITIO cannot be
used to complete extended I/O operations.
If a nowait Pathsend procedure call returns an error, the send operation was not
initiated and therefore does not need to be completed with AWAITIOX.
• The actual-reply-len parameter has no meaning for nowait server-class send
operations and can be omitted. The count of the number of bytes in the server-class
reply is returned in the count-transferred parameter of the AWAITIOX
procedure.
• After calling SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_ with the nowait option, do not modify the I/O
buffer before the I/O operation is completed as indicated by AWAITIOX.
• Nowait server-class send operations must not use buffers that are currently in use for
other outstanding nowait I/O operations. The file system requires that these buffers
not be modified.
A value of -1 is returned for nowait send operations that are not initiated successfully. A
value of -1 is always returned for waited send operations.
Note. Passing the server-class send operation number as a filenum parameter to Guardian
procedures other than AWAITIOX, CANCEL, CANCELREQ, and FILEINFO results in file-
system error 2 (FEInvalOp).
Calling AWAITIOX
You can use the server-class send operation number as the file number in calls to the
AWAITIOX procedure to wait for completion of any outstanding
SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_ operation. Alternatively, you can specify -1 as the
file number to AWAITIOX to wait for completion of any outstanding I/O operation,
including calls to SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_. When completion of one of these calls occurs,
you can identify the specific call by the tag returned by AWAITIOX. (You cannot use
the AWAITIO—without the X—procedure to complete a nowait server-class send
operation. The SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, and
SERVERCLASS_DIALOG_SEND_ procedures use a 32-bit extended message buffer
address, and AWAITIO cannot be used to complete extended I/O operations.)
For an example of one way to use AWAITIOX, see the Pathsend program example
BREQ, Example B-1 on page B-2. In this TAL example, the procedure complete^io
waits for completion of an I/O operation on any file and identifies the I/O operation by
the tag returned by AWAITIOX. You can also see how this procedure calls AWAITIOX.
If AWAITIOX returns with an error (condition code CCL), it calls FILEINFO to retrieve
the error code. If the error returned is 233 (FEScError),
SERVERCLASS_SEND_INFO_ is called to get the specific Pathsend error and
file-system error.
Calling FILEINFO
You can use the server-class send operation number returned by
SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_ as the file-number parameter in calls to FILEINFO
to get the return error associated with the last waited or nowait
SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_ call. FILEINFO returns the same error that the
server-class procedure call returned. See the error parameter in the procedure-call
syntax descriptions earlier in this section for details about the return errors.
Server Timeout
You can specify a TIMEOUT attribute for your Pathway servers. You specify the server
TIMEOUT value when you configure the server. If a timeout occurs during an I/O
operation to a server, the I/O operation is canceled and any TMF transaction is aborted.
Unlike the timeout parameter to a SERVERCLASS_SEND_,
SERVERCLASS_DIALOG_BEGIN_, or SERVERCLASS_DIALOG_SEND_ call,
described in the following subsection, the TIMEOUT attribute does not include waiting
for the server link; the TIMEOUT attribute applies only to the I/O to the server.
Server timeout returns Pathsend error 904 (FEScServerLinkConnect) and file-system
error 40 (FETimedOut).
Nowait server-class send operations are completed with a call to AWAITIOX. The
timeout considerations for nowait operations are more complex, because a time-limit
parameter can also be set in the AWAITIOX call. The error returned by AWAITIOX
depends on which time limit was reached:
• If a timeout value is specified in a nowait call to SERVERCLASS_SEND_,
SERVERCLASS_DIALOG_BEGIN_, or SERVERCLASS_DIALOG_SEND_ and
the request is not completed within the specified time, the AWAITIOX call returns
error 233, and a subsequent call to SERVERCLASS_SEND_INFO_ returns
Pathsend error 918 (FeScSendOperationAborted) and file-system error 40
(FETimedOut).
• If a time-limit value is specified in the call to AWAITIOX and this time limit is
reached, the AWAITIOX call returns file-system error 40 (FETimedOut).
If you use a time-limit value on AWAITIOX to wait on I/O operations other than the
Pathsend calls SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, and
SERVERCLASS_DIALOG_SEND_ (for example, WRITEREAD calls, which do not
provide a timeout parameter) and you also use a timeout value on the Pathsend calls,
timeouts can occur in one of the preceding two ways, depending on which timer expires
first. To avoid this complex error handling, it is recommended that you use a timeout
value only on the AWAITIOX call.
For programs whose only I/O operations are Pathsend procedure calls, it is not useful to
use both a timeout on the Pathsend procedure calls and a time limit on AWAITIOX,
because you would be timing the same operation twice. In this case, choose either
Pathsend timeouts or AWAITIOX time limits.
When an AWAITIOX time limit is reached, whether an I/O operation is canceled
depends on the filenum parameter used in the AWAITIOX call. If filenum is set
equal to scsend-op-num and the AWAITIOX time-limit value is greater than zero,
the oldest outstanding send operation is canceled. Iffilenum is set to-1 or if the
AWAITIOX time-limit value is zero or less, no operation is canceled. When a Pathsend
timeout is reached, no send operation is canceled regardless of parameter settings.
Note that any time a send is canceled, the current TMF transaction, if any, is
automatically aborted. Any time a send timeout occurs when an I/O operation is
outstanding on a server process, the I/O operation to the server is canceled and the
transaction, if any, is aborted. However, you should code the requester to call the
ABORTTRANSACTION procedure so that the appropriate cleanup is done on the
requester’s side.
900
FEScInvalidServerClassName
901
FEScInvalidPathmonName
902
FEScPathmonConnect
Cause. An error has occurred in the requester’s communication with the PATHMON
process. For example, an open operation has failed, an I/O error has occurred, or the
PATHMON process has failed.
Typical file-system errors: 12, 14, 40, 48, 201, or one of the path errors between 240
and 255.
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server process.
Recovery. Recovery depends on the file-system error:
• Error 12 (FEInUse) indicates that the PATHMON process was unable to open the
LINKMON process. Specific causes of this situation include (but are not limited to)
the following:
• The maximum number of LINKMON processes that the PATHMON process
can communicate with has been exceeded. See the NonStop TS/MP System
Management Manual for information about setting the MAXLINKMONS
parameter.
• The remote password on the system where the SERVERCLASS_SEND_
request originated was not set for the system where the server class was running.
The PATHMON process receives a file-system error 48 but converts this error
into a file-system error 12. To recover, ensure that all remote passwords are
properly set, as described in the Expand Network Management Guide.
• Error 14 (FENoSuchDev) indicates the PATHMON process does not exist. Start the
PATHMON process or use an existing PATHMON process.
• Error 40 (FETimeout) indicates that a timeout error occurred, possibly because a
server was in debug mode. See Considerations for Debugging Pathway Servers in
Section 4 for more information about timeout errors for servers in debug mode.
• Error 48 (FESecViol) indicates there was a security violation. See Section 3, Writing
Pathsend Requesters, for information about network and server-class security.
• Error 201 (FEPathDown) or error 240 through 255 indicates that a path error
occurred (for example, the PATHMON process failed). Restart the PATHMON
process.
903
FEScPathmonMessage
904
FEScServerLinkConnect
Cause. An error has occurred with the link to the server. For example, an open
operation has failed or there is an I/O problem. This error could occur on a call to
SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_.
Typical file-system errors: 14, 40, 48, 201, or one of the path errors between 240
and 255.
Effect. The call is completed with an error. The message might or might not have been
sent to the server process, depending on the file-system error.
If the file-system error is a path error, any transaction associated with the call is aborted.
If this error is returned from SERVERCLASS_DIALOG_BEGIN_ or
SERVERCLASS_DIALOG_SEND_, the dialog is ended on the server side.
Recovery. If this error is returned from SERVERCLASS_SEND_, recovery depends on
the file-system error:
• Error 14 (FENoSuchDev) indicates that the server process does not exist. Retry the
SERVERCLASS_SEND_ to cause the LINKMON process to use a different link to
the server process or to receive additional links from the PATHMON process. The
success of the retry depends on why the server process stopped.
• Error 40 (FETimedout) indicates that the I/O to the server process timed out because
it exceeded the configured SERVER TIMEOUT value for the server class.
• Error 48 (FESecViol) indicates there was a security violation. Section 3, Writing
Pathsend Requesters, for information about network and server-class security.
• Error 201 (FEPathDown) or error 240 through 255 indicates that a path error
occurred (for example, the processor where the server process was running has
failed).
If this error is returned from SERVERCLASS_DIALOG_BEGIN_ or
SERVERCLASS_DIALOG_SEND_, use SERVERCLASS_DIALOG_END_ or
SERVERCLASS_DIALOG_ABORT_ to terminate the requester’s portion of the dialog.
905
FEScNoServerLinkAvailable
Cause. The LINKMON process had no links to the server class and was unable to get a
link from the PATHMON process to satisfy this request. For example, MAXLINKS
links for each server class are already allocated to other LINKMON processes and
TCPs. This is a PATHMON configuration problem.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server process.
Recovery. Increase the maximum number of servers in the server class (with the
PATHCOM MAXSERVERS parameter) or increase the number of links available to the
server (with the PATHCOM MAXLINKS parameter). For details about the
MAXSERVERS and MAXLINKS parameters, see the NonStop TS/MP System
Management Manual.
906
FEScNoSendEverCalled
909
FEScInvalidFlagsValue
Cause. The caller set bits in the flags parameter that are reserved and must be 0.
This is a programming error.
Typical file-system error: 2 (FEInvalOp)
Effect. The send initiation fails with an error.
Recovery. Set the reserved bits in the flags parameter to 0.
910
FEScMissingParameter
911
FEScInvalidBufferLength
912
FEScParameterBoundsError
Cause. The address specified by a reference parameter is out of bounds, or the caller
supplied a reference parameter that is an extended address but does not have an extended
segment in use. This is a programming error.
Effect. The send initiation fails with an error.
Recovery. Correct the programming error.
913
FEScServerClassFrozen
914
FEScUnknownServerClass
Cause. The server class is not configured through the specified PATHMON process.
The program has specified an incorrect server-class name or specified the wrong
PATHMON process.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server class.
Recovery. Check the server-class name and the PATHMON process name. Or check if
the server class has been configured yet (the PATHMON-controlled objects could be in
the process of being cold started).
915
FEScPathmonShutDown
Cause. The send operation has been denied for one of the following reasons:
• The PATHMON process for the server class is shutting down.
• A timeout occurred on an I/O operation to a server in debug mode.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_, SERVERCLASS_DIALOG_BEGIN_, or
SERVERCLASS_DIALOG_SEND_ call is completed with an error. The message is
not sent to the server class.
Recovery. If the PATHMON process is shutting down, determine the reasons for the
shutdown and perform appropriate recovery actions.
If a server process is in debug mode and a timeout error (file-system error 40) occurred,
do the following:
• Use the PATHCOM STATUS PATHMON command to find the server classes that
are in the LOCKED state.
• Identify the server program file for each locked server class.
• Issue the TACL command STATUS *, PROG object-file-name to list all
running processes.
• Stop these processes by using the TACL STOP command.
For more information about timeout errors for servers in debug mode, refer to
Considerations for Debugging Pathway Servers in Section 4.
916
FEScServerCreationFailure
Cause. The LINKMON process was unable to get a link to the server class due to a
server creation failure. This is usually a server-class configuration problem, or a server
might have a problem that causes it to fail.
Typical file-system error: 0 (FEOK)
Effect. The send initiation fails with an error.
Recovery. Verify that the server class has been configured correctly. If the problem is
not in the configuration, correct the error in the server.
917
FEScServerClassTmfViolation
Cause. The transaction mode of the Pathsend program does not match that of the server
class. The process has a current transaction ID at the time of the send, and the server
class is configured with the TMF parameter set to OFF. This is a programming error or
a server-class configuration error.
Typical file-system error: 0 (FEOK)
Effect. The call is completed with an error. The message is not sent to the server class.
Recovery. Correct your program or change the server-class configuration setting to
TMF ON.
918
FEScSendOperationAborted
919
FEScInvalidTimeoutValue
920
FEScPFSUseError
Cause. The caller’s process file segment (PFS) could not be accessed.
Typical file-system error: 31 (FENoBufSpace)
Effect. The send initiation fails with an error.
Recovery. Code the process to stop itself if this error occurs.
921
FEScTooManyPathmons
Effect. The call is completed with an error. The message is not sent to the server
process.
Recovery. In some cases, you can recover from this error by retrying the call. Whether
a retry will work depends on the design and operating environment of your application.
If the PATHMON processes in your application are frequently created and stopped, retry
the call. Otherwise, investigate the cause of the large number of PATHMON processes
and eliminate some processes.
For more information about LINKMON limits, refer to LINKMON Limit Errors on
page 3-4 and also to the NonStop TS/MP System Management Manual.
922
FEScTooManyServerClasses
Cause. The LINKMON process already has links to the maximum number of server
classes allowed for all PATHMON processes. The maximum number is 1024.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server process.
Recovery. In some cases, you can recover from this error by retrying the call. Whether
a retry will work depends on the design and operating environment of your application.
For more information about LINKMON limits, refer to LINKMON Limit Errors on
page 3-4 and also to the NonStop TS/MP System Management Manual.
923
FEScTooManyServerLinks
Cause. The LINKMON process already has the maximum number of concurrent links
to server processes allowed for all PATHMON processes. The maximum number
is 1750.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server process.
Recovery. In some cases, you can recover from this error by retrying the call. Whether
a retry will work depends on the design and operating environment of your application.
For more information about LINKMON limits, refer to LINKMON Limit Errors on
page 3-4 and also to the NonStop TS/MP System Management Manual.
924
FEScTooManySendRequests
Cause. The maximum number of concurrent server-class send operations allowed has
been exceeded. The maximum number is 255 per requester and 512 for all requesters
running in a processor. This error can occur on a call to SERVERCLASS_SEND_,
SERVERCLASS_DIALOG_BEGIN_, or SERVERCLASS_DIALOG_SEND_.
Typical file-system error: 0 (FEOK)
Effect. The call is completed with an error. The message is not sent to the server
process.
Recovery. In some cases, you can recover from this error by retrying the call. Whether
a retry will work depends on the design and operating environment of your application.
For more information about LINKMON limits, refer to LINKMON Limit Errors on
page 3-4 and also to the NonStop TS/MP System Management Manual.
925
FEScTooManyRequesters
Cause. The LINKMON process is already communicating with the maximum number
of requesters allowed. The maximum number of concurrently active Pathsend
requesters per processor is 256. This error can occur only on the requester’s first call to
SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_.
Typical file-system error: 0 (FEOK)
Effect. The SERVERCLASS_SEND_ or SERVERCLASS_DIALOG_BEGIN_ call is
completed with an error. The message is not sent to the server process.
Recovery. Retry if the number of Pathsend requesters fluctuates in this processor.
926
FEScDialogInvalid
Cause. The specified dialog identifier is not valid. This error can occur on a call to
SERVERCLASS_DIALOG_SEND_, SERVERCLASS_DIALOG_END_, or
SERVERCLASS_DIALOG_ABORT_.
Typical file-system error: 0 (FEOK)
Effect. The send initiation fails with an error.
Recovery. Use a valid dialog identifier.
927
FEScTooManyDialogs
Cause. The requester cannot start a new dialog, because it already has the maximum
number of dialogs open. The maximum number of dialogs per requester is 256.
This error can occur on a call to SERVERCLASS_DIALOG_BEGIN_.
Typical file-system error: 0 (FEOK)
Effect. The send initiation fails with an error.
Recovery. Reduce the number of dialogs.
928
FEScOutstandingSend
Cause. The requester has an outstanding send operation on this dialog. This error can
occur on a call to SERVERCLASS_DIALOG_SEND_.
Typical file-system error: 0 (FEOK)
Effect. The send initiation fails with an error.
Recovery. Complete the current send before starting another.
929
FEScDialogAborted
Cause. The dialog has been aborted for one of the following reasons:
• The server requested a dialog abort.
• The server terminated between send operations.
• The server terminated immediately following send completion (with a reply of
FEContinue), but before the LINKMON process had replied to the requester.
If the server terminated, the termination could be due to a server error or a network error.
This error can occur on a call to SERVERCLASS_DIALOG_BEGIN_ or
SERVERCLASS_DIALOG_SEND_.
Typical file-system error: if the server requested the abort, 1 (FEEOF); if the server
terminated, the file-system error returned by the LINKMON process
Effect. The dialog is aborted. If flags.<14> was not set to 1 on the call to
SERVERCLASS_DIALOG_BEGIN_, the transaction is also aborted. The procedure
(if waited) or AWAITIOX (if nowait) returns with an error.
Recovery. Use SERVERCLASS_DIALOG_END_ to terminate the requester’s portion
of the dialog.
930
FEScChangedTransid
931
FEScDialogEnded
933
FEScDialogOutstanding
Cause. A call to SERVERCLASS_DIALOG_END_ was made, but the server has not
ended the dialog.
Typical file-system error: 0 (FEOK)
Effect. The procedure initiation fails with an error.
Recovery. Have the server end the dialog by replying FEOK, or use
SERVERCLASS_DIALOG_ABORT_ to abort the dialog.
934
FEScTransactionAborted
Cause. The transaction associated with the dialog has been aborted.
Typical file-system error: 0 (FEOK)
Effect. The procedure initiation fails with an error. The dialog is now aborted.
Recovery. Use SERVERCLASS_DIALOG_END_ or
SERVERCLASS_DIALOG_ABORT_ to terminate the requester’s portion of the dialog.
947
FEScLinkmonConnect
The processing flow is like this: read one record from the input file,
initiate the I/O nowaited, complete the I/O, and write the reply from
the two servers to the output file before reading the next record from
the input file.
The reply from each server named in the request msg is simply its
process id. BREQ puts together the reply for each server and writes
it to the output file.
The following files are used by BREQ and must exist before running the
program:
ERROR-LOG-FILE
-- Used to record error msgs.
MESSAGE-LOG-FILE
-- A write to this file is part of a transaction. It contains
request msgs received by BREQ from DRIVER.
TRACE-FILE (OPTIONAL)
-- Used to log certain READs, SENDs, and TMF operations.
MAX-RETRIES
-- BREQ uses this number to calculate the number of times
it will try to recover from PATHSEND SEND failures.
Example run-line:
?ENDIF 1
?DATAPAGES 64
! These are the STRUCTS used when compiling the BREQ program.
! Comments appears to the right of the code.
?SECTION STARTUP
?SECTION ASSIGN
?SECTION PARAM
?SECTION BREQ^INPUT
! The following is the record format of the edit file, which is the
! input to the BREQ program.
!
?SECTION BREQ^OUTPUT
STR NON^SEND^ERROR^MSG[0:77];
END; ! BREQ output rec template
STRUCT SUBSIDIARY^SERVER;
BEGIN
STR SYSTEM^NAME[0:7];
STR PROCESS^NAME[0:7];
END;
STR TMF^ABORT^REQUIRED;
STRUCT ERROR^MSG;
BEGIN
STR PATHSEND^ERROR[0:77];
STR FILE^SYSTEM^ERROR[0:77];
END;
STR NON^SEND^ERROR^MSG[0:77];
END; ! PATHSRV reply template
?SECTION CONTROL^BLOCK
LIT cb^type^pathsend = 1;
LIT cb^type^msg^log = 2;
LIT trace^read^input = 0;
LIT trace^pathsend = 1;
LIT trace^write^to^msg^log = 2;
LIT trace^begin^transaction = 3;
LIT trace^end^transaction = 4;
LIT trace^abort^transaction = 5;
LIT trace^cancel^request = 6;
LIT trace^write^blank^line = 7;
LIT trace^completed^io = 8;
LIT trace^io^timed^out = 9;
LIT trace^io^failed = 10;
LIT trace^retry^transaction = 11;
LIT trace^max^retries^exceeded = 12;
LITERAL
FEScFirstError = 900, ! First avail. PATHSEND Error.
FEScInvalidServerClassName = 900, ! Invalid server class name.
FEScInvalidPathmonName = 901, ! Invalid Pathmon process name.
FEScPathmonConnect = 902, ! Error with Pathmon
! connection (eg. Open, I/O,
! etc.).
FEScPathmonMessage = 903, ! Unknown message received from
! PATHMON.
FEScServerLinkConnect = 904, ! Error with Server Link
! connection
! (eg. Open, I/O, etc. ).
FEScNoServerAvailable = 905, ! No Server Available.
FEScNoSendEverCalled = 906, ! the user called SC_SEND_INFO
! before ever calling SC_SEND_.
FEScInvalidSegmentID = 907, ! The caller uses an extended
! segment id that is out of range.
FEScNoSegmentInUse = 908, ! The caller supplied a ref.
! parameter that is an extended
! address, but doesn't have an
! extended segment in use.
FEScInvalidFlagsValue = 909, ! The caller set bits in flags
! parameter that are reserved
! and must be 0.
FEScMissingParameter = 910, ! A required parameter was not
! supplied.
FEScInvalidBufferLength = 911, ! One of the buffer length
! parameters is invalid.
FEScParameterBoundsError = 912, ! A reference parameter is out
! of bounds.
FEScServerClassFrozen = 913, ! The Server Class is Frozen.
FEScUnknownServerClass = 914, ! PATHMON does not recognize
! Server Class name.
FEScPathmonShutDown = 915, ! Send denied because Pathmon
! is shutting down.
FEScServerCreationFailure = 916, ! Send denied by PATHMON
! because of Server creation
! failure.
FEScServerClassTmfViolation = 917, ! The Tmf Transaction mode of
! the Send does not match that
! of the ServerClass (eg.
! Requester Send has a TransId
! and the ServerClass is
! configured with TMF OFF).
FEScOperationAborted = 918, ! Send operation aborted. See
! accompanying Guardian error
! for more information.
FEScInvalidTimeoutValue = 919, ! The caller supplied an
! invalid timeout value.
FEScPFSUseError = 920, ! The caller's PFS segment
! could not be accessed.
FEScTooManyPathmons = 921, ! The max. number of Pathmons
! allowed has been exceeded.
FEScTooManyServerClasses = 922, ! The maximum number of server
! classes has been exceeded.
FEScTooManyServerLinks = 923, ! The maximum number of server
! links has been exceeded.
FEScTooManySendRequests = 924, ! The maximum number of send
! requests has been exceeded.
FEScTooManyRequesters = 925, ! The maximum number of allowed
LIT FEok = 0;
LIT FEInvalidOp = 2;
LIT FEBoundsErr = 22;
LIT FEMissparam = 29;
LIT FESCError = 233;
! Define a global array to hold error msgs that aren't PATHSEND send
! errors. For example, reference parameter errors, AWAITIOX timeout
! errors, and validation errors.
?LIST,PAGE
?PAGE "READ THE STARTUP AND ASSIGN MSGS, AND OPEN THE LOG FILE"
PROC initialize;
EXTERNAL;
?PAGE "START A WRITE OF THE INPUT REQUEST RECORD TO THE MSG LOG"
INT PROC initiate^write^to^message^log (cb);
INT .EXT cb (control^block^template);
EXTERNAL;
PROC start^the^tmf^transaction;
EXTERNAL;
?LIST
?LIST
PS^EXAMPLE^VERSION^PROC;
PROC abend^with^my^abend^msg;
BEGIN
INT .filename [0:11];
INT term^fnum;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
CALL ABEND;
!
! Abort the transaction I started
!
PROC abort^tmf^transaction;
BEGIN
INT tmf^error;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
IF (tmf^error := ABORTTRANSACTION)
THEN ! failed to abort, file sys error in tmf^error
BEGIN
sbuf ':=' "ERROR WITH ABORTTRANSACTION: " -> @sp;
CALL NUMOUT (sp, tmf^error, 10, 3);
@sp := @sp[3];
CALL ABEND;
END;
BEGIN
STR .EXT sp;
STR .EXT st;
INT error; ! used in call to serverclass_send_info_
INT pathsend^error; ! used in call to serverclass_send_info_
INT filesystem^error; ! used in call to serverclass_send_info_
cb.error^is^retryable := false;
cb.pathsend^error := pathsend^error;
cb.file^system^error := filesystem^error;
! Use the pathsend error to check for parameter errors, and flag
! them as non-retryable. Alternatively, we could use the value
! returned in the file system error to trap a bad param (error 2:
! FEInvalidOp, error 21: FEBadCount, error error 22: FEBadParam,
! error 29: FEMissParam).
!
! The pathsend error does provide more specific information about
! about the problem. For example, pathsend errors 907, 908, 909,
! and 919 all return the same file system error (error 2,
! FEInvalOp).
BEGIN
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
CALL ABEND;
END;
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
IF cb.io^posted
THEN ! this cb has I/O that hasn't completed
BEGIN
CALL CANCELREQ (cb.fnum, @cb);
IF <
THEN ! print an error msg and abend
CALL IO^error (cb.fnum);
cb.io^posted := false;
CALL write^trace^file (trace^cancel^request, cb.record^number);
END;
@cb := @cb.next^cb;
END; ! while
! This PROC waits for I/O to complete and returns the address of the
! control block associated with the completion. It returns nil^addr
! if I/O completed with an error, or nil^addr if there was no
! completion (in the case of a timeout, error 40).
BEGIN
INT .EXT cb (control^block^template);
DBL tag := -1D;
DBL timelimit := 300D; ! wait 3 seconds (0.01 sec units)
LIT anyfnum = -1; ! wait on any file
INT fnum; ! used in call to awaitiox
STR .EXT sp;
INT error;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .st;
! When waiting for any I/O to complete (fnum = -1) with an AWAITIO
! time limit <> 0, I/O is considered complete and no longer
! outstanding (whether an error is returned or not) in every case
! except when a timeout (error 40) occurs.
!
! When a completion occurs, the file number of the completed call
! is returned in the <fnum> param, and tag is returned in <tag>.
fnum := anyfnum;
cb.io^posted := false;
IF error = 40
THEN ! AWAITIO timed out and no completion has occurred
BEGIN
sbuf ':=' "AWAITIO TIMED OUT (ERROR 40)" -> @st;
RETURN nil^addr;
END;
@cb := tag;
cb.io^posted := false;
CASE cb.type OF
BEGIN
cb^type^msg^log ->
BEGIN
cb.file^system^error := error;
cb.file^system^error^msg ':=' "ERROR: " -> @sp;
CALL DNUMOUT (sp, $UDBL (error), 10,3);
@sp := @sp[3];
sp ':=' "RETURNED FROM AWAITIO ON I/O TO THE MESSAGE LOG FILE";
RETURN nil^addr;
END;
cb^type^pathsend ->
BEGIN
END;
OTHERWISE ->
CALL abend^with^my^abend^msg;
END; ! case
RETURN nil^addr;
! Control blocks (cb's) are managed as a linked list, and new cb's
! are allocated in get^control^block.
PROC create^the^memory^pool;
BEGIN
INT status;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
CALL ABEND;
END;
! End the transaction I started, and log the outcome to the error
! log file. If successful, write a record to the trace file.
PROC end^the^tmf^transaction;
BEGIN
INT tmf^error;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
IF (tmf^error := ENDTRANSACTION)
THEN ! file sys error in tmf^error
BEGIN
sbuf ':=' "ERROR WITH ENDTRANSACTION: " -> @sp;
CALL NUMOUT (sp, tmf^error, 10, 3);
@sp := @sp[3];
CALL ABEND;
END;
BEGIN
INT i := 0;
INT .assign^ (ci^assign);
i := i + 1;
END;
RETURN false;
END; ! INT PROC get^assign
! This proc gets memory from the pool for a new control block (cb).
! The caller passes in the head of a list of control blocks, and it
! links the new cb to the end of that list.
! If the list head has a nil address, then the new cb becomes the
! first element of the list.
! This proc returns the address of the new control block. Before
! returning, the new cb is zero'd.
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
INT .EXT new^cb (control^block^template);
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
IF @new^cb = -1D
THEN ! couldn't get memory
BEGIN
sbuf ':=' "GETPOOL FAILED TO GET MEMORY IN GET^CONTROL^BLOCK" -> @sp;
CALL ABEND;
END;
! If the caller passed in a list head with nil address, then make
! the new cb the first element in the list.
IF @cb = nil^addr
THEN ! the user passed an empty list
@cb := @new^cb
@cb.next^cb := @new^cb;
@cb := @cb.next^cb;
END;
! Clean the new control block, and set the link to nil address
@cb.next^cb := nil^addr;
RETURN @cb;
?PAGE "READ THE STARTUP AND ASSIGN MSGS, AND OPEN VARIOUS LOG FILES"
! This proc then opens the error log file, message log file, and the
! trace file.
PROC initialize;
BEGIN
STRUCT .startup^msg (ci^startup);
INT .buf [0:79];
STR .sp := @buf '<<' 1;
STR .st;
INT .filename [0:11];
INT .error^log^file[0:11];
INT .msg^log^file[0:11];
INT .trace^file[0:11];
INT .assign^ (ci^assign);
STR .assign^name[0:17] := [18*[" "]];
STR .logical^name[0:30];
INT setmode^param1;
INT devtype, phys^reclen;
! Get my process id and read the startup msg, ASSIGNs and PARAMs
CALL who^am^i;
! Verify that the ASSIGNs for msg log file, error log file, and
! trace file are present in our ASSIGN table.
! The msg log file contains each record read from the input file
CALL ABEND;
END;
CALL ABEND;
END;
END
ELSE ! trace assign not present, so don't trace
trace^fnum := -1;
BEGIN
INT len;
INT ^ScSendOpNum;
INT pathmon^process^name^len;
INT serverclass^name^len;
INT flags := 0;
DBL timeout;
INT error;
STR .sp;
! If this is a msg log control block then start the write to the msg
! log file.
IF cb.type = cb^type^msg^log
THEN ! start the disc op
RETURN initiate^write^to^message^log (cb);
! Start the Pathsend send to the server class. Fill the send buf
! with blanks so there's not a cascading Pathsend send from server
! to server class.
pathmon^process^name^len := len + 1;
serverclass^name^len := len + 1;
flags.<15> := 1;
timeout := -1D;
pathmon^process^name^len,
cb.serverclass^name,
serverclass^name^len,
cb.pathsend^req^buf,
$LEN (pathsrv^request^template),
$LEN (pathsrv^reply^template),
, ! actual reply len for waited I/O only !
timeout,
flags,
^ScSendOpNum,
@cb !tag! );
cb.io^posted := false;
RETURN false;
?PAGE "START A WRITE OF THE INPUT REQUEST RECORD TO THE MSG LOG"
! This proc is called from initiate^IO, and starts the I/O to the
! message log file. The WRITE is tagged so we can identify this I/O
! when completing it with AWAITIOX, or cancelling it with CANCELREQ.
BEGIN
INT error := 0;
cb.io^posted := true;
cb.fnum := msg^log^fnum;
RETURN true;
! This procedure is passed a file number and gets the file system
! error and file name associated with that file number. It builds an
! error msg and writes it to either the error log file or the home
! terminal. This PROC calls ABEND.
BEGIN
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
INT .filename [0:11];
INT len;
INT error;
INT OutFnum;
CALL abend^with^my^abend^msg;
IF fnum <> -1
THEN ! the error occurred on a file already opened
BEGIN
sp ':=' " FILE " -> @sp;
@sp := @sp [len := FNAMECOLLAPSE (filename, sp)];
END;
! Write the msg to the terminal if the error log isn't open
IF error^log^fnum <= 0
THEN ! send output to the home term
BEGIN
CALL MYTERM (filename);
CALL OPEN (filename, OutFnum);
IF <> THEN CALL ABEND;
END
CALL ABEND;
?PAGE "SEARCH THE CONTROL BLOCKS FOR I/O POSTED BUT NOT COMPLETED"
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
@cb := @cb.next^cb;
END;
RETURN false;
! This procedure moves data from the two Pathsend control blocks
! into the output buffer, and then writes the output buffer to the
! out file.
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
STRUCT .out^buf (breq^output^rec^template);
INT i := 0;
STR .EXT sp;
! Store the outcome of the two Pathsend sends into the output buffer
IF cb.type = cb^type^pathsend
THEN ! this cb has data about the outcome of a Pathsend send
BEGIN
out^buf.server^reply[i].system^name ':='
cb.pathsend^reply^buf.this^server.system^name
FOR $OCCURS (cb.pathsend^reply^buf.this^server.system^name);
out^buf.server^reply[i].process^name ':='
cb.pathsend^reply^buf.this^server.process^name
FOR $OCCURS (cb.pathsend^reply^buf.this^server.process^name);
! Store Pathsend error msg text and file system error msg text
! generated by this program.
END;
IF cb.pathsend^error^msg
THEN ! include msg text
out^buf.server^reply[i].error^msg.pathsend^error ':='
cb.pathsend^error^msg FOR $OCCURS (cb.pathsend^error^msg);
IF cb.file^system^error^msg
THEN ! include msg text
out^buf.server^reply[i].error^msg.file^system^error ':='
cb.file^system^error^msg FOR $OCCURS (cb.file^system^error^msg);
i := i + 1;
END; ! if
@cb := @cb.next^cb;
END; ! while
BEGIN
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
INT i := 0, found := false;
STR .sp, .st;
INT status;
INT early^exit := false;
@sp := @param^msg.parameters;
! The early^exit flag is used to exit the loop if the parameter has
! an invalid value specified. The found flag is used to exit the
! loop if the param is found and has a valid value.
IF sp[1] = "MAX-RETRIES"
THEN ! found the param
BEGIN
sbuf ':=' sp[sp + 2] FOR sp[sp + 1] -> @st;
st := 0;
ELSE
found := true;
END;
IF NOT found
THEN ! missing or bad param
BEGIN
sbuf ':=' "MISSING OR ILLEGAL PARAM 'MAX-RETRIES' " -> @sp;
CALL ABEND;
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
CALL start^the^tmf^transaction;
! Step through the list of control blocks (cb's), initiating the I/O
! associated with each cb (a send or a write).
@cb := @cb.next^cb;
END; ! while
@cb := complete^io;
IF @cb = nil^addr
THEN ! an I/O failed
BEGIN
CALL cancel^outstanding^io (cb^list^head);
CALL abort^tmf^transaction;
RETURN false;
END;
END; ! while
CALL end^the^tmf^transaction;
RETURN true;
INT read^count;
INT .error;
BEGIN
INT status;
DBL LineNum;
! If status >= 0, the read was successful and status contains the
! count of chars in the text line. Actual bytes transferred <=
! read^count. If status < 0, an unrecoverable error occurred.
error := 0;
IF (error := status) = -1
THEN ! end of file
RETURN false;
! Unexpected error reading the IN file, print an error msg and abend
! Search the list of control blocks for errors that can be retried.
! All Pathsend I/O that failed must be retryable (not just one send,
! but both) for the transaction to be considered retryable.
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
INT transaction^is^retryable := false;
BEGIN
IF NOT cb.error^is^retryable
THEN ! the transaction isn't retryable
RETURN false;
transaction^is^retryable := true;
END;
@cb := @cb.next^cb;
END;
RETURN transaction^is^retryable;
! After we are done using all the control blocks in a list, return
! the memory allocated for each control block.
BEGIN
INT .EXT cb (control^block^template) := @cb^list^head;
INT .EXT next^cb (control^block^template);
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
@next^cb := @cb.next^cb;
CALL ABEND;
END; ! if
@cb := @next^cb;
END; ! while
BEGIN
CASE error OF
BEGIN
global^non^pathsend^error^msg ':='
"SERVERCLASS_SEND_INFO_ EXTENDED SEGMENT USAGE ERROR";
global^non^pathsend^error^msg ':='
"SERVERCLASS_SEND_INFO_ PARAMETER OUT OF BOUNDS";
global^non^pathsend^error^msg ':='
"SERVERCLASS_SEND_INFO_ MISSING REQUIRED PARAMETER";
OTHERWISE ->
global^non^pathsend^error^msg ':='
"SERVERCLASS_SEND_INFO_ UNEXPECTED ERROR";
END; ! case
! Here we get memory for each control block (cb) used in the
! transaction, and we store data from the input record into the cb.
! The data we store is data necessary to execute that part of the
! transaction, a Pathsend send or msg log WRITE.
! This proc returns the address of the first element in the list of
! control blocks.
BEGIN
INT .EXT cb^list^head (control^block^template) := nil^addr;
INT .EXT cb (control^block^template);
! Store data into this control block, used for the first Pathsend
! send.
! Get the second element in the list, used for the WRITE to the msg
! log file, and link it to the end of the list.
! Get the third element in the list, used for the second Pathsend
! send, and link it to the end of the list.
RETURN @cb^list^head;
PROC start^the^tmf^transaction;
BEGIN
DBL trans^tag;
INT tmf^error;
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
CALL ABEND;
END;
BEGIN
INT .buf [0:79];
STR .sbuf := @buf '<<' 1;
STR .sp;
INT FileCode;
INT status;
! Pass the startup msg back because PROC initialize needs access
! to the default volume and subvolume.
CALL ABEND;
END;
! This proc stores data to make one Pathsend send or one write to
! the message log file. The data is from one input record, and is
! stored in the control block that's passed into this procedure.
BEGIN
IF cb^type <> cb^type^pathsend AND cb^type <> cb^type^msg^log
THEN ! assertion failed
CALL abend^with^my^abend^msg;
cb.type := cb^type;
cb.record^number := record^number;
IF cb.type = cb^type^pathsend
THEN ! store data necessary to do a Pathsend send
BEGIN
@cb.pathmon^system^and^process^name :=
@data^buf.pathmon^system^and^process^name;
@cb.serverclass^name := @data^buf.server^class;
END
BEGIN
INT i;
INT .buf [0:79] := [80*[" "]];
STR .sbuf := @buf '<<' 1;
STR .sp;
STR .logical^name[0:30];
INT .assign^ (ci^assign);
BEGIN
FOR i := 0 to 1 DO
BEGIN
CALL output^msg;
RETURN false;
END;
CALL output^msg;
RETURN false;
END;
CALL output^msg;
RETURN false;
END;
RETURN true;
BEGIN
STR .spid := @my^processid '<<' 1;
BEGIN
INT .write^buf[0:79] := [80*[" "]];
STR .swrite^buf := @write^buf '<<' 1;
STR .sp;
STR .spid := @my^processid '<<' 1;
IF trace^fnum <= 0
THEN ! user doesn't want to trace
RETURN;
IF $PARAM (record^number)
THEN ! include it in the msg
BEGIN
sp ':=' "RECORD #" -> @sp;
CALL NUMOUT (sp, record^number, 10, 3);
@sp := @sp[4];
END;
CASE function OF
BEGIN
!0! sp ':=' "READ ONE REQUEST MSG FROM INPUT FILE" -> @sp;
!1! sp ':=' "INITIATED ONE PATHSEND SEND" -> @sp;
!2! sp ':=' "INITIATED WRITE TO MESSAGE-LOG-FILE" -> @sp;
!3! sp ':=' "BEGIN TRANSACTION" -> @sp;
!4! sp ':=' "END TRANSACTION" -> @sp;
!5! sp ':=' "ABORT TRANSACTION" -> @sp;
!6! sp ':=' "CANCELREQ" -> @sp;
!7! @sp := @swrite^buf; ! write a blank line
!8! sp ':=' "I/O COMPLETED SUCCESSFULLY" -> @sp;
!9! sp ':=' "AWAITIO TIMED OUT" -> @sp;
!10! sp ':=' "I/O COMPLETED WITH AN ERROR" -> @sp;
!11! sp ':=' "RETRYING THE TRANSACTION" -> @sp;
!12! sp ':=' "MAX-RETRIES EXCEEDED, TRANSACTION ABORTED" -> @sp;
END; ! Case
BEGIN
STRUCT .input^buf (breq^input^rec^template); ! buf to hold input record
INT .EXT cb^list^head (control^block^template) := nil^addr;
!first cb in linked list.
INT error := 0; ! used with read of input file
INT record^number := 0; ! input file record number we're processing
INT retry^count; ! # times we retried transaction a failure
! Define the memory pool that we use to store the control blocks
! (cb's), maintained as a linked list in the upper 32K. Cb's are
! allocated when we process one transaction, and are deallocated
! when we complete one transaction. A transaction is driven by data
! in one record of the input file.
CALL create^the^memory^pool;
! Loop until end of IN file, reading one record and doing the
! transaction associated with that record. A transaction is two
! Pathsend sends and one WRITE to the message log file.
record^number := record^number + 1;
IF validate^breq^input (input^buf)
THEN ! input record is valid
BEGIN
retry^count := 0;
retry^count := retry^count + 1;
END;
END; ! if
! Return all control block memory to the pool, and set the
! the first element in the list to nil address.
@cb^list^head := nil^addr;
END; ! if read^
CALL STOP;
?NOMAP
?SEARCH $SYSTEM.SYSTEM.COBOLLIB
?CONSULT $SYSTEM.SYSTEM.COBOLEX0
IDENTIFICATION DIVISION.
PROGRAM-ID. PATHSRV.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. TANDEM.
OBJECT-COMPUTER. TANDEM.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MESSAGE-IN-FILE
ASSIGN TO $RECEIVE
FILE STATUS IS WS-FILE-STATUS.
SELECT MESSAGE-OUT-FILE
ASSIGN TO $RECEIVE
FILE STATUS IS WS-FILE-STATUS.
SELECT ERROR-LOG-FILE
ASSIGN TO "ERRORLOG"
ORGANIZATION IS SEQUENTIAL
ACCESS IS SEQUENTIAL
FILE STATUS IS WS-FILE-STATUS.
RECEIVE-CONTROL.
/
DATA DIVISION.
FILE SECTION.
FD MESSAGE-IN-FILE
DATA RECORD IS PATHSRV-REQUEST.
01 PATHSRV-REQUEST.
03 SUBSIDIARY-SERVER.
05 PATHMON-ASSIGN-NAME PIC X(31).
05 PATHMON-SYSTEM-AND-PROCESS PIC X(15).
05 SERVER-CLASS PIC X(15).
FD MESSAGE-OUT-FILE
DATA RECORD IS PATHSRV-REPLY.
01 PATHSRV-REPLY.
03 REPLY-CODE PIC S9(4) COMP.
03 THIS-SERVER.
05 SYSTEM-NAME PIC X(8).
05 PROCESS-NAME PIC X(8).
03 SUBSIDIARY-SERVER.
05 SYSTEM-NAME PIC X(8).
05 PROCESS-NAME PIC X(8).
03 TMF-ABORT-REQUIRED PIC X.
03 ERROR-MESSAGE.
05 PATHSEND-ERROR PIC X(78).
05 FILE-SYSTEM-ERROR PIC X(78).
03 NON-SEND-ERROR-MESSAGE PIC X(78).
FD ERROR-LOG-FILE
WORKING-STORAGE SECTION.
01 WS-FILE-SYSTEM-ERROR-MESSAGE.
03 FILLER PIC X(25)
VALUE "FILE SYSTEM ERROR. FILE: ".
03 WS-LOGICAL-FILE-NAME PIC X(31).
03 FILLER PIC X(13)
VALUE "FILE STATUS: ".
03 WS-FILE-STATUS-ERROR-MESSAGE PIC 99.
* ASSIGNS. THESE ASSIGNS ARE FOR THE PATHMON SYSTEM AND PROCESS
* NAMES OF SUBSIDIARY SERVERS. IF YOU USE PATHMON-ASSIGN-NAME IN THE
* REQUEST MESSAGE (PATHSRV-REQUEST), THEN THE ASSOCIATED PATHMON
* SHOULD BE IN THIS TABLE. THIS IS ONE WAY OF AVOIDING HARD-CODING
* PATHMON SYSTEM AND PROCESS NAMES.
01 WS-ASSIGN-TABLE.
03 WS-ASSIGN-NAME PIC X(31) OCCURS 50.
03 WS-SYSTEM-AND-PROCESS PIC X(15) OCCURS 50.
03 WS-NUMBER-OF-ENTRIES PIC S9(4) COMP VALUE ZERO.
03 WS-INDEX PIC S9(4) COMP VALUE ZERO.
01 WS-GETASSIGNTEXT-PARAM.
03 WS-PORTION PIC X(30).
03 WS-TEXT PIC X(32).
03 WS-MESSAGE-NUMBER PIC S9(4) COMP VALUE 1.
03 WS-RESULT PIC S9(4) COMP VALUE ZERO.
01 WS-PROCESSINFO-PARAM.
03 WS-ERROR PIC S9(4) COMP.
01 WS-LOOKUPPROCESSNAME-PARAM.
03 WS-PROCESS-NAME PIC X(6).
03 FILLER PIC X(4).
03 WS-ANCESTOR-PROCESS-ID PIC X(8).
01 WS-SERVERCLASS-SEND-PARAM.
03 WS-ERROR PIC S9(4) COMP VALUE ZERO.
03 WS-PATHMON-PROCESS-NAME PIC X(15).
03 WS-PATHMON-PROCESS-NAME-LEN PIC S9(4) COMP VALUE 15.
03 WS-SERVER-CLASS-NAME PIC X(15).
03 WS-SERVER-CLASS-NAME-LEN PIC S9(4) COMP VALUE 15.
03 WS-MESSAGE-BUFFER PIC X(300).
03 WS-REQUEST-LEN PIC S9(4) COMP VALUE 63.
03 WS-MAXIMUM-REPLY-LEN PIC S9(4) COMP VALUE 300.
03 WS-ACTUAL-REPLY-LEN PIC S9(4) COMP.
03 WS-TIMEOUT PIC S9(9) COMP VALUE 12000.
01 WS-SERVERCLASS-SEND-INFO-PARAM.
03 WS-ERROR PIC S9(4) COMP VALUE ZERO.
03 WS-PATHSEND-ERROR PIC S9(4) COMP.
03 WS-FILE-SYSTEM-ERROR PIC S9(4) COMP.
01 WS-MY-PROCESS.
03 WS-CPU-PIN PIC S9(4) COMP.
03 WS-PROCESS-ID.
05 WS-PROCESS-NAME PIC X(6).
05 FILLER PIC X(2).
03 WS-SYSTEM-NUMBER PIC 9(4) COMP.
03 WS-SYSTEM-NAME PIC X(8).
01 WS-MOM-PROCESS.
03 WS-PROCESS-ID-GENERIC.
05 WS-BYTE-1 PIC X.
88 WS-LOCAL VALUE "$".
88 WS-NETWORK VALUE "\".
05 FILLER PIC X(5).
05 WS-CPU-PIN PIC S9(4) COMP.
03 WS-PROCESS-ID-LOCAL REDEFINES WS-PROCESS-ID-GENERIC.
05 WS-PROCESS-ID PIC X(6).
05 WS-CPU-PIN PIC S9(4) COMP.
03 WS-PROCESS-ID-NETWORK REDEFINES WS-PROCESS-ID-GENERIC.
05 WS-BACKSLASH PIC X.
05 WS-SYSTEM-NUMBER-1-BYTE PIC X.
05 WS-PROCESS-ID PIC X(4).
05 WS-CPU-PIN PIC S9(4) COMP.
03 WS-SYSTEM-NUMBER PIC 9(4) COMP.
03 WS-SYSTEM-NUMBER-2-BYTES REDEFINES WS-SYSTEM-NUMBER.
05 FILLER PIC X.
05 WS-BYTE-2 PIC X.
03 WS-PROGRAM-FILENAME.
05 FILLER PIC X(16).
05 WS-FILE PIC X(8).
03 WS-SYSTEM-NAME PIC X(8).
03 WS-PROCESS-NAME PIC X(6).
03 WS-SYSTEM-AND-PROCESS PIC X(15).
01 WS-SERVER-IS-ASSOCIATIVE PIC X.
01 WS-VALID-PATHSRV-REQUEST PIC X.
01 SUBSIDIARY-REQUEST.
03 SUBSIDIARY-SERVER.
05 PATHMON-ASSIGN-NAME PIC X(31).
05 PATHMON-SYSTEM-AND-PROCESS PIC X(15).
05 SERVER-CLASS PIC X(15).
01 SUBSIDIARY-REPLY.
03 REPLY-CODE PIC S9(4) COMP.
03 THIS-SERVER.
05 SYSTEM-NAME PIC X(8).
05 PROCESS-NAME PIC X(8).
03 SUBSIDIARY-SERVER.
05 SYSTEM-NAME PIC X(8).
05 PROCESS-NAME PIC X(8).
03 TMF-ABORT-REQUIRED PIC X.
03 ERROR-MESSAGE.
05 PATHSEND-ERROR PIC X(78).
05 FILE-SYSTEM-ERROR PIC X(78).
03 NON-SEND-ERROR-MESSAGE PIC X(78).
01 WS-SERVERCLASS-SEND-OKAY PIC X.
/
PROCEDURE DIVISION.
DECLARATIVES.
DECL-MESSAGE-IN-FILE SECTION.
USE AFTER ERROR PROCEDURE ON MESSAGE-IN-FILE.
MOVE "MESSAGE-IN-FILE" TO WS-LOGICAL-FILE-NAME.
MOVE WS-FILE-STATUS TO WS-FILE-STATUS-ERROR-MESSAGE.
DECL-MESSAGE-OUT-FILE SECTION.
USE AFTER ERROR PROCEDURE ON MESSAGE-OUT-FILE.
MOVE "MESSAGE-OUT-FILE" TO WS-LOGICAL-FILE-NAME.
MOVE WS-FILE-STATUS TO WS-FILE-STATUS-ERROR-MESSAGE.
DECL-ERROR-LOG-FILE SECTION.
USE AFTER ERROR PROCEDURE ON ERROR-LOG-FILE.
MOVE "ERROR-LOG-FILE" TO WS-LOGICAL-FILE-NAME.
MOVE WS-FILE-STATUS TO WS-FILE-STATUS-ERROR-MESSAGE.
END DECLARATIVES.
0000-MAINLINE.
* REQUESTER ON $RECEIVE.
*
* IF AN ERROR IS FOUND WHILE READING $RECEIVE, A MESSAGE IS WRITTEN
* TO THE ERROR-LOG-FILE AND THE PROGRAM STOPS.
PERFORM 0100-INITIALIZE.
PERFORM UNTIL WS-CLOSE-FROM-REQUESTER
READ MESSAGE-IN-FILE
IF WS-FILE-STATUS = ZERO
PERFORM 0200-PROCESS-TRANSACTION
WRITE PATHSRV-REPLY
ELSE
IF NOT WS-CLOSE-FROM-REQUESTER
MOVE WS-FILE-SYSTEM-ERROR-MESSAGE TO ERROR-LOG-REC
PERFORM 9000-WRITE-ERROR-LOG-REC
PERFORM 9900-STOP-RUN
END-IF
END-IF
END-PERFORM
PERFORM 0300-CLOSEDOWN
PERFORM 9900-STOP-RUN.
0100-INITIALIZE.
OPEN EXTEND ERROR-LOG-FILE SHARED.
OPEN INPUT MESSAGE-IN-FILE.
OPEN OUTPUT MESSAGE-OUT-FILE.
PERFORM 0400-BUILD-ASSIGN-TABLE.
PERFORM 0410-GET-MY-SYSTEM-PROCESS.
PERFORM 0420-GET-MOM-SYSTEM-PROCESS.
0200-PROCESS-TRANSACTION.
IF WS-SERVER-IS-ASSOCIATIVE = "N"
MOVE WS-SYSTEM-AND-PROCESS OF WS-MOM-PROCESS
TO WS-PATHMON-PROCESS-NAME
OF WS-SERVERCLASS-SEND-PARAM
ELSE
MOVE "PATHMON NOT KNOWN - SERVER IS ASSOCIATIVE" TO
NON-SEND-ERROR-MESSAGE OF PATHSRV-REPLY
MOVE "N" TO WS-VALID-PATHSRV-REQUEST
END-IF
END-IF
END-IF
END-IF
IF WS-VALID-PATHSRV-REQUEST = "Y"
0300-CLOSEDOWN.
CLOSE ERROR-LOG-FILE.
CLOSE MESSAGE-IN-FILE.
CLOSE MESSAGE-OUT-FILE.
0400-BUILD-ASSIGN-TABLE.
0410-GET-MY-SYSTEM-PROCESS.
* THIS PARAGRAPH GETS THE PROCESS-ID FOR THE CURRENT SERVER PROCESS.
* THIS PROCESS-ID IS RETURNED TO THE REQUESTER IN PATHSRV-REPLY.
* THIS PARAGRAPH GETS INFORMATION ABOUT THE MOM OF THE CURRENT SERVER
* PROCESS. THIS INFORMATION IS USED TO DETERMINE IF THE MOM IS A
* PATHMON. THE MOM PROCESS IS USED IN PATHSEND SENDS IF THE REQUEST
* (IN PATHSRV-REQUEST) DOES NOT SPECIFY A PATHMON (EITHER EXPLICITLY
* OR WITH AN ASSIGN).
IF WS-SERVER-IS-ASSOCIATIVE = "N"
IF WS-LOCAL OF WS-MOM-PROCESS
MOVE WS-PROCESS-ID OF WS-PROCESS-ID-LOCAL OF WS-MOM-PROCESS
TO WS-PROCESS-NAME OF WS-MOM-PROCESS
ELSE
STRING "$"
WS-PROCESS-ID OF WS-PROCESS-ID-NETWORK OF WS-MOM-PROCESS
DELIMITED BY " "
INTO WS-PROCESS-NAME OF WS-MOM-PROCESS
END-IF
ENTER TAL "GETSYSTEMNAME" USING WS-SYSTEM-NUMBER OF WS-MOM-PROCESS
WS-SYSTEM-NAME OF WS-MOM-PROCESS
STRING WS-SYSTEM-NAME OF WS-MOM-PROCESS DELIMITED BY " "
"." DELIMITED BY SIZE
WS-PROCESS-NAME OF WS-MOM-PROCESS DELIMITED BY " "
INTO WS-SYSTEM-AND-PROCESS OF WS-MOM-PROCESS
END-IF.
0440-VALIDATE-PATHSRV-REQUEST.
IF PATHMON-ASSIGN-NAME OF PATHSRV-REQUEST NOT = SPACES AND
PATHMON-SYSTEM-AND-PROCESS OF PATHSRV-REQUEST NOT = SPACES
MOVE "BOTH ASSIGN NAME AND PROCESS NAME SHOULD NOT BE NON-BLANK"
TO NON-SEND-ERROR-MESSAGE OF PATHSRV-REPLY
MOVE "N" TO WS-VALID-PATHSRV-REQUEST
END-IF.
0450-LOOKUP-PATHMON-ASSIGN.
0460-SEND-TO-SUBSIDIARY-SERVER.
USING
WS-PATHMON-PROCESS-NAME OF WS-SERVERCLASS-SEND-PARAM
WS-PATHMON-PROCESS-NAME-LEN OF WS-SERVERCLASS-SEND-PARAM
WS-SERVER-CLASS-NAME OF WS-SERVERCLASS-SEND-PARAM
WS-SERVER-CLASS-NAME-LEN OF WS-SERVERCLASS-SEND-PARAM
WS-MESSAGE-BUFFER OF WS-SERVERCLASS-SEND-PARAM
WS-REQUEST-LEN OF WS-SERVERCLASS-SEND-PARAM
WS-MAXIMUM-REPLY-LEN OF WS-SERVERCLASS-SEND-PARAM
WS-ACTUAL-REPLY-LEN OF WS-SERVERCLASS-SEND-PARAM
WS-TIMEOUT OF WS-SERVERCLASS-SEND-PARAM
GIVING
WS-ERROR OF WS-SERVERCLASS-SEND-PARAM.
IF WS-ERROR OF WS-SERVERCLASS-SEND-PARAM = 0
MOVE "SUCCESSFUL" TO PATHSEND-ERROR OF PATHSRV-REPLY
MOVE WS-MESSAGE-BUFFER OF WS-SERVERCLASS-SEND-PARAM
TO SUBSIDIARY-REPLY
MOVE "Y" TO WS-SERVERCLASS-SEND-OKAY
ELSE
IF WS-ERROR OF WS-SERVERCLASS-SEND-PARAM = 233
PERFORM 0500-ANALYZE-SEND-ERROR-233
ELSE
MOVE "UNEXPECTED ERROR FOUND AFTER SERVERCLASS_SEND_ CALL"
TO PATHSEND-ERROR OF PATHSRV-REPLY
END-IF
END-IF.
0500-ANALYZE-SEND-ERROR-233.
USING
WS-PATHSEND-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM
WS-FILE-SYSTEM-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM
GIVING
WS-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM.
IF WS-FILE-SYSTEM-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM = 48
MOVE "SERVERCLASS_SEND_ SECURITY VIOLATION (ERROR 48)"
TO FILE-SYSTEM-ERROR OF PATHSRV-REPLY
ELSE
IF WS-FILE-SYSTEM-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM = 40
MOVE "SERVERCLASS_SEND_ TIMED OUT (ERROR 40)"
TO FILE-SYSTEM-ERROR OF PATHSRV-REPLY
ELSE
MOVE WS-FILE-SYSTEM-ERROR OF WS-SERVERCLASS-SEND-INFO-PARAM
TO WS-NUMERIC-DISPLAY
STRING "SERVERCLASS_SEND_ FILE SYSTEM ERROR NUMBER : "
WS-NUMERIC-DISPLAY
DELIMITED BY SIZE
INTO FILE-SYSTEM-ERROR OF PATHSRV-REPLY
END-IF
END-IF
END-IF.
0700-SERVERCLASS-SEND-INFO-ERR.
9000-WRITE-ERROR-LOG-REC.
WRITE ERROR-LOG-REC.
9900-STOP-RUN.
STOP RUN.
absolute pathname. An OSS pathname that begins with a slash (/) character and is resolved
beginning with the root directory. See also OSS pathname, relative pathname, and root
directory.
accept operation. An operation in which a screen program waits for a response from the
terminal and allows data to be input into the program data area from the terminal.
advisory message. A message displayed in the terminal advisory field to inform the terminal
operator of errors detected during input checking.
application. A complete set of programs or routines that perform a function. See also
Pathway application and NonStop TUXEDO application.
application terminal. A terminal on which a Pathway application runs. See also command
terminal.
assignment. The use of an ASSIGN command to make logical file assignments for programs
in the Guardian environment. A logical assignment equates a Tandem file name with a
logical file of a program and, optionally, attributes characteristics to that file.
associative server. A process within a server class that can be started outside the Pathway
environment by a process other than the PATHMON process that controls the server
class.
attributes. Those characteristics of an object that influence the operation of that object and
establish its capabilities.
audited file. A database file that is flagged for auditing by the TMF subsystem; auditing is
the monitoring of transactions in preparation for recovery efforts.
audit trail. A record of database changes that can be used by the TMF subsystem to rebuild a
database in the event of a hardware or software failure. An audit trail is also known in
the industry as a transaction log.
availability. The amount of time an application running on a Tandem system can be used
effectively by a user of that application.
backup process. The member of a process pair that takes over the application work when the
primary process fails. See also primary process, process pair, and checkpoint message.
base screen. In SCREEN COBOL, a screen that occupies the entire physical display area of a
terminal and can be displayed independently of other screens. This type of screen can
contain areas on which overlay screens are displayed. See also screen and overlay
screen.
batch processing. A method of transaction processing in which transactions are first grouped
together and then processed at regular intervals. See also online transaction processing
(OLTP).
block mode. A terminal operating mode in which data is read from the terminal and
displayed on the terminal one screen at a time. See also conversational mode.
cascading server. A term formerly used for a nested server. See nested server.
client/server model. A model for distributing applications. In general, but not always, in this
model the client process resides on a workstation and the server process resides on a
second workstation, minicomputer, or mainframe system. Communication takes the
form of request and reply pairs, which are initiated by the client and serviced by the
server. (A server can make requests of another server, thus acting as a client.)
Client/server computing is often used to connect different types of workstations or
COBOL85. The Tandem compiler and run-time support for the American National Standards
Institute (ANSI) programming language COBOL, X.3.23-1985. Pathway server
processes are often written in this language.
cold start. The operation that starts a PATHMON environment for the first time. This
operation either creates a new PATHMON configuration file (PATHCTL file) that
defines the PATHMON environment and its objects or overwrites an existing
PATHMON configuration file (which effectively creates a new PATHMON
environment). See also cool start.
command file. A file that serves as a source for command input. For example, users can
prepare a command file containing PATHCOM or SCREEN COBOL Utility Program
(SCUP) commands. They can then cause the commands in the file to be executed by
issuing the PATHCOM or SCUP OBEY command and specifying the name of the file.
Alternatively, they can specify this file as the input file when they execute PATHCOM or
SCUP.
command interpreter. An interactive program used to run programs, check system status,
create and delete disk files, and alter hardware states.
command terminal. A terminal at which a system manager or operator enters commands for
configuration and management, such as the PATHCOM commands that configure and
manage a PATHMON environment. See also application terminal.
configured TERM object. A TERM object that is explicitly configured with an ADD TERM
command. Such a TERM object exists until it is explicitly deleted. Names of configured
TERM objects begin with a letter. See also temporary TERM object and TERM object.
context-free server. A server that does not retain any information about the processing of
previous requests. A context-free server accepts a single message from a requester,
performs the requested tasks, and issues a single reply to respond to the requester. After
the reply message is issued, the server retains no information, or context, that can be
used in subsequent requests. In general, context-free servers are relatively simple to
program and can be restarted quickly, but they require the requester to pass context
information to the server on each request. Servers handling requests from Pathsend
requesters can be either context-free or context-sensitive, but servers servicing requests
from SCREEN COBOL requesters must be context-free. A context-free server is
analogous to a NonStop TUXEDO request/response server. Tandem subsystems are
context-free servers; therefore, management applications using the Subsystem
Programmatic Interface (SPI) to communicate with Tandem subsystems must pass back
context information in continuation requests. See also context, context-sensitive server,
and Subsystem Programmatic Interface (SPI).
context-sensitive server. A server that retains information about the processing of previous
requests. A context-sensitive Pathway server can engage in a multiple-message
communication, or dialog, with a requester. Because context-sensitive servers must
maintain message context for the dialog, they are more complex to program than
context-free servers. They typically have longer restart times because they must recover
the requester context. See also context and context-free server.
context sensitivity. The ability of a requester to exchange a series of multiple request and
reply messages (that is, a dialog) with a particular server process. See also context-
sensitive server and dialog.
conversational mode. (1) A terminal operating mode in which data is read from the terminal
and displayed on the terminal screen one line at a time. See also block mode and
intelligent mode. (2) The mode of communication that enables an ongoing dialog
between a client (or requester) and a server. Data is sent and received in an iterating
fashion without return to the transaction monitor until the application dialog is
completed. Multiple messages can be exchanged between the client and server
participating in the communication. See also conversational server.
conversational server. A server that offers conversational services and can participate in a
conversation, or dialog, with a client; that is, a context-sensitive server. See also
conversational mode (definition 2), request/response server, and context-sensitive server.
cool start. The operation that restarts a PATHMON environment, using the information in an
existing PATHMON configuration file (PATHCTL file). The PATHMON environment
must have been previously started with a cold start operation. See also cold start.
current working directory. The OSS directory from which relative pathnames are resolved.
See also OSS pathname and relative pathname.
database consistency. The state of a database in which items satisfy established criteria. For
example, an account balance must equal credits to the balance minus debits to the
balance. When the database satisfies these criteria, the database is considered to be
consistent. In general, a database is consistent when it is accurate and all changes
generated by transactions are complete. Database consistency is defined by the
application, which establishes the values and relationships of database fields and
records.
Data Definition Language (DDL). (1) The set of data definition statements within the
Structured Query Language (SQL). (2) A Tandem product for defining data objects in
Enscribe files and translating object definitions into source code.
data integrity. The condition of a database when its data values are accurate, valid, and
consistent according to rules established for changing the database. See also database
consistency.
deadlock. (1) A situation in which two processes cannot proceed because each is waiting for
a reply from the other. (2) A situation in which two transactions cannot proceed because
each is waiting for the other to release a lock.
dedicated device. A term formerly used for a terminal or other input/output device controlled
by a configured TERM object, so that a Pathway application always ran on that device
without having to be started from PATHCOM with a RUN PROGRAM command. (No
new term replaces this term; instead, the manual text now refers to such devices as those
associated with configured TERM objects.) See also nondedicated device and
configured TERM object.
default value. The value that the system uses for a particular attribute or parameter when a
value has not been supplied by the user.
DEFINE. A named set of attributes and associated values. In a DEFINE (as with an ASSIGN
command), users can specify information to be communicated to processes they start.
definition files. A set of files containing data declarations for items related to SPI messages
and their processing. The core definitions required to use SPI are provided in a DDL file
and in several language-specific definition files, one for each programming language
that supports SPI. The Tandem DDL compiler generates the language-specific files from
the DDL file. Subsystems that support SPI provide additional definition files containing
subsystem-specific definitions.
delimiters. Characters that make it possible for a SCREEN COBOL requester and an external
device or front-end process to exchange compact variable-length messages efficiently;
delimiters can be message delimiters or field delimiters.
descriptor. For each elementary data item, the SCREEN COBOL compiler builds a data
structure that describes the size, type, usage, and dependencies of the item. All of the
information that pertains to a given item makes up the descriptor for that item. For
example, the PICTURE specification is included in the descriptor. The descriptors are
passed to the TCP in the pseudocode and provide a dictionary of information for
interpreting and handling incoming data. When the MAP or SMAP compiler option is
used, the descriptors appear in the compiler map at the end of the listing.
diagnostic screen. A screen of information that is displayed to inform the terminal operator
of error conditions and termination status.
disk process. In the Tandem NonStop Kernel operating environment, the portion of the
operating-system software that performs read, write, and lock operations on disk
volumes and creates TMF audit records. See also file system.
display attribute. A terminal display feature that is given a screen data name. The screen
data name can be associated with a predefined system name in the SPECIAL-NAMES
paragraph and thus be manipulated by a SCREEN COBOL program.
distributed data. Information (for example, customer names and addresses, inventory items,
and personnel records) that resides on more than one node in a network and can be
accessed by authorized users from any node in that network.
double-byte character. A character represented in two bytes. See also double-byte character
set.
double-byte character set (DBCS). A character set, such as Tandem Kanji, that uses two
bytes of data to represent a single character.
dynamic server. A server process that the PATHMON process creates after a TCP or
LINKMON process has waited for a specified time period for a static server to become
available. A dynamic server process exists only as long as it is needed. See also static
server.
EDIT file. A source text file that can be augmented and modified by the user through a
Tandem text editor program such as TEDIT (PS Text Edit).
Enable product. A tool provided by Tandem that allows users to develop simple data
management applications without using a conventional programming language. The
Enable product can generate SCREEN COBOL programs for use with Enscribe
databases.
Enscribe database record manager. Tandem database management software that provides a
record-at-a-time interface between servers and a distributed database. See also NonStop
SQL/MP.
event log file. A file maintained by the Event Management Service (EMS) for logging of
event messages.
Event Management Service (EMS). A part of DSM used to provide event collection, event
logging, and event distribution facilities. It provides for different descriptions of events
for people and for programs, lets an operator or application select specific event-
message data, and allows for flexible distribution of event messages within a system or
network. EMS has an SPI-based programmatic interface for reporting and retrieving
events. See also event message.
event message. A special kind of SPI message that describes an event occurring in the system
or network. Event messages are collected, logged, and distributed by EMS. See also
Event Management Service (EMS).
Expand networking software. Tandem software that can connect up to 255 Tandem
NonStop systems into a single network.
extensible structured token. In the Subsystem Programmatic Interface (SPI), a token with a
value that can be extended by appending new fields in later releases. The token is
accessed through reference to a token map containing field-version and null-value
information, allowing SPI to provide compatibility between different versions of the
structure. See also simple token and token (definition 2).
external process. A process in a different PATHMON environment from the process with
which it is communicating. For example, suppose a TCP managed by PATHMON
process $PMB requests a link to a server process in a server class that is managed by
PATHMON process $PMA. Both the TCP and PATHMON process $PMB are external
processes with respect to PATHMON process $PMA and the server class managed by
$PMA.
fault tolerance. The ability of a Tandem NonStop system to continue processing despite the
failure of any single software or hardware component within the system.
file identifier (file ID). In the Guardian environment, the portion of a file name following the
subvolume name. In the OSS environment, a portion of the internal information used to
identify a file in the OSS file system. The two identifiers are not comparable.
file name. In the Guardian environment, the set of node name, volume name, subvolume
name, and and file identifier characters that uniquely identifies a file. This name is used
to open a file and thereby provide a connection between the opening process and the file.
See also fully qualified file name, partially qualified file name, OSS filename, and OSS
pathname.
file-name expansion. The expansion of a partially qualified Guardian file name for a disk file
to include the associated node, volume, and subvolume names.
file system. (1) In the Guardian environment, the application program interface for
communication between a process and a file. A file can be a disk file, a device other than
a disk, or another process. (2) In the OSS environment, a collection of files and file
attributes. A file system provides the namespace for the file serial numbers that uniquely
identify its files.
File Utility Program (FUP). A Tandem product that allows users to create, copy, purge, and
otherwise manipulate disk files interactively.
fixed-function terminal. A nonintelligent device (that is, a device without processing ability)
capable of sending and receiving information over communications lines. Fixed-function
terminals are often referred to as dumb terminals.
freeze condition. A condition in which communication between a terminal and a server class
is prohibited. See also thaw condition.
front-end process. A process, such as the process that accepts the TCP terminal-data stream,
that serves as the intermediary between one system, process, or device and another.
fully qualified file name. The complete name of a file in the Guardian environment. For a
permanent disk file, this consists of a node name (system name), volume name,
subvolume name, and file identifier (file ID). In interactive interfaces such as
PATHCOM and TACL, the parts of a file name are separated by periods. See also
partially qualified file name.
gateway process. A process, such as the Transaction Delivery Process (TDP) that is part of
RSC, that manages communications between dissimilar environments (for example, a
workstation and a Tandem system). A gateway process both transfers information and
converts it to a form compatible with the protocols used by the destination environment.
graphical user interface (GUI). A type of screen interface that typically includes pull-down
menus, icons, dialog boxes, and online help.
Guardian. An environment available for interactive or programmatic use with the Tandem
NonStop Kernel. Processes that run in the Guardian environment use the Guardian
system procedure calls as their application program interface, and might also use related
APIs such as the Pathsend and TMF procedure calls. See also Open System Services
(OSS).
Guardian environment. The Guardian API, tools, and utilities. See also Guardian.
high PIN. A process identification number (PIN) in the range 256 through 65535. See also
process identification number (PIN) and low PIN.
Inspect. The Tandem debugging tool that can be used interactively to examine and modify
the execution of Guardian processes and SCREEN COBOL requester programs.
intelligent device support (IDS) facility. A feature of the TCP that supports access to
Pathway server classes by intelligent devices. This facility allows SCREEN COBOL
requester programs to interact with external processes that, in turn, control devices such
as personal computers, automated teller machines, and point-of-sale devices.
intelligent mode. An operating mode in which data and messages are sent between an
intelligent device and the Pathway environment. See also conversational mode
(definition 1), intelligent device, and message-oriented requester.
interactive mode. An operating mode in which commands are entered from a terminal
keyboard.
I/O process. In the Guardian environment, a system process to manage input/output devices.
Applications use the Guardian file system to send requests to I/O processes. See also file
system.
keyword. A word in a command string or programming language that must be spelled and
positioned in a prescribed way, usually to indicate the meaning of an adjacent parameter.
library. A set of related files or common files that can be accessed by multiple programs or
processes.
link. (1) An open of a server process within a server class. When a link manager—that is, a
TCP or a LINKMON process—sends a request to a PATHMON process for a link to a
server in a specified server class, the PATHMON process selects a server process in that
server class (possibly starting a new server process if necessary) and then returns the
name of the server process to the requesting link manager. See also link granting and
link manager. (2) To examine, collect, associate together, and modify code and data
blocks from one or more object files to produce a target object file. On Tandem NonStop
systems, linking for TNS/R native object files is performed by the nld utility.
link access. The actual transfer of data from a requester to a server process. In the Pathway
environment, link access is provided by TCPs and LINKMON processes. See also link
granting.
link granting. The process of selecting a particular server process in a server class to handle
a request from a link manager (TCP or LINKMON process) on behalf of a requester.
In the Pathway environment, link granting is done by the PATHMON process. See also
link and link access.
link management. The act of coordinating the sharing of links between requester or client
processes and server processes.
link manager. A process that requests links to server processes and provides link access after
the link is granted. TCPs and LINKMON processes are the link managers in the
Pathway environment. See also link access and link granting.
LINKMON process. A Guardian process that supports access to servers in the Pathway and
NonStop TUXEDO environments. LINKMON processes act as link managers for
requesters and clients that use the Pathsend procedure calls and other interfaces such as
RSC, POET, and the NonStop TUXEDO ATMI. See also link manager.
lock. A mechanism that coordinates access to the same data; locks are either shared or
exclusive.
log file. See PATHMON log file and event log file.
low PIN. A process identification number (PIN) in the range 0 through 255. (PIN 255 is
reserved by the system; it is never assigned to a running process, but is used by high-PIN
processes to communicate with low-PIN processes.) See also process identification
number (PIN) and high PIN.
message-oriented requester. A SCREEN COBOL requester that sends data from working
storage to a device (or to a front-end process that controls a device) and receives data
from the device or process into working storage by way of Message Section templates.
SCREEN COBOL requesters that use the intelligent device support (IDS) facility are
message-oriented. These requesters use SEND MESSAGE statements and their REPLY
clauses in the Procedure Division to interact with the intelligent devices or front-end
processes. See also screen-oriented requester.
Message Section. A section in the Data Division of a SCREEN COBOL source program that
describes the data type, size, and relative position (sequence) of each field in a message
template. This section also defines the editing and conversion that must be performed on
each field. See also message-oriented requester.
mixed data item. A data item that contains both single-byte and double-byte characters; in a
COBOL or SCREEN COBOL program, these data items are declared as PIC X.
modified data tag (MDT). In SCREEN COBOL, a bit that is set or reset to indicate whether
data in an associated field is to be sent to the computer from the terminal.
multithreaded. A programming model that provides more than one thread of control within a
program. Multithreading allows multiple sequential processing tasks to be executed
concurrently within a process: for example, a terminal control process (TCP). See also
thread and single-threaded.
native System/T client. In the NonStop TUXEDO environment, a client program that
executes in the Open System Services (OSS) environment and communicates directly
with System/T. An example of this type of client is the Pathway translation server for the
NonStop TUXEDO system. Also called a NonStop TUXEDO native client.
nested server. A server that acts as a requester by sending requests to other servers. In the
Pathway environment, such requests are made by calls to Pathsend procedures.
nld utility. A utility that collects, links, and modifies code and data blocks from one or more
object files to produce a target TNS/R native object file.
node. A Tandem NonStop system that is part of an Expand network. The name of the node,
also called the system name, is the first of four parts of a file name in the Guardian
environment. See also Expand networking software.
no-early-reply rule. The rule that states that when a server process reads a request message,
it should completely process the request before it replies to it.
nondedicated device. A term formerly used for a terminal or other input/output device on
which a Pathway application could be started from PATHCOM with a RUN PROGRAM
command. The RUN PROGRAM command results in the creation of a temporary
TERM object to control the terminal. (No new term replaces this term; instead, the
manual text now refers to such devices as those associated with temporary TERM
objects.) See also dedicated device and temporary TERM object.
NonStop SQL/MP. The Tandem relational database management system that promotes
efficient online access to large distributed databases. See also Structured Query
Language (SQL) and Enscribe database record manager.
NonStop TUXEDO application. The collection of machines, servers and services, and
System/T components defined by a single configuration file in the NonStop TUXEDO
environment. See also NonStop TUXEDO transaction processing environment and
Pathway application.
NonStop TUXEDO system. Tandem’s implementation of the BEA Systems, Inc., TUXEDO
enterprise transaction processing system. Major features of the NonStop TUXEDO
implementation include the use of the Tandem core services (Tandem NonStop Kernel,
NonStop Transaction Services/MP, and NonStop Transaction Manager/MP) to provide
the Tandem fundamentals (scalability, availability, and manageability) for TUXEDO
applications. The NonStop TUXEDO system runs in the OSS operating environment on
Tandem NonStop systems. See also OSS environment.
object file. A file generated by a compiler, linker, or binder that contains machine instructions
and other information needed to construct the executable code spaces and initial data for
a process. The file can be a complete program that is ready for immediate execution, or
it can be incomplete and require linking with other object files before execution.
Compilers for languages such as COBOL85 produce object code. See also pseudocode
file.
used for many different kinds of business tasks such as order processing, inventory
control, accounting functions, and banking operations. See also batch processing.
online transaction processing (OLTP) application. A set of programs that perform online
transaction processing (OLTP) tasks on behalf of the user. With an OLTP application,
many terminal users can update data simultaneously, recording the changes in the
database as they are entered. OLTP applications generally display, check, and accept
input data; manipulate the input data; and perform some type of data-output activity.
Open System Services (OSS). An open system environment available for interactive or
programmatic use with the Tandem NonStop Kernel. Processes that run in the OSS
environment use the OSS application program interface; interactive users of the OSS
environment use the OSS shell for their command interpreter. See also Guardian and
Guardian environment.
OSS environment. The NonStop Kernel Open System Services (OSS) API, tools, and
utilities. See also Open System Services (OSS).
OSS filename. A component of an OSS pathname containing any valid characters other than
a slash (/) or a null. See also file name, OSS pathname, and file system (definition 2).
OSS pathname. The string of characters that uniquely identifies a file within its file system
in the OSS environment. A pathname can be either absolute or relative. See also
absolute pathname, relative pathname, and file system (definition 2).
OSS username. A string that uniquely identifies a user within the user database for a node.
overlay area. In SCREEN COBOL, an area of a base screen within which an overlay screen
can be displayed.
overlay screen. In SCREEN COBOL, a screen that is displayed in an overlay area of a base
screen. A base screen can be used with various overlay screens. See also screen and base
screen.
partially qualified file name. A Guardian file name in which only the right-hand file-name
parts are specified. The remaining parts of the file name assume default values. See also
fully qualified file name.
PATHCOM. (1) The interactive interface to the PATHMON process, through which users
enter commands to configure and manage Pathway applications. (2) The process that
provides this interface.
PATHCOM command file. A file of PATHCOM commands that define and add the
PATHMON-controlled objects required to execute an application. This file can contain
all of the commands needed to start a PATHMON environment.
PATHMON environment. The servers, server classes, TCPs, terminals, SCREEN COBOL
programs, and tell messages that run together under the control of one PATHMON
process.
PATHMON log file. A file used by a PATHMON process for reporting errors and changes in
status.
PATHMON object. An object of type PATHMON; that is, a PATHMON process. See also
PATHMON process and PATHMON-controlled object.
PATHMON process. The central controlling process in the Pathway environment. The
PATHMON process maintains configuration-related data; grants links to server classes
in response to requests from TCPs and LINKMON processes; and performs all process
control (starting, monitoring, restarting, and stopping) of server processes and TCPs.
Pathsend procedures. The set of Guardian procedure calls that provide general access to
Pathway server classes from any process on a Tandem system.
PATHTCP2. The TCP object file, usually identified by the file name
$SYSTEM.SYSTEM.PATHTCP2.
Pathway application. A set of programs that perform online transaction processing tasks in
the Guardian environment, using interfaces defined by Tandem. A Pathway application
can include SCREEN COBOL requesters, Pathsend requesters, and Pathway servers
running on Tandem NonStop systems. It can also include GDSX front-end processes and
clients that use RSC or POET. See also NonStop TUXEDO application.
Pathway object. An object in the Pathway transaction processing environment. The set of
Pathway objects is a more inclusive set than the set of PATHMON-controlled objects:
for example, a LINKMON process is a Pathway object but not a PATHMON-controlled
object. See also object, PATHMON-controlled object, and Pathway transaction
processing environment.
Pathway Open Environment Toolkit (POET). A set of programs and utilities that helps
programmers create and run client/transaction server applications. In the POET
environment, the client is a program running on a workstation, and the server is a
Pathway server running on a Tandem NonStop system. POET uses the services of the
Remote Server Call (RSC) product. The programming tools provided by POET include
a simplified programming interface, name mapping, and conversion mapping.
Pathway subsystem. The PATHMON environment components to which SPI commands are
sent under the Pathway subsystem ID and which generate EMS event messages with the
Pathway subsystem ID. All SPI commands for the Pathway subsystem are sent to the
PATHMON process, but the processsing for the command might involve other
processes, such as a TCP. Likewise, all EMS messages from the Pathway subsystem are
generated by the PATHMON process, but the information might originate from another
process. See also subsystem ID.
Pathway system. A term formerly used for the set of objects managed by a particular
PATHMON process; now called PATHMON environment. See PATHMON environment.
Pathway translation server for the NonStop TUXEDO system. A server process, provided
by Tandem as part of the NonStop TUXEDO product, that allows a Pathway (SCREEN
COBOL or Pathsend) requester to use the services of a NonStop TUXEDO server. The
translation server thus acts as a gateway process between the Pathway environment and
the NonStop TUXEDO environment. Requesters that use this translation server must
include special information in the header of each request message to identify the target
NonStop TUXEDO application and service.
Pathway/TS. A Tandem product that provides tools for developing and interpreting screen
programs to support OLTP applications in the Guardian environment on Tandem
NonStop systems. Pathway/TS screen programs communicate with terminals and
intelligent devices. Pathway/TS includes the TCP, the SCREEN COBOL compiler and
run-time environment, and the SCREEN COBOL Utility Program (SCUP). It requires
the services of the NonStop TS/MP product. See also NonStop Transaction Services/MP
(NonStop TS/MP).
POBJ. The default prefix, or file-name root, used by the SCREEN COBOL compiler in
naming its output files. If no prefix is specified in the RUN command to run the
compiler, the compiler produces a code file named POBJCOD, a directory file named
POBJDIR, and (if the SYMBOLS option is enabled) a symbols file named POBJSYM.
primary process. The currently active process of a process pair in the Guardian environment.
See also backup process and process pair.
process. (1) A unique execution of a program in the Guardian environment. (2) An entity in
the OSS environment consisting of an address space, a single thread of control that
executes within that address space, and the system resources required by that thread of
control. See also process type.
process identification number (PIN). An unsigned integer that identifies a process within a
processor module in a Tandem NonStop system.
process management. The act of configuring, creating, and initializing processes; the
monitoring and stopping of processes; and the recovery of failed processes. The
PATHMON process provides process management functions for OLTP applications on
Tandem NonStop systems.
process type. An attribute of a server class indicating whether the server processes in that
server class are Guardian processes or OSS processes. See also process.
PROGRAM object. A template for creating and starting temporary TERM objects. See also
temporary TERM object.
pseudocode file. A file containing compiled code that is interpreted by software instead of
being executed by the hardware. The SCREEN COBOL compiler produces pseudocode
to be interpreted by the TCP. See also object file.
pseudo Pathsend procedure. In the Extended General Device Support (GDSX) software,
one of the TSCODE-supported procedures that have Pathsend procedure counterparts.
relative pathname. An OSS pathname that does not begin with a slash (/) character.
A relative pathname is resolved beginning with the current working directory. See also
OSS pathname, absolute pathname, and current working directory.
Remote Duplicate Database Facility (RDF). The Tandem software product that assists in
disaster recovery for OLTP production databases, monitors database updates audited by
the TMF subsystem on a primary system, and applies those updates to a copy of the
database on a remote system.
Remote Server Call (RSC). A Tandem software product that facilitates client/server
computing, allowing personal computer (PC) or workstation applications running under
Microsoft Windows software or the MS-DOS or OS/2 operating system to access
Pathway server classes and Guardian processes. Transactions are transmitted from the
PC or workstation application (the client) to a Pathway application running on a Tandem
NonStop system (the server) by means of a supported communications protocol, such as
NETBIOS, TCP/IP, or an asynchronous connection.
reply translation header. A group of header fields that the Pathway translation server for the
NonStop TUXEDO system inserts at the beginning of each reply message it relays from
the application service to a SCREEN COBOL or Pathsend requester. This header
indicates whether the request was processed successfully and whether the reply contains
data returned by the application service. See also request translation header.
requester/server model. A model for application design that divides the tasks of data input,
data manipulation, and data output between two basic types of process: requesters and
servers. A requester sends a request to a server. The server takes the requested action and
then replies to the requester. The requester and server may reside on the same processor
or on different processors. This model is used for interprocess communication in the
Guardian environment. See also requester and server.
executed until completion, it does not have any dialog with the requester, and it sends
back a return value to the requester. A request/response server is analogous to a context-
free Pathway server.
request translation header. A group of header fields that must be included at the beginning
of each request message a SCREEN COBOL or Pathsend requester sends to the
Pathway translation server for the NonStop TUXEDO system. This header specifies the
NonStop TUXEDO application service for which the message is destined, the NonStop
TUXEDO buffer types of the request and reply messages as seen by the service, and
options that modify the invocation of the service. The translation server removes this
header from the request message before sending it to the application service. See also
reply translation header.
resources. The components of a computer system that work together to process transactions.
Terminals, workstations, CPUs, memory, I/O controllers, disk drives, processes, files,
and applications are examples of resources.
response time. The amount of time it takes to receive a response from the system after
initiating a request message (for example, by pressing a function key).
retryable operation. An operation that can be interrupted and repeated an indefinite number
of times without affecting the consistency of the database; for example, all read
operations are retryable.
root directory. An OSS directory associated with a process that the system uses for pathname
resolution when a pathname begins with a slash (/) character. See also OSS pathname.
scalability. The ability to increase the size and processing power of an online transaction
processing system by adding processors and devices to a system, systems to a network,
and so on, and to do so easily and transparently without bringing systems down.
Scalability is also sometimes called expandability.
SCOBOLX. The object file for the SCREEN COBOL compiler program. This name is given
in a TACL command to invoke the compiler. See also SCREEN COBOL.
screen. A group of data fields that represent formatted data to be displayed on a terminal.
A screen is defined by a screen description entry in the Screen Section of a SCREEN
COBOL program. There are two types of screen: base screens and overlay screens. See
also base screen, overlay screen, and screen description entry.
SCREEN COBOL. A procedural language developed by Tandem and based on COBOL that
is used to define and control screen displays on terminals and other input/output devices.
SCREEN COBOL allows programmers to write requester programs that communicate
with operator terminals and intelligent input/output devices, and that send data to server
processes that manage application databases. SCREEN COBOL programs are compiled
into pseudocode form by the SCREEN COBOL compiler and then interpreted by the
TCP. See also terminal control process (TCP).
SCREEN COBOL Utility Program (SCUP). A utility that provides control and
manipulation of SCREEN COBOL object files.
screen description entry. A declaration of a base screen, and, optionally, an overlay screen,
in the Screen Section of a SCREEN COBOL program. See also screen, base screen, and
overlay screen.
screen-oriented requester. A SCREEN COBOL requester that sends data from working
storage to the display screen of a terminal by way of screen templates defined in the
Screen Section of the Data Division. Similarly, such a requester receives data from the
terminal into working storage by way of Screen Section templates. It uses ACCEPT and
DISPLAY statements in the Procedure Division to interact with the display terminals.
Standard SCREEN COBOL requesters are screen-oriented. See also message-oriented
requester.
screen program. A SCREEN COBOL requester program. See also SCREEN COBOL.
Screen Section. A section in the Data Division of a SCREEN COBOL source program that
describes the types and locations of fields in screens that can be displayed on a terminal.
server. (1) A process or program that provides services to a client or a requester. Servers are
designed to receive request messages from clients or requesters; perform the desired
operations, such as database inquiries or updates, security verifications, numerical
calculations, or data routing to other computer systems; and return reply messages to the
clients or requesters. A server process is a running instance of a server program. (2) A
combination of hardware and software designed to provide services in response to
requests received from clients across a network. For example, Tandem’s Himalaya
servers provide transaction processing, database access, and other services. (In the
NonStop TS/MP and Pathway/TS manual set, the word “server” is generally used only
when definition 1 is meant; for definition 2, “system” is usually used instead of
“server.”) See also client, requester, client/server model, and requester/server model.
server class. A group of duplicate copies of a single server process, all of which execute the
same object program. Server classes are configured through the PATHMON process.
server-class send operation. The sending of a message to a Pathway server class by making
a call to a Pathsend procedure. The SERVERCLASS_SEND_,
simple token. In the Subsystem Programmatic Interface (SPI), a token consisting of a token
code and a value that is either a single elementary field, such as an integer or a character
string, or a fixed (nonextensible) structure. See also extensible structured token and
token (definition 2).
special register. A data item defined by the SCREEN COBOL compiler, rather than
explicitly in the program. Each special register has a particular purpose and should be
used only as defined. The SCREEN COBOL language defines a different set of special
registers from those defined by the standard COBOL language.
static server. A server process that the PATHMON process creates when a START SERVER
command is issued. The PATHMON process starts the number of static servers defined
by the NUMSTATIC attribute for the server class. See also dynamic server.
subsystem. In the context of the Subsystem Programmatic Interface (SPI) and the Event
Management Service (EMS), a process or collection of processes that gives users access
to a set of related resources or services. A subsystem typically controls a cohesive set of
objects. The Pathway subsystem includes PATHMON processes, TCPs, and all other
components of the PATHMON environment.
subsystem processes, such as the PATHMON process, for configuration and control of
objects and for event management.
subvolume. A related set of files, as defined by the user, within the Guardian environment.
The name of a subvolume is the third of the four parts of a file name.
swap file. A temporary file created by a process for temporary storage: for example, by the
Kernel Managed Swap Facility (KMSF) on behalf of a TCP for temporary storage of
terminal context.
syncdepth. A parameter to Guardian procedure calls that sets the maximum number of
operations or messages that a process is allowed to queue before action must be taken or
a reply must be performed.
sync ID. A value used in the Guardian environment to determine whether an I/O operation
has finished. In active backup programming, a file’s sync ID is used to prevent the
backup process from repeating I/O operations that have already been completed by the
primary process.
system name. (1) The first of the four parts of a Guardian file name; also called a node name.
(2) A name that identifies the Tandem system on which a PATHMON process is
running. In SCREEN COBOL programs, this name is given in SEND statements. (3) A
SCREEN COBOL word that identifies part of the Tandem operating environment; a
name can be associated with function keys or terminal display attributes.
System/T. The transaction monitor for a NonStop TUXEDO system. See also NonStop
TUXEDO application.
Tandem Advanced Command Language (TACL). The user interface to the Tandem
NonStop Kernel in the Guardian environment. The TACL product is both a command
interpreter and a command language.
Tandem Alliance. Tandem’s marketing and technical support program for third-party
vendors, which encourages the development of application software for the Pathway
environment. The Alliance attracts software developers, value-added resellers, and other
vendors who can provide industry-specific and general business applications for Tandem
customers.
Tandem NonStop Kernel. The operating system for Tandem NonStop systems. The
operating system does not include any application program interfaces.
Tandem NonStop Series (TNS). Tandem computers that support the Tandem NonStop
Kernel and that are based on complex instruction-set computing (CISC) technology.
TNS processors implement the TNS instruction set. See also complex instruction-set
computing (CISC) and Tandem NonStop Series/RISC (TNS/R).
Tandem NonStop Series/RISC (TNS/R). Tandem computers that support the Tandem
NonStop Kernel and that are based on reduced instruction-set computing (RISC)
technology. TNS/R processors implement the RISC instruction set and are upwardly
compatible with the TNS system-level architecture. See also reduced instruction-set
computing (RISC) and Tandem NonStop Series (TNS).
task. The sequence of SCREEN COBOL program units that are executed as a result of a
PATHCOM START TERM or RUN PROGRAM command or an SPI START TERM or
START PROG command.
TEDIT. A Tandem text editor used to create or modify a source text file. Also called PS Text
Edit.
TELL object. A temporary object used in PATHCOM and SPI commands to define a tell
message.
temporary TERM object. A TERM object created by the PATHMON process when a
PATHCOM RUN PROGRAM command or an SPI START PROG command is issued.
Temporary TERM objects are deleted by the PATHMON process when application
processing is completed or when a STOP TERM or ABORT TERM command is issued.
Names of temporary TERM objects begin with a number. See also configured TERM
object and TERM object.
terminal. An I/O device capable of sending and receiving information over communications
lines.
terminal context. Data maintained by a TCP for each active terminal under its control.
terminal control process (TCP). A process used for terminal management and transaction
control, provided by Tandem as part of the Pathway/TS product. A TCP is a
multithreaded process that interprets compiled SCREEN COBOL requester programs
(screen programs) in the user’s application, executing the appropriate program
instructions for each I/O device or process the TCP is configured to handle. The TCP
coordinates communication between screen programs and their I/O devices or processes
and, with the help of the PATHMON process, establishes links between screen programs
and server processes. See also requester and SCREEN COBOL.
terminal data area (TDA). In SCREEN COBOL, the area that the TCP allocates for
terminal context data. The MAXTERMDATA parameter of the PATHCOM SET TCP
command defines the upper limit for this data area.
TERM object. A definition of a task that uses a SCREEN COBOL program to control an
input/output device such as a terminal or workstation, or an input/output process such as
a front-end process. A TERM object can be either explicitly configured with an ADD
command or created by the PATHMON process through a PATHCOM RUN PROGRAM
or SPI START PROG command. TERM objects created by the latter method are called
temporary TERM objects. See also configured TERM object and temporary TERM
object.
thread. A task that is separately dispatched and that represents a sequential flow of control
within a process (for example, a TCP).
throughput. The number of transactions a system can process in a given period, such as one
second.
TMF level recovery. Recovery of the database to a consistent state through the use of the
TMF subsystem. When a failure occurs, the TMF subsystem allows the application to
back out the entire transaction, returning the contents of the database to the values it
held when the transaction was started. The application can then retry the transaction.
token. (1) An attribute control element in the CONTROLLED clause of a SCREEN COBOL
program, which allows run-time control of display attributes. This token consists of an
attribute identifier and an attribute value. (2) In the Subsystem Programmatic Interface
(SPI), a distinguishable unit in a message. An SPI token consists of an identifier (token
code or token map) and a token value. Programs place tokens in an SPI buffer by calling
the SSPUT procedure and retrieve them from the buffer by using the SSGET procedure.
transaction backout. A TMF subsystem activity in which the effects of a partially completed
transaction are canceled.
Transaction Delivery Process (TDP). A multithreaded gateway process, part of the Remote
Server Call (RSC) product, that runs on a Tandem NonStop system. The TDP can be
replicated and can manage many connections and workstations at one time, as well as
multiple sessions from each workstation.
transaction identifier. A unique name that the TMF subsystem assigns to a transaction.
transaction mode. The operating mode of a requester program between the execution of a
BEGINTRANSACTION procedure call or statement and the execution of the associated
ENDTRANSACTION or ABORTTRANSACTION call or statement.
TSCODE. The object code for the part of a GDSX process that is supplied by Tandem.
TSCODE includes generic routines and services that support the development of a
multithreaded, fault-tolerant front-end process. See also USCODE and Extended
General Device Support (GDSX).
tuning. The process by which a system manager allocates and balances resources for
optimum system performance.
unsolicited message. A message that is sent to a SCREEN COBOL program and includes
application-dependent information to be processed by the program. Although the
program does not do anything to initiate the message, the message must conform to the
format defined by the program. The message is sent first to the TCP. It contains a header
with information that is used by the TCP and a body with information that the TCP
delivers to the SCREEN COBOL program.
unsolicited-message processing (UMP). The feature that allows terminals running SCREEN
COBOL requesters to accept and reply to unsolicited messages sent to them by Guardian
processes outside of the PATHMON environment.
USCODE. The object code for the part of a GDSX process that is developed by the user to
provide device or access-method specifics such as control operations or data-stream
translation. USCODE is bound with TSCODE to produce an operational GDSX process.
See also TSCODE and Extended General Device Support (GDSX).
user conversion procedure. A procedure that lets users make their own validation checks or
conversions of data passed between a SCREEN COBOL program and a terminal screen
or intelligent device.
volume. A disk drive, or a pair of disk drives that forms a mirrored disk, in the Guardian
environment. The name of a volume is the second of the four parts of a file name.
$RECEIVE. A special Guardian file name through which a process receives and optionally
replies to messages from other processes by using Guardian procedure calls. This file is
analogous to a request queue defined for a NonStop TUXEDO server.
FESCErr (error 233) 5-6, 5-7, 5-12, 5-13, FEScTransactionAborted (error 934) 6-14
5-17 FEScUnknownServerClass (error 914) 6-7
FEScError (error 233) 3-9 FESecViol (error 48) 6-3, 6-4
FEScInvalidBufferLength (error 911) 6-6 FETimeout (error 40) 6-3, 6-4
FEScInvalidFlagsValue (error 909) 6-6 Fields, database 2-9
FEScInvalidPathmonName (error 901) 6-2 FILEINFO 5-26
FEScInvalidSegmentId (error 907) 6-5 Files
FEScInvalidServerClassName (error database 2-9/2-10
900) 6-2
entry-sequenced 2-10
FEScInvalidTimeoutValue (error 919) 6-9
I/O, in SCREEN COBOL
FEScLinkmonConnect (error 947) 6-14 requesters 2-12
FEScMissingParameter (error 910) 6-6 key-sequenced 2-10
FEScNoSegmentInUse (error 908) 6-5 relative 2-10
FEScNoSendEverCalled (error 906) 6-5 unstructured 2-10
FEScNoServerLinkAvailable (error File-number parameter 5-26
905) 4-3, 6-5
File-system errors
FEScOutstandingSend (error 928) 6-12
See Errors, file-system
FEScParameterBoundsError (error 912) 6-6
FILE_GETRECEIVEINFO_
FEScPathmonConnect (error procedure 4-14, 4-16
902) 4-11/4-12, 6-3
flag parameter 3-9
FEScPathmonMessage (error 903) 6-4
Flags, invalid value (error 909) 6-6
FEScPathmonShutDown (error
915) 4-11/4-12, 6-7 FORTRAN, for Pathway servers 1-8
FEScPFSUseError (error 920) 6-9 Front-end process 2-16/2-18
FEScSendOperationAborted (error 918) 6-9 Frozen server class (error 913) 6-7
FeScSendOperationAborted (error Fundamentals of Tandem NonStop
918) 5-27 systems 1-3/1-7
FEScServerClassFrozen (error 913) 6-7
FEScServerClassTmfViolation (error G
917) 3-5, 6-8 GDSX (Extended General Device Support)
FEScServerCreationFailure (error 916) 6-8 processes 1-10, 2-16/2-18, 2-24
FEScServerLinkConnect (error 904) 3-4, Guardian operating environment
6-4 distributed processing in 1-7
FEScTooManyDialogs (error 927) 6-12 processes in 1-5
FEScTooManyPathmons (error 921) 6-9 security features of 1-6
FEScTooManyRequesters (error 925) 6-11 servers in 1-8, 2-19
FEScTooManySendRequests (error
924) 6-11
FEScTooManyServerClasses (error
H
922) 6-10 Halts, CPU 4-3
FEScTooManyServerLinks (error 923) 4-3,
6-10
NonStop TS/MP Pathsend and Server Programming Manual– 132500
Index- 5
Index I
I L
IDS Languages supported
See Intelligent device support (IDS) Pathsend requesters 1-10
Industrial robots 2-16 Pathway servers 1-8
Input file structure example B-6 Limits, Pathsend environment A-1
Inspect product 1-14 link denied (error 4) 4-3
Intelligent device support (IDS) Link management, with LINKMON
description 2-12 process 1-11, 2-13
GDSX programming for 2-17 LINKMON process
overview 1-7 connect error (error 947) 6-14
RSC requesters 1-12, 2-15 description 1-11
Intelligent mode 2-12 failures 4-3
Interoperation GDSX, relationship to 2-17/2-18
of Pathsend requesters with NonStop limits errors 3-4
TUXEDO servers 1-13 RSC, relationship to 1-12, 2-15
of Pathway servers with NonStop servers, relationship to 4-2
TUXEDO requesters (clients) 1-13 TMF transaction identifiers 5-24
with NonStop TUXEDO requesters Links
(clients) 4-17
allocating space for 4-3
with NonStop TUXEDO servers 3-11
server connect error (error 904) 6-4
Interprocess communication,
Pathsend 1-11, 3-2 static and dynamic 3-4
Invalid buffer length (error 911) 6-6 too many server links (error 923) 6-10
Invalid dialog (error 926) 6-11 Locking of records 4-8, 4-10
Invalid flagsValue (error 909) 6-6
Invalid PATHMON name (error 901) 6-2 M
Invalid server class name (error 900) 6-2 Manageability
Invalid timeout value (error 919) 6-9 of Pathway applications 1-4
I/O provided by server classes 1-8
cancel outstanding, example B-19 Management interfaces 1-8, 2-19
complete outstanding, example B-20 See also PATHCOM interface, SPI
starting example B-13 (Subsystem Programmatic Interface)
Message buffer
K SERVERCLASS_DIALOG_BEGIN_
procedure 5-8
Key field, database 2-9 SERVERCLASS_DIALOG_SEND_
Key-sequenced files 2-10 procedure 5-14
SERVERCLASS_SEND_
procedure 5-18
W
Waited send operations
errors for 6-1
procedure calls for 5-7, 5-13, 5-17
specifying 5-9, 5-15, 5-20
usage considerations 5-23, 5-27
Workstation clients, NonStop TUXEDO,
interoperating with 4-17
Special Character
$RECEIVE messages
allocating space 4-3
determining new dialogs 4-13