dbCa subscribes twice to ENUM
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
EPICS Base | Status tracked in 7.0 | |||||
3.14 |
Fix Released
|
Undecided
|
Andrew Johnson | |||
3.15 |
Fix Released
|
Undecided
|
Andrew Johnson | |||
3.16 |
Fix Released
|
Undecided
|
Andrew Johnson | |||
7.0 |
Fix Released
|
Undecided
|
Andrew Johnson |
Bug Description
Wayne Lewis and Krisztian Löki (ESS) report:
On 08/09/2018 08:26 AM, Wayne Lewis wrote:
> It looks like a camonitor to an ENUM type field (e.g., MBBI.VAL)
> actually produces two monitors, one with the numeric value and one with
> the string value. This can result in a record using CP/CPP processing on
> an input link pointing to the ENUM field being processed twice for each
> change in the ENUM field. Is this assessment correct?
>
> The following is a summary of the database where we see this behaviour:
>
> record(mbbi, "mbbi")
> {
> field(TPRO, "1")
> field(ZRST, "zero")
> field(ONST, "one")
> field(TWST, "two")
> }
>
> record(sseq, "sseq")
> {
> field(TPRO, "1")
> field(DOL1, "mbbi CP")
> }
>
> In most cases, we see the following on the IOC console:
>
> epics> ca:<email address hidden>: Process mbbi
> scanOnce: Process sseq
> scanOnce: Active sseq
>
> Does the 'scanOnce: Active sseq' line mean that the second monitor arrived
> while the record was still processing and is being ignored?
>
> However, occasionally the 'scanOnce: Active sseq' changes to 'scanOnce: Process
> sseq', suggesting that the record managed to finish processing before the
> second monitor arrived.
On 08/09/2018 10:27 AM, Krisztian Löki wrote:
> I've tested with base-3.15.4 and was able to replicate with base records; changed 'sseq' to 'stringin' (and DOL1 -> INP). Moreover, putting the records to separate databases and loading them into two different IOCs enabled me to use wireshark with your ca.lua. There are definitely two different CA events sent; one for the integer value and one for the string value.
I can replicate. There is an added wrinkle that apparently a link from ao.DOL doesn't setup two, but stringin.INP does.
> ca:mdavidsaver@ md-laptop: Process mbbi
> scanOnce: Process sseq2
> scanOnce: Process sseq1
> scanOnce: Process sseq2
record(mbbi, "mbbi")
{
field(TPRO, "1")
field(ZRST, "zero")
field(ONST, "one")
field(TWST, "two")
}
record(ao, "sseq1")
{
field(TPRO, "1")
field(DOL , "mbbi CP")
field(OMSL, "closed_loop")
}
record(stringin, "sseq2")
{
field(TPRO, "1")
field(INP , "mbbi CP")
}