manual config beacon addr list fails on little endian arch
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
EPICS Base |
Fix Released
|
High
|
Jeff Hill |
Bug Description
Symptom:
When manual configuration of the IOCs beacon address list is used via EPICS_CA_ADDR_LIST (or EPICS_CAS_
Version:
The bug exists only on in EPICS R3.14.10. It was introduced by the fix for mantis 302.
Additional information:
From Mark Rivers:
I have now proven that there is a change in the behavior of the beacon address list from 3.14.8.2 to 3.14.10 on both Linux and Win32. Linux and Win32 seem to behave identically, contrary to what I originally thought.
On 3.14.10 if EPICS_CA_
On 3.14.8.2 this is not the case, even if EPICS_CA_
Here is the proof on a Linux system running 3.14.10:
Here is what I get with EPICS_CA_ADDR_LIST and EPICS_CA_
undefined:
epics> epicsPrtEnvParams
EPICS_AR_PORT: 7002
EPICS_CAS_
EPICS_CA_
EPICS_CA_
EPICS_CA_CONN_TMO: 30.0
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CMD_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_LOG_PORT: 7004
EPICS_TIMEZONE: CUS::360:
EPICS_TS_NTP_INET is undefined
IOCSH_HISTSIZE: 50
IOCSH_PS1: epics>
epics> casr 20
...
There are currently 282784 bytes on the server's free list
6 client(s), 422 channel(s), 422 event(s) (monitors) 0 putNotify(s)
14 small buffers (16384 bytes ea), and 0 jumbo buffers (10000024 bytes
ea)
The server's resource id conversion table:
Bucket entries in use = 90 bytes in use = 17844 Bucket entries/hash id - mean = 0.021973 std dev = 0.146594 max = 1 The server's array size limit is 10000024 bytes max Channel Access Address List
164.54.160.255:5065
So that is fine the beacon Channel Access Address List is set to 164.54.
the same as the default value if it is not manually set.
epics> epicsPrtEnvParams
EPICS_AR_PORT: 7002
EPICS_CAS_
EPICS_CA_ADDR_LIST: 164.54.160.255
EPICS_CA_
EPICS_CA_
EPICS_CA_CONN_TMO: 30.0
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CMD_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_LOG_PORT: 7004
EPICS_TIMEZONE: CUS::360:
EPICS_TS_NTP_INET is undefined
IOCSH_HISTSIZE: 50
IOCSH_PS1: epics>
epics> casr 20
...
There are currently 282784 bytes on the server's free list
6 client(s), 422 channel(s), 422 event(s) (monitors) 0 putNotify(s)
14 small buffers (16384 bytes ea), and 0 jumbo buffers (10000024 bytes
ea)
The server's resource id conversion table:
Bucket entries in use = 90 bytes in use = 17844 Bucket entries/hash id - mean = 0.021973 std dev = 0.146594 max = 1 The server's array size limit is 10000024 bytes max Channel Access Address List
epics>
So the Channel Access Address List is undefined if EPICS_CA_
This is definitely new behavior. In this case no beacons are sent, and hence clients will be very slow to reconnect.
Here is the output when I run a 3.14.8.2 IOC on the same Linux system with the same environment variable settings.
epics> coreRelease
#######
####
### EPICS IOC CORE built on Oct 6 2008 ### EPICS R3.14.8.2 $R3-14-8-2$ $2006/01/06 15:55:13$ #######
####
epics> epicsPrtEnvParams
EPICS_AR_PORT: 7002
EPICS_CAS_
EPICS_CA_ADDR_LIST: 164.54.160.255
EPICS_CA_
EPICS_CA_
EPICS_CA_CONN_TMO: 30.0
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CA_
EPICS_CMD_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_
EPICS_IOC_LOG_PORT: 7004
EPICS_TIMEZONE: CUS::360:
EPICS_TS_NTP_INET is undefined
IOCSH_HISTSIZE: 50
IOCSH_PS1: epics>
epics> casr 20
...
There are currently 285316 bytes on the server's free list
6 client(s), 443 channel(s), 443 event(s) (monitors) 0 putNotify(s)
14 small buffers (16384 bytes ea), and 0 jumbo buffers (10000024 bytes
ea)
The server's resource id conversion table:
Bucket entries in use = 69 bytes in use = 17508 Bucket entries/hash id - mean = 0.016846 std dev = 0.128693 max = 1 The server's array size limit is 10000024 bytes max Channel Access Address List
164.54.160.255:5065
So on 3.14.8.2 it builds a correct beacon address list, even if EPICS_CA_
Platform: little endian arch
Version: R3.14.10
Original Mantis Bug: mantis-331
http://
Committed this fix. The database inst building at the moment so I tested with excas - which should be a good test because both PCAS and RSRV use the same common component in CA where the fix was applied.
cvs diff -wb -- iocinf.cpp (in directory C:\hill\ R3.14.dll_ hell_fix\ epics\base\ src\ca\ ) ======= ======= ======= ======= ======= ======= ======= ======= ==== epicsmgr/ cvsroot/ epics/base/ src/ca/ iocinf. cpp,v
continue;
Index: iocinf.cpp
=======
RCS file: /net/phoebus/
retrieving revision 1.23.2.5
diff -u -b -w -b -r1.23.2.5 iocinf.cpp
--- iocinf.cpp 22 Sep 2008 18:20:56 -0000 1.23.2.5
+++ iocinf.cpp 9 Feb 2009 16:48:55 -0000
@@ -97,7 +97,7 @@
}
- if ( ignoreNonDefaul tPort && addr.sin_port != port ) { tPort && ntohs ( addr.sin_port ) != port ) {
continue;
+ if ( ignoreNonDefaul
}
***** CVS exited normally with code 1 *****