
In this Release Notes document, you will find the new features, enhancements and fixes of the Hazelcast 3.5 release.
The numbers in the square brackets refer to the number of the issues 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
This section provides the new features introduced with Hazelcast 3.5 release. 

- Async Back Pressure: The Back Pressure introduced with Hazelcast 3.4 now supports async operations.

- Client Configuration Import: Hazelcast now supports replacing variables with system properties in the declarative configuration of Hazelcast client. Moreover, now you can compose the Hazelcast client declarative configuration out of smaller configuration snippets. 

- Cluster Quorum: This feature enables you to define the minimum number of machines required in a cluster for the cluster to remain in an operational state. For more information, please see the Cluster Quorum section.

- Hazelcast Client Protocol: Starting with 3.5, Hazelcast introduces the support for different versions of clients in a cluster. Please keep in mind that this support is not valid for the releases before 3.5.

- Complete Implementation of XA Transactions

- Continuous Query Caching

- Dynamic Selector Rebalancing

- Fail Fast on Invalid Configuration 

- Enterprise WAN Replication 

- Hazelcast Client Protocol

- Increased Visibility of Slow Operations

- Listener for Lost Partitions

- Management of Unbounded Return Values

- Near Cache for JCache 

- New License Management Features

- One Listener Interface per Event

- Scalable Map Loader



2. Enhancements

This section lists the enhancements performed for Hazelcast 3.5 release.

- *Eventing System Improvements*: ???. For more information, please see [???](#???).
- **Query and Indexing Improvements*: ???. For more information, please see [???](#???).
- *XA Transactions Improvements*: ???. For more information, please see [???](#???).
 

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

- Since near cache is not supported as embedded but only at client, at the moment, there is no need for `NearCacheConfig` in `CacheConfig` [#5215].
 
- `SlowOperationDetector` should have an option to not to log the stacktraces to the log file. There is no need to have the stacktraces written to the normal log file if the Hazelcast Management Center or the performance monitor is being used [#5043].

- There are no Spring tags available for Native Memory configuration [#4772].

- In the class `BasicInvocationFuture`, there is no need to create an additional `AtomicInteger` object. It should be replaced with `AtomicIntegerFieldUpdater` [#4408].

- There is no need to use the class `IsStillExecutingOperation` to check if an operation is running locally. One can directly access to the scheduler [#4407].

- Configuring NearCache in a Client/Server system only talks about the programmatic configuration of NearCache on the clients. The declarative configuration (XML) of the same is not mentioned [#4376].

- The JavaDoc for the methods `KeyValueSource.hasNext/element/key` and `Iterator.hasNext/next` should emphasize the differences between each other, i.e. the state changing behavior should be clarified [#4218].

- While migration is in progress, the nodes will have different partition state versions. If the query is running at that time, it can get results from the nodes at different stages of the migration. By adding partition state version to the query results, it can be checked whether the migration was happening and the query can be re-run [#4206].

- XML Config Schema does not allow to set a `SecurityInterceptor` Implementation [#4118].

- Currently, certain types of remote executed calls are stored into the `executingCalls` map. The key (and value) is a `RemoteCallKey` object. The functionality provided is the ability to ask on the remote side if an operation is still executing. For a partition-aware operation, this is not needed. When an operation is scheduled by a partition specific operation thread, the operation can be stored in a volatile field in that
thread [#4079].

- The class `TcpIpJoinerOverAWS` fails at AWS' recently launched eu-central-1 region. The reason for the fail is that the region requires v4 signatures [#3963].

- The `hazelcast-spring-<`*version*`>.xsd` should include the User Defined Services (SPI) elements and attributes [#3565].

- Map wildcard matching is confusing. There should be a pluggable wildcard configuration
resolver [#2431].


3. Fixes

*3.5 Fixes*

This section lists issues solved for **Hazelcast 3.5** release.

- The test for unbounded return values runs forever with the new client implementation [#5230].

- The method `putTransient` actuated the MapStore unexpectedly in an environment with multiple instances [#5225].

- The method `removeAttribute` will prevent any updates by the method `setAttribute` in the deferred write mode [#5186].

- Backward compatibility of eviction configuration for cache is broken since `CacheEvictionConfig` class was renamed to `EvictionConfig` for general usage [#5180].

- When host names are not registered in DNS or in `/etc/hosts` and the members are configured manually with IP addresses and while one node is running, a second node joins to the cluster 5 minutes after it started [#5072].

- The `SlowOperationDTO.operation` shows only the class name, not the package. This can lead to ambiguity and the actual class cannot be tracked [#5041].

- There is no documentation comment for the MessageListener interface of ITopic [#5019].

- The method `InvocationFuture.isDone` returns `true` as soon as there is a response including `WAIT_RESPONSE`. However, `WAIT_RESPONSE` is an intermediate response, not a final one [#5002].

- The method `InvocationFuture.andThen` does not deal with the null response correctly [#5001].

- `CacheCreationTest` fails due to the multiple `TestHazelcastInstanceFactory` creations in the same test [#4987].

- When Spring dependency is upgraded to 4.1.x, an exception related to the `putIfAbsent` method is thrown [#4981].

- Hazelcast Client code allows to use the value *0* for the `connectionAttemptLimit` property which internally results in `int.maxValue`. However, the XSD of the Hazelcast Spring configuration requires it to be at least 1 [#4967].

- When upgraded to 3.5-SNAPSHOT for testing, Hazelcast project gives a warning that mentions a missing configuration for `hazelcastmq.txn-topic` [#4790].

- When Hazelcast is installed using Maven in Windows environment, the test `XmlConfigImportVariableReplacementTest` fails [#4758].

- When a request cannot be executed due to a problem (connection error, etc.), if the operation redo is enabled, request is retried. Retried operations are offloaded to an executor, but after offloading, the user thread still tries to retry the request. This causes anomalies like operations being executed twice or operation responses being handled incorrectly [#4693].

- The `size()` method for a replicated map should return `0` when the entry is removed [#4666].

- There have been Hazelcast AWS exceptions after the version of AWS signer had changed (from v2 to v4) [#4571].

- In the declarative configuration; when a variable is used to specify the value of an element or attribute,
Hazelcast ignores the strings that come before the variable [#4533].

- In Hazelcast 3.3.4, `FinalizeJoinOperation` times out if the method `MapStore.loadAllKeys()` takes more than 5 seconds [#4348].

- Owner connection `read()` forever [#3401].



