Commit Graph

908 Commits

Author SHA1 Message Date
Michael Davidsaver 08bc533c09 test serversrc 2023-05-12 09:29:25 -07:00
Michael Davidsaver 4d12da8720 client: don't attempt to reconnect NS during shutdown
Connection::build() can't succeed
2023-05-12 09:29:25 -07:00
Michael Davidsaver 939391590e client: clear nameServers during close() 2023-05-12 09:29:25 -07:00
Michael Davidsaver 6cd382eac7 client: Config print EPICS_PVA_NAME_SERVERS
Avoid duplicate list of env. names between updateDefs()
and operator<<
2023-05-12 09:29:25 -07:00
Michael Davidsaver 45f8328f04 server: add MonitorStat::nSquash 2023-05-12 09:29:25 -07:00
Michael Davidsaver a36dd2a9cc fix monitor pipeline and finish() 2023-05-12 09:29:25 -07:00
Michael Davidsaver a4e974def9 client: fix batch pop() of exception 2023-05-11 10:50:08 -07:00
Michael Davidsaver af3c870b7a Value::copyIn() add Array -> Array w/ implied alloc+convert 2023-05-11 10:50:08 -07:00
Michael Davidsaver 4029f5ac3c prevent simple Any self-assignment 2023-05-11 10:50:08 -07:00
Michael Davidsaver e0a8572c2d server: fix stats(reset=true) 2023-05-11 10:48:06 -07:00
Michael Davidsaver 1911f2d45c doc: update release notes 2023-05-10 09:56:04 -07:00
Michael Davidsaver 752b2f73d6 ioc: IOCShCommand wrapper catch exceptions
inline runOnServer(), which shouldn't re-throw anyway
2023-05-09 22:24:19 -07:00
Michael Davidsaver 074d835fc8 ioc: add INST_COUNTER 2023-05-09 22:24:19 -07:00
Michael Davidsaver 044b0db7af ioc: add instance counter tools to IOC shell 2023-05-09 22:24:19 -07:00
Michael Davidsaver aef69c9f25 redo INST_COUNTER
Allow for use by pvxsIoc
2023-05-09 22:24:19 -07:00
Michael Davidsaver 175955bc0b py: build pvxsIoc 2023-05-09 22:24:19 -07:00
Michael Davidsaver 6020e28284 qsrv: drop qsrv executable 2023-05-09 22:24:19 -07:00
Michael Davidsaver 006a3202dd qsrv: build softIocPVX 2023-05-09 22:24:19 -07:00
Michael Davidsaver 1e36675be5 qsrv: import softMain.cpp from Base circa 7.0.7 2023-05-09 22:24:19 -07:00
Michael Davidsaver 36dabddc1f ioc: documentation 2023-05-09 22:24:19 -07:00
Michael Davidsaver afafa09547 ioc: revise qsrv 2 prototype
ioc: check for mis-matched onStartSubscription()/onDisableSubscription()

ioc: fix subscription lifetime

ioc: catch exceptions in dbEvent callbacks

ioc: avoid unnecessary virtual

ioc: minor

ioc: fix qsrv -S

ioc: qsrvGroupSourceInit() catch+log

ioc: runOnServer avoid std::function

ioc: cleanup and simplifications.

Avoid some redundant std::map lookups.
Make Group partially const to prevent implicit ctor.

ioc: avoid typedefs only used once

ioc: overhaul Group::show().  shows triggers

ioc: MappingType

ioc: pvxsgl -> pvxgl

ioc: separate group config singleton from server singleton

ioc: remove unnecessary forward declarations

ioc: restructure pvxsInitHook

ioc: qsrv runtime disable by default

ioc: compat w/ older Base

ioc: link pvxsIoc w/ DB libs

ioc: Channel proper detection of invalid PV

ioc: no need to keep vector<dbCommon*> around

ioc: fix initial group update for mappings w/o dbChannel

ioc: redo testing

split out group tests, only run with Base >= 7.0

ioc: minor

ioc: loc_bad_alloc

ioc: avoid symbol/DTYP clash with pva2pva

ioc: test record alias in group json

ioc: test put failure when SPC_NOMOD and DISP=1

ioc: test channel filters

ioc: unnecessary capture

ioc: avoid sharing Value between multiple subscriptions

It is possible to create two subscriptions through the same channel.

ioc: group subscription include queueSize

ioc: eliminate unused atomicMonitor

ioc: consolidate GroupSource::get()

avoid some indirection

ioc: pvRequest override of atomicPutGet

ioc: fix group non-atomic put

ioc: test asTrap hooks

ioc: test putOrder also sets field order

ioc: simplify GroupConfigProcessor::loadConfigFiles()

Also ensure that groupMapMutex is held

ioc: testqgroup cover JSON def.

ioc: dbLoadGroup() use macros

ioc: pvxsl() take integer argument

ioc: display.form and info(Q:form

ioc: "NO_ALARM" -> ""

ioc: use dbServer

at least for informational callbacks.

ioc: consolidate createRequestAndSubscriptionHandlers()

ioc: eliminate ChannelAndLock

properties dbChannel doesn't need a separate DBManyLock

ioc: test that putOrder also controls field order

ioc: MappingType -> MappingInfo

Handle info(Q:time:tag
Add +type:"const"

ioc: cleanup includes

ioc: test dbNotifyCancel()

ioc: inline checkForTrailingCommentsAtEnd()
2023-05-09 22:24:05 -07:00
george-mcintyre 832c76d6e4 ioc: Add long long tests 2023-05-09 10:17:32 -07:00
george-mcintyre 26dbe50f83 ioc: Clear link field before doing group put test 2023-05-09 10:17:32 -07:00
george-mcintyre 019784bd3a ioc: Update group and single subscriptions to bind contexts to subscription not client connection 2023-05-09 10:17:32 -07:00
Michael Davidsaver d2dcad708c ioc: update testioc.cpp 2023-05-09 10:17:32 -07:00
Michael Davidsaver ff004fb5a5 ioc: extend coverage.sh to ioc/ 2023-05-09 10:17:32 -07:00
Michael Davidsaver cf4b568e64 testPlan(): select isolated network configuration for QSRV 2023-05-09 10:17:32 -07:00
George McIntyre 93e4d3eef3 ioc: qsrv 2 prototype 2023-05-09 10:17:32 -07:00
Michael Davidsaver e7a0775d76 server: Add extra call() to Server::stop()
Not a full solution, though should prevent test1000
from occasionally leaving evbase workers dangling

> not ok 1001 - Instance leak ServerGPRConnect : 217
> not ok 1002 - Instance leak SharedPVImpl : 984
> not ok 1003 - Instance leak StructTop : 1202
> not ok 1004 - Instance leak UDPListener : 2
> not ok 1005 - Instance leak evbase : 2
> not ok 1006 - Instance leak evbaseRunning : 2
2023-05-09 10:17:32 -07:00
Michael Davidsaver c197ad6a1b doc: clarify compatibility and NT* helpers 2023-05-08 10:31:04 -07:00
Michael Davidsaver 6e92a1a3cb NTEnum add display.description 2023-05-08 10:05:24 -07:00
Michael Davidsaver 20e0fa8ca5 client: re-define the meaning of poke() 2023-04-17 15:54:29 -05:00
Michael Davidsaver dd2f076b4a client: only advance search bucket during normal search 2023-04-17 15:54:29 -05:00
Michael Davidsaver fe5a35eb02 client: only reschedule searchTimer on expiry 2023-04-14 10:14:30 -07:00
Thomas Ives 07713faff4 fix: schedule initial search use separate event from the generic work queue
By using `tcp_loop.dispatch` to schedule the initial search for a
channel, we are placing the callback into the same work queue that is
used by e.g. `MonitorBuilder::exec` to schedule the call to
`Channel::build`.  In situations where lots of channels are being
created simultaneously this can result in lots of single channel search
requests being sent because the work queue alternates between calls to
build a channel and the initial search.

In this commit we instead use a dedicated `evevent` to schedule the
initial search to allow the `initialSearchBucket` to be filled before we
send the initial search request. We delay the initial search by 10 ms to
give more time for the bucket to be filled.  See
github.com/mdavidsaver/pvxs/pull/39 for a discussion of how this delay
was chosen.
2023-04-14 10:14:30 -07:00
Thomas Ives 7ae659678f fix: do not re-search for other channels when doing initial channel search
When creating a large number of Channels at once, we can end up calling
`ContextImpl::poke(true)` many times in quick succession.  This results
in a flood of UDP broadcasts where we are searching for channels that we
only just sent out the initial search request for.

This can easily lead to packets getting lost and us not receiving a
reply for some Channels.  Moreover, as we keep resending search requests
for Channels, we reschedule them further and further in the future (as
`nSearch` is increased).  After the dust settles and we stop poking,
this can result in a wait of several seconds before a Channel which we
have not found is searched for again.

In this commit we avoid this issue by using a separate bucket to hold
channels waiting for their initial search request.  Rather than poking
`tickSearch` to do the initial search and also resend requests for
outstanding channels, we schedule a call to new call `tickSearch` which
will only send the initial search requests.  As such, we will avoid
rebroadcasting search requests for channels we have only just searched
for.

We have prompted the `discover` bool to an enum to distinguish between
the now three different situations `tickSearch` can be called in.
2023-04-14 10:14:30 -07:00
Michael Davidsaver ad9ba0f085 Add NTScalar::form 2023-04-14 10:14:30 -07:00
Michael Davidsaver 5897fe273e fix intermittent of testsock
Switch to blocking socket, with poll()ing for expected RX failures.
2023-04-14 10:14:30 -07:00
Michael Davidsaver c8f28f373a bundle: OSX use -rpath for bundled libevent 2023-04-10 08:52:44 -07:00
Michael Davidsaver 6b63e14140 cmake: skip CMAKE_DEBUG_POSTFIX 2023-04-10 08:47:17 -07:00
Michael Davidsaver 08dd88b4da update bundled libevent 2023-04-10 08:47:17 -07:00
Michael Davidsaver 0fdfeb72d1 Add testudpfwd 2023-04-10 08:47:15 -07:00
Michael Davidsaver 266ee52704 server: bind both wildcard for UDP
When possible, bind both ipv4 and ipv6 wildcard addresses
for UDP.  Even when only binding ipv6 address for TCP (Linux)
2023-04-10 08:44:37 -07:00
Michael Davidsaver b31a354915 improve localhost multicast forwarding
On Linux (at least) packets received through the LO
may have non-LO origin addresses...
2023-04-10 08:44:37 -07:00
Michael Davidsaver fa4294a975 pvxmonitor option to show queueSize 2023-04-06 11:45:41 -07:00
Michael Davidsaver c373da671b server: fix default monitor queueSize to 4 2023-04-06 11:45:41 -07:00
Michael Davidsaver 25780f9506 1.1.4
PVXS Python / win64 3.10 (push) Failing after 1s
PVXS Python / win64 3.5 (push) Failing after 1s
PVXS Python / win64 3.6 (push) Failing after 1s
PVXS Python / win64 3.7 (push) Failing after 1s
PVXS Python / win64 3.8 (push) Failing after 1s
PVXS Python / win64 3.9 (push) Failing after 1s
PVXS EPICS / Native Linux with 3.14 (push) Failing after 2s
PVXS EPICS / Native Linux with 3.15 (push) Failing after 2s
PVXS EPICS / Native Linux with clang (push) Failing after 3s
PVXS EPICS / Native Linux (WError) (push) Failing after 2s
PVXS EPICS / Native Linux (c++17) (push) Failing after 2s
PVXS EPICS / Native Linux with libevent stable (push) Failing after 2s
PVXS EPICS / Cross mingw64 DLL (push) Failing after 2s
PVXS EPICS / Cross mingw64 static (push) Failing after 2s
PVXS EPICS / Native Linux with 7.0.2 (push) Failing after 2s
PVXS EPICS / Linux centos 7 (push) Failing after 2s
PVXS EPICS / Linux fedora 34 (push) Failing after 2s
PVXS Python / linux64 test (push) Failing after 1s
PVXS Python / linux 2.7 i686 (push) Failing after 7s
PVXS Python / linux 2.7u i686 (push) Failing after 8s
PVXS Python / linux 3.5 i686 (push) Failing after 8s
PVXS Python / linux 3.6 i686 (push) Failing after 7s
PVXS Python / linux 3.7 i686 (push) Failing after 7s
PVXS Python / linux 3.9 i686 (push) Failing after 7s
PVXS Python / linux 3.8 i686 (push) Failing after 9s
PVXS Python / linux 2.7 amd64 (push) Failing after 7s
PVXS Python / linux 2.7u amd64 (push) Failing after 7s
PVXS Python / linux 3.5 amd64 (push) Failing after 7s
PVXS Python / linux 3.6 amd64 (push) Failing after 7s
PVXS Python / linux 3.7 amd64 (push) Failing after 7s
PVXS Python / linux 3.8 amd64 (push) Failing after 7s
PVXS Python / linux 3.9 amd64 (push) Failing after 7s
PVXS Python / linux 3.10 amd64 (push) Failing after 7s
PVXS EPICS / OSX (push) Cancelled after 0s
PVXS EPICS / RTEMS5 (push) Cancelled after 0s
PVXS EPICS / vs2019 DLL (push) Cancelled after 0s
PVXS EPICS / vs2019 static (push) Cancelled after 0s
PVXS Python / osx 2.7 intel (push) Cancelled after 0s
PVXS Python / osx 3.10 intel (push) Cancelled after 0s
PVXS Python / osx 3.6 intel (push) Cancelled after 0s
PVXS Python / osx 3.7 intel (push) Cancelled after 0s
PVXS Python / osx 3.8 intel (push) Cancelled after 0s
PVXS Python / osx 3.9 intel (push) Cancelled after 0s
1.1.4
2023-04-03 09:30:24 -07:00
Michael Davidsaver be71a99865 reset event_set_log_callback() during test cleanup 2023-04-03 09:30:24 -07:00
Michael Davidsaver 3e95f502a4 1.1.4a1 2023-04-03 07:35:30 -07:00
Michael Davidsaver 9449059d8b expose wrappers for some evutil as expert API 2023-04-02 20:21:53 -07:00