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 \ INPUT = ../src/client/pv \
../src/client/pva \ ../src/client/pva \
../src/server/pv \
../src/rpcClient/pv \
../src/rpcService/pv \
../src/utils/pv \ ../src/utils/pv \
../src/pva/pv \ ../src/pva/pv \
. .

View File

@ -1,20 +1,63 @@
/** @page pvarelease_notes Release Notes /** @page pvarelease_notes Release Notes
Release 6.x.x Release 6.0.0 (UNRELEASED)
============= ==========================
- Incompatible changes - 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 - Major changes to shared_ptr ownership rules for epics::pvAccess::ChannelProvider and
associated classes. See associated classes. See
- @ref providers - @ref providers
- @ref providers_changes - @ref providers_changes
- Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd. - Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd.
Necessary to avoid having pvAccess library depend on all IOC core libraries. 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 - Simplifications
- use of the epics::pvAccess::ChannelRequester interface is optional - use of the epics::pvAccess::ChannelRequester interface is optional
and may be omitted when calling createChannel(). and may be omitted when calling createChannel().
Channel state change notifications are deliviered Channel state change notifications are deliviered
to individual operations via epics::pvAccess::ChannelBaseRequester::channelDisconnect() 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) 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. to fully dispose of an Operation.
Failure to do this resulted in a slow resource leak. 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 @subsection providers_changes_store_port Porting

View File

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

View File

@ -61,35 +61,6 @@ public:
InUse //!< data valid. Owned by MonitorRequester. Waiting for Monitor::release() InUse //!< data valid. Owned by MonitorRequester. Waiting for Monitor::release()
} state; } 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; class Ref;
}; };
@ -145,6 +116,35 @@ class epicsShareClass Monitor : public virtual Destroyable{
virtual void reportRemoteQueueStatus(epics::pvData::int32 freeElements) {} 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 class MonitorElement::Ref
{ {
Monitor* mon; Monitor* mon;

View File

@ -31,6 +31,7 @@ namespace pvAccess {
class ServerContext; class ServerContext;
class RPCChannelProvider; class RPCChannelProvider;
//! Serves (only) RPCServiceAsync and RPCService instances.
class epicsShareClass RPCServer : class epicsShareClass RPCServer :
public std::tr1::enable_shared_from_this<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; virtual void setBeaconServerStatusProvider(BeaconServerStatusProvider::shared_pointer const & beaconServerStatusProvider) = 0;
//! Options for a server insatnce
class Config { class Config {
friend class ServerContext; friend class ServerContext;
Configuration::const_shared_pointer _conf; Configuration::const_shared_pointer _conf;
std::vector<ChannelProvider::shared_pointer> _providers; std::vector<ChannelProvider::shared_pointer> _providers;
public: public:
Config() {} Config() {}
//! Use specific configuration. Default is process environment
Config& config(const Configuration::const_shared_pointer& c) { _conf = c; return *this; } 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; } 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; } 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. * @brief Instance declaring destroy method.
*
* @author mse
*/ */
class epicsShareClass Destroyable { class epicsShareClass Destroyable {
public: public:
@ -32,10 +30,7 @@ namespace epics { namespace pvAccess {
virtual void destroy() = 0; virtual void destroy() = 0;
protected: protected:
/** virtual ~Destroyable() {}
* Do not allow delete on this instance and derived classes, destroy() must be used instead.
*/
virtual ~Destroyable() {};
public: public:
/** for use with shared_ptr<> when wrapping /** for use with shared_ptr<> when wrapping
@ -44,6 +39,10 @@ namespace epics { namespace pvAccess {
shared_ptr<foo> inner(new foo), shared_ptr<foo> inner(new foo),
outer(inner.get, Destroyable::cleaner(inner)); outer(inner.get, Destroyable::cleaner(inner));
@endcode @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 { class cleaner {
Destroyable::shared_pointer ptr; Destroyable::shared_pointer ptr;