%META:TOPICPARENT{name="ErrorMessagesR"}% =Error Message: {{{RPC: Remote System error}}} or {{{Program Unavailable}}}= %TOC% ==General Cases== The Multi-Tier Generic Client (whether ODBC Driver, JDBC Driver, or ADO.NET Provider) expects to find a running Request Broker. Specifically, it will call for the Broker at the machine and port specified in the {{{Host}}} field of the client DSN (e.g., {{{broker-host.example.com:5000}}}). If a running Broker cannot be reached, //Remote System// and //Program Unavailable// errors occur. The most common causes of these errors should be resolved by the steps below. # Ensure that the OpenLink Request Broker and Database Agents are installed somewhere on the network. Typically, these components are installed on the database server. However, they are occasionally installed on clients or third-tier "gateway" hosts. If in doubt, use the Windows Explorer or the Unix find command to search for the oplrqb executable. # Review your client's DSN. #* Ensure that the Host field passes the IP address or a DNS-resolvable fully qualified hostname (e.g., {{{broker-host.example.com}}}) of the machine which contains the OpenLink Request Broker. #* Ensure that the Broker's Listen port (found in the {{{[Protocol TCP]}}} stanza of the Broker Rulebook, {{{oplrqb.ini}}}) is also specified in the DSN, whether in its own field (e.g., {{{Port = 5000}}}), or as part of the Server field (e.g., {{{Host = brokerhost.example.com:5000}}}). The following examples are all equivalent -- {{{ [OpenLink Multi-Tier DSN 1] Driver = /home/openlink/lib/oplodbc.so Description = Sample OpenLink DSN Host = broker-host.example.com:5000 [OpenLink Multi-Tier DSN 2] Driver = /home/openlink/lib/oplodbc.so Description = Sample OpenLink DSN Host = 192.168.123.234 Port = 5000 [OpenLink Multi-Tier DSN 3] Driver = /home/openlink/lib/oplodbc.so Description = Sample OpenLink DSN Host = 192.168.123.234:5000 }}} #* If you specify the Broker host by hostname, substitute the machine's IP address and retest; success with this substitution indicates issues with the client host's DNS setup and/or server. You can also test for DNS issues by "pinging" the Broker host by name and by address (ctrl-C to exit the ping utility) -- {{{ ping broker-host.example.com ping 192.168.123.231 }}} # Ensure that the Request Broker is running. Unix users generally start the Broker with the commands -- {{{ . /path/to/openlink.sh oplrqb }}} Windows users generally start the OpenLink Request Broker service through the Services control panel. # If the Broker is running, determine whether firewalls exist between the client and the machine with the Broker. If firewalls exist, take the following action: ## Open the active Rulebook file ({{{~/openlink/bin/oplrqb.ini}}} by default) with a text editor. ## Locate the {{{[Protocol TCP]}}} section. ## Record the values passed to **{{{PortLow}}}** and **{{{PortHigh}}}**. //If {{{PortHigh}}} is set to no value, is not set, and/or its entry is commented out, treat it as if set to 60000. (To minimize future confusion, you may wish to set it to 60000, now.)// ## On the firewall, open TCP ports PortLow through PortHigh, inclusive. In other words, if {{{PortLow = 5000}}} and {{{PortHigh = 5500}}}, open all TCP ports 5000 to 5500. ## On the firewall, open TCP port 60001 and UDP port 60001. # If firewalls do not exist, determine whether multiple network cards have been installed in the machine containing the Broker and agents, or if this machine has multiple IP addresses. If multiple network cards (even if only one is active) or IP addresses exist, take the following action: ## Open the active Rulebook file ({{{~/openlink/bin/oplrqb.ini}}} by default) with a text editor. ## Locate the {{{[Protocol TCP]}}} section. ## Remove the leading semicolon ("{{{;}}}") from the {{{IPAddress}}} entry, if present. ## Set {{{IPAddress}}} equal to the IP address at which the Broker and Agents should be found. For example: {{{ IPAddress = 192.168.123.234 }}} ## Save your changes and exit the file. ## Restart your Request Broker. ## Ensure that client DSNs specify that IP address or a fully qualified hostname (e.g., {{{broker-host.example.com}}}) which resolves to the same IP address. ## Test. ==Special Consideration for Request Brokers running on Windows NT or 2000 Workstation== Applications making 6 (or more) connections in rapid succession to OpenLink Request Brokers running on Windows NT Workstation or Windows 2000 Workstation may receive {{{RPC: Remote System error}}}. This is due to the size of the backlog queue for TCP sockets and RPC on the host OS, upon which our Multi-Tier communications layer depends. On Windows NT Workstation and Windows 2000 Workstation, the maximum queue size is 5; on Windows Server (NT, 2000, and later), the queue size can be 200 (or more). The Broker's internal backlog queue was 8 through Release 4.0, and increased to 32 in Release 4.1, but due to the OS limitations, on Windows Workstations, the effective value remains 5. Unfortunately, there is no way to increase the maximum size of the Windows Workstation backlog queue. The following Microsoft Knowledgebase articles discuss this Winsock-specific phenomenon: * [[http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q127144|Article ID: 127144]] - Windows NT WinSock Listen (Backlog) Parameter Limit * [[http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q113576|Article ID: 113576]] - Winsock App's Reject Connection Requests with Reset Frames As these articles state, applications targeting an OpenLink Request Broker on Windows Workstation may have to force a timeout to avoid exhausting the Winsock TCP stack's resources before their next connection request. ==Evidence== * output of commands -- #* HP-UX {{{ for i in `lanscan -i | awk '{print $1}'` ; do ifconfig $i ; done }}} #* Windows {{{ ipconfig /all }}} #* Mac OS X, Linux, AIX, Solaris, other Unix-like OS {{{ ifconfig -a }}} #* All OS (including the above) {{{ netstat -na }}} * DSN and Communications settings (from {{{odbc.ini}}} or Windows Registry) * Session Rulebook ({{{oplrqb.ini}}})