update release notes

This commit is contained in:
Michael Davidsaver
2017-07-18 19:06:55 +02:00
parent ae501327cd
commit 937fb154c1
7 changed files with 89 additions and 39 deletions

View File

@ -767,6 +767,9 @@ WARN_LOGFILE =
INPUT = ../src/client/pv \
../src/client/pva \
../src/server/pv \
../src/rpcClient/pv \
../src/rpcService/pv \
../src/utils/pv \
../src/pva/pv \
.

View File

@ -1,20 +1,63 @@
/** @page pvarelease_notes Release Notes
Release 6.x.x
=============
Release 6.0.0 (UNRELEASED)
==========================
- Incompatible changes
- Requires pvDataCPP >=7.0.0 due to headers moved from pvDataCPP into this module: requester.h, destoryable.h, and monitor.h
- Major changes to shared_ptr ownership rules for epics::pvAccess::ChannelProvider and
associated classes. See
- @ref providers
- @ref providers_changes
- Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd.
Necessary to avoid having pvAccess library depend on all IOC core libraries.
- Added new library pvAccessCA with "ca" provider. Main pvAccess library no longer depends on libca.
Applications needing the "ca" provider must link against pvAccessCA and pvAccess.
See examples/Makefile in the source tree.
The headers associated with this library are: caChannel.h, caProvider.h, and caStatus.h
- A number of headers which were previously installed, but considered "private", are no longer installed.
- epics::pvAccess::ChannelProviderRegistry may no longer be sub-classed.
- Removed access to singleton registry via getChannelProviderRegistry() and registerChannelProviderFactory()
in favor of epics::pvAccess::ChannelProviderRegistry::clients() and epics::pvAccess::ChannelProviderRegistry::servers().
The "pva" and "ca" providers are registered with the clients() singleton.
epics::pvAccess::ServerContext() looks up names with the servers() singleton.
- Removed deprecated epics::pvAccess::Properties
- Simplifications
- use of the epics::pvAccess::ChannelRequester interface is optional
and may be omitted when calling createChannel().
Channel state change notifications are deliviered
to individual operations via epics::pvAccess::ChannelBaseRequester::channelDisconnect()
- Default implementions added for the following methods
- epics::pvAccess::Lockable::lock() and epics::pvAccess::Lockable::unlock() which do nothing.
- epics::pvAccess::Channel::getConnectionState() returns CONNECTED
- epics::pvAccess::Channel::isConnected() uses getConnectionState()
- epics::pvAccess::Channel::getField() which errors
- epics::pvAccess::Channel::getAccessRights() which returns rw
- Added epics::pvAccess::SimpleChannelProviderFactory template and
epics::pvAccess::ChannelProviderRegistry::add() avoids need for custom
factory.
- Added epics::pvAccess::MonitorElement::Ref iterator/smart-pointer
to ensure proper handling of calls Monitor::poll() and Monitor::release().
- epics::pvAccess::PipelineMonitor "internal" is collapsed into epics::pvAccess::Monitor.
PipelineMonitor becomes a typedef for Monitor.
- epics::pvAccess::RPCService is now a sub-class of epics::pvAccess::RPCServiceAsync
- Additions
- pv/pvAccess.h now provides macros OVERRIDE and FINAL which conditionally expand to the c++11 keywords override and final.
- Deliver disconnect notifications to individual Operations (get/put/rpc/monitor/...) via
new epics::pvAccess::ChannelBaseRequester::channelDisconnect()
- New API for server creation via epics::pvAccess::ServerContext::create() allows direct specification
of configuration and ChannelProvider(s).
- Add epics::pvAccess::ServerContext::getCurrentConfig() to get actual configuration, eg. for use with a client.
- Classes from moved headers requester.h, destoryable.h, and monitor.h added to epics::pvAccess namespace.
Typedefs provided in epics::pvData namespace.
- Added Client API based on pvac::ClientProvider
- pv/pvaVersion.h defines VERSION_INT and PVACCESS_VERSION_INT
- epics::pvAccess::RPCClient may be directly constructed.
- epics::pvAccess::RPCServer allows epics::pvAccess::Configuration to be specified and access to ServerContext.
- Added epics::pvAccess::Configuration::keys() to iterate configuration parameters (excluding environment variables).
- Added epics::pvAccess::Destoryable::cleaner
- Deprecations
- epics::pvAccess::GUID in favor of epics::pvAccess::ServerGUID due to win32 name conflict.
Release 5.0.0 (July 2016)
=========================
@ -123,7 +166,7 @@ It was thus (sometimes) necessary to explicitly call a destory() method
to fully dispose of an Operation.
Failure to do this resulted in a slow resource leak.
Beginning with 6.0.0 an Operation may not rely on user code to call a destory() method.
Beginning with 6.0.0 an Operation must not rely on user code to call a destory() method.
@subsection providers_changes_store_port Porting

View File

@ -2,7 +2,7 @@ TOP=..
include $(TOP)/configure/CONFIG
PROD_LIBS += pvAccessCA pvAccess pvData ca Com
PROD_LIBS += pvAccessCA ca pvAccess pvData Com
TESTPROD_HOST += getme
TESTPROD_HOST += putme

View File

@ -61,35 +61,6 @@ public:
InUse //!< data valid. Owned by MonitorRequester. Waiting for Monitor::release()
} state;
/** A smart pointer to extract a MonitorElement from a Monitor queue
*
* To fetch a single element
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
epics::pvAccess::MonitorElement::Ref elem(mon);
if(elem) {
// do something with element
assert(elem->pvStructurePtr->getSubField("foo"));
} else {
// queue was empty
}
@endcode
* To fetch all available elements (c++11)
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
for(auto& elem : *mon) {
assert(elem.pvStructurePtr->getSubField("foo"));
}
@endcode
* To fetch all available elements (c++98)
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
for(epics::pvAccess::MonitorElement::Ref it(mon); it; ++it) {
MonitorElement& elem(*it);
assert(elem.pvStructurePtr->getSubField("foo"));
}
@endcode
*/
class Ref;
};
@ -145,6 +116,35 @@ class epicsShareClass Monitor : public virtual Destroyable{
virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) {}
};
/** A smart pointer to extract a MonitorElement from a Monitor queue
*
* To fetch a single element
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
epics::pvAccess::MonitorElement::Ref elem(mon);
if(elem) {
// do something with element
assert(elem->pvStructurePtr->getSubField("foo"));
} else {
// queue was empty
}
@endcode
* To fetch all available elements (c++11)
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
for(auto& elem : *mon) {
assert(elem.pvStructurePtr->getSubField("foo"));
}
@endcode
* To fetch all available elements (c++98)
@code
epics::pvAccess::Monitor::shared_pointer mon(....);
for(epics::pvAccess::MonitorElement::Ref it(mon); it; ++it) {
MonitorElement& elem(*it);
assert(elem.pvStructurePtr->getSubField("foo"));
}
@endcode
*/
class MonitorElement::Ref
{
Monitor* mon;

View File

@ -31,6 +31,7 @@ namespace pvAccess {
class ServerContext;
class RPCChannelProvider;
//! Serves (only) RPCServiceAsync and RPCService instances.
class epicsShareClass RPCServer :
public std::tr1::enable_shared_from_this<RPCServer>
{

View File

@ -102,14 +102,18 @@ public:
*/
virtual void setBeaconServerStatusProvider(BeaconServerStatusProvider::shared_pointer const & beaconServerStatusProvider) = 0;
//! Options for a server insatnce
class Config {
friend class ServerContext;
Configuration::const_shared_pointer _conf;
std::vector<ChannelProvider::shared_pointer> _providers;
public:
Config() {}
//! Use specific configuration. Default is process environment
Config& config(const Configuration::const_shared_pointer& c) { _conf = c; return *this; }
//! Attach many providers.
Config& providers(const std::vector<ChannelProvider::shared_pointer>& p) { _providers = p; return *this; }
//! short hand for providers() with a length 1 vector.
Config& provider(const ChannelProvider::shared_pointer& p) { _providers.push_back(p); return *this; }
};

View File

@ -20,8 +20,6 @@ namespace epics { namespace pvAccess {
/**
* @brief Instance declaring destroy method.
*
* @author mse
*/
class epicsShareClass Destroyable {
public:
@ -32,10 +30,7 @@ namespace epics { namespace pvAccess {
virtual void destroy() = 0;
protected:
/**
* Do not allow delete on this instance and derived classes, destroy() must be used instead.
*/
virtual ~Destroyable() {};
virtual ~Destroyable() {}
public:
/** for use with shared_ptr<> when wrapping
@ -44,6 +39,10 @@ namespace epics { namespace pvAccess {
shared_ptr<foo> inner(new foo),
outer(inner.get, Destroyable::cleaner(inner));
@endcode
@warning Do not use this trick in combination with enable_shared_from_this
as it is _undefined_ whether the hidden weak_ptr will be the original
or wrapped reference.
*/
class cleaner {
Destroyable::shared_pointer ptr;