
In this Release Notes document, you will find the new features, enhancements and fixes of the Hazelcast 3.8 release.
The numbers in the square brackets refer to the issue number in Hazelcast’s GitHub repository. You can reach
to the full descriptions of the issues at https://github.com/hazelcast/hazelcast/issues/<issue number>.

1. New Features

- Rolling Member Upgrades for Minor Releases: You can upgrade your Hazelcast members to the next minor release without service interruption. Please refer to the Rolling Member Upgrades chapter.
- Restore Hot Restart Data in a Different Cluster: You will be able to restore Hot Restart data on a completely new cluster with different IP addresses or on a cluster of machines formed by existing and new IP addresses. Since this is a removal of a restriction or limitation, nothing will change for current Hot Restart Store users. Please refer to the Moving/Copying Hot Restart Data section.
- HyperLogLog: HyperLogLog data structure is implemented on top of Hazelcast to estimate cardinality.
- Scheduled Executor Service: Distributed implementation of Java's ScheduledExecutorService API.
- Zero Deployment: Hazelcast, now, accesses and uses the user classes without having them on the classpath.

2. Enhancements

This section lists the enhancements performed for Hazelcast 3.8 release.

- Hazelcast Striim Hot Cache Adapter: Hot Cache functionality based on Striim's Change Data Capture (CDC) for the underlying database updates. Please refer to the Hazelcast Striim Hot Cache section.
- Entry Cost Statistics for High-Density Memory Store: If you are using High-Density Memory, you can see the entry cost statistics in the Management Center.
- Hot Restart Usability Improvements: When a cluster with Hot Restart enabled is restarted, it starts in the ACTIVE state. Please refer to the Hot Restart Types section.
- Hot Restart with Incomplete Members: The restart procedure for a cluster having Hot Restart enabled is now more flexible by allowing you to do a partial start, which basically means that once the cluster is shutdown, it can be restarted with some missing members. Please refer to the Partial Start section.
- Copy Hot Restart Store data from Source to Target: You can copy Hot Restart Store data from a running cluster to a target without shutting down the source cluster. Please refer to the Hot Backup section.
- Cluster Quorum for Queue and Lock: Cluster quorum is now available for the queue and lock data structures. Please refer to the Split-Brain Protection section.
- Eventually Consistent Near Cache: With this improvement, possible losses of invalidation events are detected and stale reads are prevented.
- High Performance Near Cache: A near cache pre-loader is introduced to preserve the information about which keys are used in a populated near cache.
- Fast Aggregations for Queries: Please refer to Fast Aggregations section.
- Projections for Queries: Please refer to Projections section.
- `removeAll(predicate)` for Map: A void method to selectively delete a bulk of objects from the member side.
- Ringbuffer with Persistent Datastore: Implemented for the Ringbuffer which is similar to the existing queue store mechanism.
- Unified Near Cache Implementation: Different near cache implementations for JCache, map, client side and member side are unified. You can refer to the Near Cache section.
- Dynamic WAN Synchronization: Improvement to allow copying the maps' all content to a target cluster dynamically in runtime.
- Improvement in WAN Queue Full Behavior: Now, Hazelcast throws an exception when the queue is full and replication is active, unless it is stopped on the Management Center.


The following are the other improvements performed to solve the enhancement issues opened by the Hazelcast customers/team.

- It would be nice to have names assigned to all threads created by Hazelcast (and not the default ones, e.g., pool-2-thread-1, pool-2-thread-2). [9210]
- There should be a more detailed and clarifying information in the diagnostics of PartitionIteratingOperation. [8855]
When there is no access to NodeEngine, the logger should be able to be used from a static context without any side effects to the logging configuration. [8760]
- Client tasks should be bounced back when a member has not completely start yet. [8715]
- Currently the property com.hazelcast.map.impl.eviction.ExpirationManager.PERIOD is hard-coded to 5 seconds. Making it a configurable property will help in tuning the eviction. [8277]
- The method com.hazelcast.topic.impl.TopicProxy#publish serializes the message even if the message is never sent due to having no subscribers. In the case of non-global-ordering and non-client use, the implementation should defer serialization until it has established that there are subscribers. [8262]
- Configuration setting for WAN replication queue should be only for primary entries. [7124]
- Currently if you want to use Container-Managed Transactions with Hazelcast within a JEE Application Server, you need to use the provided JCA Adapter. This JCA Adapter creates a Hazelcast instance. This should be allowed: configuration of the JCA Adapter to be either Server or Client-based. [5667]
- Currently PartitionIteratingOperation consumes a generic operation thread, while the operations for the partitions are running. This means that the generic thread pool can dry out and this can cause a lot of problems for important tasks that cannot be executed since the thread pool is empty. A PartitionIteratingService should be introduced where the system can lookup TraceableOperations. [4889]

3. Fixes

This section lists the fixed issues for Hazelcast 3.8 and 3.8.x releases.

*3.8-EA Fixes*

The following are the issues solved for 3.8-EA (Early Access) release.

- Hazelcast 3.7.3 and Spring Boot 1.4.2 get the error PortableFactory[-22] is already registered. [9353]
- Problems with timeout in blocking calls. [9250]
- Client protocol cannot handle "null"s in the collection. [9240]
- Callback for time to live (for map eviction) is invoked with a significant delay. [8894]
- "Warning 2" in IMap::tryRemove method's code comments is not correct. This method returns only a boolean. [8884]
- When clients lose connection to the members in the cluster, even after the clients are reconnected to the cluster, the Entry/Message Listeners are never fired again. [8847]
- Fixed `max-size` value behavior for Near Cache configuration. If you set 0 for the `max-size`, now, it is valued as `Integer.MAX_VALUE` as expected and documented. [8826]
- Spring XML configuration: The smart routing attribute defaults to false while the documentation says it defaults to true. [8746]
- In Hazelcast 3.6.3, the error Current thread is not owner of the lock shows up when using Hazelcast client to perform the actions. [8730]
- Bulk get operation with 100 keys fails. [8535]
- Member attributes go missing after merging from a split-brain scenario. [7697]
- The method setEvictionPolicy for near cache configuration wants a string argument whereas the same for map configuration wants an enum value. [2010]

4. Removed/Deprecated Features

- Aggregators feature is deprecated. Instead, Fast-Aggregations feature should be used.
