Oracle Events work incorrectly due to an overlap of the ephemeral port range and AQ port range.

Oracle Events work incorrectly due to an overlap of the ephemeral port range and AQ port range.

book

Article ID: KB0073082

calendar_today

Updated On:

Products Versions
TIBCO iProcess Engine (Oracle) -

Description

Symptoms:
sw_warn contains repeated entries:
1878-AQ PubSub - Function loci_subscribe_event, Error Message OCISubscriptionRegister failed, OCI Error ORA-24912: Listener thread failed. Listen failed..
1878-AQ PubSub - Function loci_unsubscribe_event, Error Message OCISubscriptionUnRegister() failed, OCI Error Error - OCI_INVALID_HANDLE.

swadm EVLOOPBACK tests fail intermittently with :
$ swadm EVLOOPBACK
Attempting to test event:
WARNING: Failed to receive the message in 10 seconds.


Cause:
When using AQ Port Ranging, we also specify a range of ports that will be used by the Tibco iPE engine instance. These ports are then passed to Oracle to ensure that Oracle can contact the process on a specific port where that process will have a thread listening. However, although the port range is logged with the TIBCO iPE Engine instance, the Operating System is not aware the port has been listed for use elsewhere and may use the port itself. 
This could therefore lead to problems where the port is in use by the Operating System when an attempt is made to allocate the port for the TIBCO iPE engine instance.
In other words, the ephemeral port range on the Linux server should not overlap the AQ Port range

 

Issue/Introduction

Oracle Events work incorrectly due to an overlap of the ephemeral port range and AQ port range. EVLOOPBACK tests may also fail.

Environment

TIBCO iProcess Engine (Oracle) - Linux TIBCO iProcess Engine (DB2) - Linux

Resolution

The ephemeral port range on the Linux server can be checked with the below commands:
  sysctl -A | grep ip_local_port_range
  sysctl net.ipv4.ip_local_port_range
  
The ephemeral range should not include the ports defined in swadm show_ranges output.

  Example:
  sysctl -A | grep ip_local_port_range
  sysctl net.ipv4.ip_local_port_range
  This output returned the following port range:-
  32768    60999
  swadm show_ranges
  RPC Port ranges:
-------------------------------------------------------------------------
Port Range ID Range Mode  Range Size  Port Start  RPC Start   Server ID's
-------------------------------------------------------------------------
1             1           99          55900       10737000    1
AQ Port ranges:
-------------------------------------------------------------------------
Port Range ID     Range Size      Port Start      Server ID's
-------------------------------------------------------------------------
1                 200             56000        
You can see that the ephemeral port range is 32768 to 60999 and the AQ port range is from 56000. There is an overlap between the two sets of output.
In this case the user needs to modify the port range for the AQ port range to be less than 32768 or greater than 61000 and then restart iProcess engine.
 

Additional Information

2021/08/09 10:05:38.545753(SWADM:71336:71336:2::::swpro:/aqiel.c:85202:306): 1878-AQ PubSub - Function loci_subscribe_event, Error Message OCISubscriptionRegister failed, OCI Error ORA-24912: Listener thread failed. Listen failed..
2021/08/09 10:05:38.547628(SWADM:71336:71336:2::::swpro:/aqiel.c:85202:313): 1878-AQ PubSub - Function loci_unsubscribe_event, Error Message OCISubscriptionUnRegister() failed, OCI Error Error - OCI_INVALID_HANDLE.