caget and cainfo return no data for any PV when one PV in arguments does not respond
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
EPICS Base | Status tracked in 7.0 | |||||
3.15 |
New
|
Low
|
Unassigned | |||
3.16 |
Won't Fix
|
Low
|
Unassigned | |||
7.0 |
Confirmed
|
Low
|
Unassigned |
Bug Description
Starting with EPICS 3.15.6, also in 3.16.* and 7.*, the cainfo and caget tools no longer return information on any PV if one of the PVs in a list does not respond. This is different from version 3.15.5 and earlier, in which cainfo and caget would return information on all PVs specified, noting those that did not respond.
Example caget in version 3.15.5:
$ caget Mu2e_Weather_
Channel connect timed out: some PV(s) not found.
Mu2e_Weather_
Mu2e_Weather_
Mu2e_Weather_
Example caget in version 3.15.6:
$ caget Mu2e_Weather_
Mu2e_Weather_
Channel connect timed out: some PV(s) not found.
A similar difference is seen in cainfo. In 3.15.5, it will print out info for all the specified PVs, including "never connected" status for the missing PVs. In 3.15.6 and later, it just prints "some PV(s) not found."
This new behavior is less useful than the original behavior.
The cause of the change seems to be a small change in caget.c and cainfo.c. Here is a diff, with "<" being 3.15.5 and ">" being 3.15.6.
544c544
< connect_pvs(pvs, nPvs);
---
> result = connect_pvs(pvs, nPvs);
547,548c547,548
<
< result = caget(pvs, nPvs, request, format, type, count);
---
> if (!result)
> result = caget(pvs, nPvs, request, format, type, count);
The identical change was made in cainfo.c.
The original behavior was preferable, but if there is some good reason for not calling "caget" on PVs that failed to connect, then hopefully there is some way of handling that in the caget() function rather than just completely failing to do anything if even a single PV does not respond.
Glenn, thanks for reporting this.
I've been seeing the same thing and it's annoying to not get the valid responses due to a single timeout.
pvget and pvinfo follow the same pattern.