Releases: hazelcast/hazelcast-cpp-client
3.9.1 - Global Serializer Support
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.9.1 release.
New features
- Global Serializer: This release adds the support for the Global Serializer. Global Serializer allows you to use objects for which you have not defined any serializers. It also lets you compile your code without the need to write the free function
getHazelcastTypeId.
Enhancements
There are no enhancements for this release.
Fixes
Some of the major bug fixes for this release are listed below. You can find the full list of closed issues and closed PRs at the repo with milestone 3.9.1.
- Inefficient
ObjectDataInput::readByteArray(). [#328] - Windows
refreshPartitionsleep is not working. [#293] - Windows builds fail on client shutdown. [#369]
Known Issues
There are no known issues for this release.
3.9 - Polymorphic And Mixed Type Support
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.9 release.
New features
There are no new features for this release.
Enhancements
-
Polymorphic Object Support: This release adds the polymorphic object support for all serialization types;
IdentifiedDataSerializable,Portableandcustomtypes. You can now use the base type when you get a data structure, for example client.getMap<BaseKey, BaseValue>("mymap"), and put and get derived polymorphic objects to the same data structure. -
Mixed Type Unrelated Object Support: This release adds the support for all serialization types for completely unrelated object types to be used at the Hazelcast data structures. You can do this by using the mixed type adopted
HazelcastClient. You can adopt the client in this way:
ClientConfig config;
HazelcastClient client(config);
mixedtype::HazelcastClient &hazelcastClient = client.toMixedType();
The mixedtype::HazelcastClient interface is designed to provide you the data structures which allows you to work with any object types in a mixed manner. For example, the interface allows you to provide the key and value type differently for each map.put call. An example usage is shown below:
mixedtype::IMap map = hazelcastClient.getMap("MyMap");
map.put<int, int>(3, 5);
map.put<string, std::string>("string key1", "MyStringValue");
map.put<int, MyCustomObject>("string key1", myCustomInstance);
TypedData result = map.get<int>(3);
As you can see in the above code snippet, we are putting int, string and MyCustomObject to the same map. Both the key and value can be of different type for each map.put call.
Fixes
Some of the major bug fixes for this release are listed below. You can find the full list of closed issues and closed PRs at the repo with milestone 3.9
- Build lib in a context of bigger project. [#332]
- Unable to specify include and lib dirs for OpenSSL on Windows and on Linux. [#330]
Known Issues
There are no known issues for this release.
3.8.3 - IMap removeAll Feature
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.8.3 release.
New features
- IMap::removeAll: This release adds the
IMap::removeAllAPI. This API allows you to remove entries from the map based on the criteria (predicate) that you provide.
Enhancements
There are no enhancements for this release.
Fixes
Some of the major bug fixes for this release are listed below. You can find the full list of closed issues and closed PRs at the repo with milestone 3.8.3.
- Cluster connection retry does not sleep if
AttemptPeriodis 1 second or less. [#322]
Known Issues
There are no known issues for this release.
3.8.2 - PartitionAware Release
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.8.2 release.
New features
- PartitionAware Support: C++ client now supports implementing keys that are partition aware using the
PartitionAwareinterface. You can force certain keys to be put on the same server at the cluster and run your entry processor on that server which will access the data locally since you put all the data to that server using this new feature. This is also called Data Affinity. You can find more information regarding the PartitionAware feature at the client documentation page: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8.2#partitionaware. You can also check the example code at: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8.2/examples/distributed-map/partitionaware
Enhancements
- Added the missing support for byte-array type serialization. [#307]
Fixes
Some of the major bug fixes for this release are listed below. You can find the full list of closed issues and closed PRs at the repo with milestone 3.8.2.
- DataOutput::writeUTF() writes invalid data. [#308]
- Client does not shut down properly when all cluster connection attempts fail. [#285]
- Removed the incorrectly used default credentials in the client config. [#286]
- SSL reconnect fail at Linux environments. [#288]
Known Issues
There are no known issues for this release.
3.8.1 - AWS Cloud Discovery Release
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.8.1 release.
New features
- AWS Cloud Discovery: C++ client can now work on AWS environment. The client can discover the existing Hazelcast servers in the AWS environment. The client finds only the up and running instances and filters them based on the filter configuration provided at the
ClientAwsConfigconfiguration. You can find more information regarding the AWS Cloud Discovery feature at the client documentation page: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8.1#aws-cloud-discovery. You can also check the example code at: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8.1/examples/aws
Enhancements
There are no enhancements for this release.
Fixes
- Enum print when compiling 32-bit causes warning for gcc 4.1.2. [#274]
Known Issues
There are no known issues for this release.
3.8 - TLS Feature
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.8 release.
New features
-
TLS: C++ client can now use TLS encryption while communicating with the cluster. The TLS is configured via the SSLConfig which is now part of the ClientConfig. Different TLS/SSL protocols can also be configured. Only the Hazelcast IMDG Enterprise servers support TLS connection. Hence, if you enable the SSLConfig, make sure that the client is talking to a Hazelcast IMDG Enterprise server. Otherwise, the client will not be able to connect to the cluster. You can find more information regarding the TLS feature at the client documentation page: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8#tls-feature. You can also check the example code at: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.8/examples/tls
-
IMap::sumbitToKey Async API: C++ client now supports async
IMap::submitToKeyAPI. A newFutureobject is provided at the API. The future acts similar tostd::future. You can now make async calls and get the responses when you need it. You can find a sample code usage at this link: https://github.com/hazelcast/hazelcast-cpp-client/blob/v3.8/examples/distributed-map/entry-processor/main.cpp#L72
Enhancements
- Added missing Portable Reader/Writer read/writeUTF array. [239]
- Added the method
executeOnKeysfor IMap entry processor. [225] - Added write/readUTFArray interface to Portable Writer/Reader. [224].
Bug Fixes
3.7 - C++ Client Near-Cache Feature
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.7 release.
New features
- This release introduces the near cache feature for Hazelcast C++ client. Near cache enables the
map.getoperations to be served directly from the local copy of key value. Therefore, it eliminates any network and cluster interactions when the data is present in near cache. This can improve the get performances and decrease the latencies of get operations significantly. It will especially help when most of your requests are gets. The near cache is configured per map using the map's name before instantiating theHazelcastClientinstance. You can see the examples here: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.7/examples/distributed-map/near-cache. There is also additional information at this page: https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.7#map-near-cache
Enhancements
3.6.3
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.6.3 release.
New features
We have added the Reliable Topic and Ringbuffer implementations. You can now access Hazelcast Ringbuffer and Reliable Topic structures using the C++ client. Currently, Ringbuffer implementation provides synch methods only.
You can find the code samples for these new structures in the examples folder or at Github:
https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.6.3/examples/distributed-collections/ringbuffer
https://github.com/hazelcast/hazelcast-cpp-client/tree/v3.6.3/examples/distributed-topic/reliabletopic
Enhancements
The release also provides several fixes and enhancements. Some of them are as follows:
- The user exceptions are made to be more specific
ProtocolExceptionsas defined in the Hazelcast Open Binary protocol. - Increased test code coverage.
3.6.2
This document includes the new features, enhancements, and fixed issues for Hazelcast C++ Client 3.6.2 release.
New Features
This release introduces the following new features:
-
Raw pointer capability: This feature introduces the new raw pointer adapter classes such as RawPointerMap which allows you to obtain raw pointer for the returned objects. Previously it was not possible to release the returned pointer object due to limitations of boost::shared_ptr and hence it was causing an extra object copy for the user. The new API also uses late de-serialization for multiple values returning API. For each container you can use the adapter classes, whose names start with
RawPointer, to access the raw pointers of the created objects. The adapter classes are found inhazelcast::client::adaptornamespace and listed below:-
RawPointerList
-RawPointerQueue
-RawPointerTransactionalMultiMap
-RawPointerMap
-RawPointerSet
-RawPointerTransactionalQueue
-RawPointerMultiMap
-RawPointerTransactionalMapThese are adapter classes and they do not create new structures. You just provide the legacy containers as parameters and then you can work with these raw capability containers freely.
The following are also the late serializing structures for multiple entry returning API:
-DataArray
-EntryArray
See http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#raw-pointer-api, https://github.com/hazelcast/hazelcast-cpp-client/tree/master/examples/adaptor, and #75 for details. -
Support custom serialization with no user object modification: The previous API required some modification to user objects when you want to use custom serializer. We removed this requirement. Hence, the user can use the custom serializer with no user object code modification. See http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#serialization-support, https://github.com/hazelcast/hazelcast-cpp-client/tree/master/examples/serialization/custom, and #37 for details.
-
Version Info on C++ Client: The client STARTING log now contains the last Git commit date and commit ID for the release. Example format is:
Apr 21, 2016 01:42:16 PM INFO: [HazelcastCppClient3.6.2] [dev] [4298317824] (20160406:0ef9654) LifecycleService::LifecycleEvent STARTING 3.6.2 is the version. 20160406 is the release date 0ef9654 is the GitHub commit ID. -
New built-in predicates for queries: Previously only the SQL query predicate and user-built custom predicates were supported by the client. This release adds new built-in predicates for making queries, listed below.
This release also adds entry listeners with predicates support for C++ client API. By this way, only the events for the selected subset of entries matching the query criteria are received by your listener. Hence, the new listener API is:
std::string addEntryListener(EntryListener<K, V> &listener, const query::Predicate &predicate, bool includeValue);This release introduces a rich set of built-in predicates as supported by the Java client. You can create your own predicates by implementing
Predicateinterfaces both at the C++ client side and server side. Built-in predicates are listed below:AndPredicateEqualPredicateILikePredicateLikePredicateOrPredicateTruePredicateBetweenPredicateFalsePredicateInPredicateNotEqualPredicatePagingPredicateRegexPredicateGreaterLessPredicateInstanceOfPredicateNotPredicateSqlPredicate
See http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#query-api, https://github.com/hazelcast/hazelcast-cpp-client/blob/master/examples/distributed-map/query/queryExample.cpp, #89 for details.
Enhancements
- The UIT tests are speeded up.
- Added load and stability test. See #65
Fixes
3.6.1
This document includes the new features, enhancements and fixed issues for Hazelcast C++ Client 3.6.1 release.
New Features
There are no new features.
Enhancements
There are no new enhancements.
Fixes
- The client gets stuck on server restart. #64-issue.
- Fixes the problems with client hanging during server restarts on heavy loads. Fixes a memory access issue when re-throwing an exception, correctly clears the call promise maps during connection close. Adds LoadTests while server restarting and solves the problems that the tests create. #64-PR
- Reverted the thread usage for partition refreshing. It should be handled better by using a mechanism such as ExecutorService. The destructor of the thread was blocking on thread join after performing
thread_cancel(cancel was not affecting the update) which caused the update to be blocking anyway. The refresh is being called through the cluster listener thread hence it does not block the IOSelector thread. Added the additional addresses to Java server member for some manual tests. #63 - Fix for release script error when there is space in the directory path. #52
- Backport of all changes performed at master into the maintenance branch. #45
- Static initialization moved to the header. #43
- CHECK_NULL in SerializationService header moved to source file since MACROs can collide with the users MACRO when defined in the header. An example code is provided for custom serialization. Related test codes are modified for custom serialization. For threads safety, instance of SerializationConstants is created in global space. ClassCastException for portable identified and custom serializable is added. #38
- Added the missing header files into the release script. #34
- Fixes compile problems due to the usage of stdint MACROS. #28