This section lists the new features, enhancements, fixed issues and, removed or deprecated features for 3.10.x releases.


Hazelcast IMDG Enterprise Enhancements
  • Split-Brain Healing for Hazelcast Data Structures with High-Density (HD) Memory Store: Added implementations to allow the merging of HD Memory Store backed data structures.
  • Multiple Users/Roles in a Single Security Mapping: Added support for allowing multiple principals, i.e., users or roles/groups, to be attributed to a security realm. Please see the Authorization section for more information.
Hazelcast IMDG Open Source Enhancements
  • Extended Split-Brain Protection: Split-Brain protection has been implemented for all the Hazelcast data structures (it was only for IMap, ICache, IQueue and ILock before 3.10). Please see the Distributed Data Structures chapter.
  • Shorter Split-Brain Detection Window: In addition to the current quorum function, which uses the list of members to determine whether a minimum number of members is available in the cluster, a new quorum implementation has been introduced to shorten the time between the occurrence of a network partitioning and its detection: it takes advantage of information about the cluster health (heartbeats and ICMP pings).
  • Extended Merge Policies: Merge policies applied after a Split-Brain syndrome has been implemented for more Hazelcast data structures (it was for IMap, ICache and Replicated Map before 3.10).
  • Flake ID Generator: Introduced to overcome the duplicate ID generation in case of a network split, by the deprecated IdGenerator data structure. Please see the FlakeIdGenerator section.
  • PN Counter: Introduced CRDT PN Counter (Positive-Negative Counter), which allows incrementing and decrementing a counter value and propagating the results to all cluster members. Please see the PN Counter section.

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

  • Group passwords should not be serialized in ConfigCheck. [#12303]
  • Code comments for Hazelcast.shutdownAll() should be improved: it talks about shutting down all running Hazelcast instances in the JVM. However, native clients, which are also Hazelcast instances, are not shut down when this method is called. [#12217]
  • An initialization exception should be thrown when Symmetric Encryption is configured on Hazelcast Open Source edition. [#12203]
  • IAtomicLong and IAtomicReference miss MergePolicyConfig support in ClientDynamicClusterConfig. [#12126]
  • ConfigXmlGenerator masking should be optional: it masks certain fields like passwords. This is unnecessary since the user creating the hazelcast.xml should already know the values or they should be input by the user installing the application. By masking the fields automatically, the user is forced to manually edit the hazelcast.xml creating a manual step. [#12012]
  • The CharConverter conversion behavior should be improved: When given an empty string, IllegalArgumentException should be thrown instead of the obscure StringIndexOutOfBoundsException. Also, when given a Number, a Character should be returned instead of an Integer. [#11981]
  • The Javadoc for IMap must be enhanced to clarify the value vs. reference semantics. [#11816]
  • The class com.hazelcast.query.Predicates contains public factory methods for query predicates. Most of the methods are missing Javadoc. [#11734]
  • The value of Main-Class in hazelcast-all.jar should be fixed. The class StartServer should be used instead of ConsoleApp. Currently, when the JAR is executed, the ConsoleApp demo application is started. [#11655]
  • The error message for failed client connections should not talk about "address in the config" as multicast discovery may have been used. [#11652]
  • Doing a rolling upgrade without a Hazelcast Enterprise key should produce a better error message. [#11602]
  • IMap contract should describe how it interacts with Map{Loader/Store}. [#10969]
  • New HTTP connections should be logged with DEBUG or a lower level. [#10924]
  • Out-of-the-box Hazelcast on Docker experience should be improved due to the "This node is not requested endpoint" errors. [#9219]


  • Health Monitor reports load statistics incorrectly. [#12190]
  • Time-to-live for IMap is not working as documented: outdated warnings should be removed from the code comments. [#12144]
  • There are multiple top-level types missing in HazelcastNamespaceHandler, for example serializer. [#12121]
  • The full stack trace of QuorumException should be logged into the log file instead of the console. [#12188]
  • ConfigXmlGeneratorTest: There are missing tests for many attributes of multiple data structures. [#12119]
  • Beta annotation from DurableExecutor classes should be removed. [#12083]
  • Hazelcast should not allow to add dynamic configurations for concurrent data structures during rolling upgrades: new configurations have been introduced for IAtomicLong and IAtomicReference for the split-brain healing. There may come more for the split-brain protection; these should not be added dynamically when the cluster is on version 3.9, since old members will fail to process them. [#12000]
  • Using MemberAddressProvider with custom discovery strategy SPI does not seem to work. [#11997]
  • Hit count gets incremented by two (instead of one) when entry is updated using EntryProcessor. [#11993]
  • The objects BufferObjectDataInput and BufferObjectDataOutput are pooled. While being used for serialization, their version may be set, however when cleared (so they can be returned to the pool), their version is not reset to UNKNOWN. [#11900]
  • The default network interface selection chooses a wrong interface in some cases. [#11795]
  • The memory limit setting for a queue store is ignored and the entries are getting inserted into both the store and the queue, even If the limit is reached. [#11682]
  • When trying to integrate Spring and Hazelcast with MapStore implementation, the JdbcTemplate cannot be autowired in the MapStore class. [#11656]
  • PER_NODE capacity calculation algorithm is not precise. [#11646]
  • Currently ILock operations are not logged at any level. It would be very helpful diagnostic log output can be enabled, with the log lines containing the name of the ILock, the operation (create, lock, unlock, destroy) and the usual timestamp, and thread ID information. [#11622]
  • The Echo task used to execute the operations demo in ConsoleApp fails to deserialize because of missing no-arg constructor. [#11612]
  • Wrong Hazelcast configuration XSD schema is used when minor/major or minor has more than 1 digit (e.g., 3.1x). [#11586]
  • The XSD (hazelcast-spring.xsd) should work independently of the hazelcast-spring.jar. [#11577]
  • IMap with MapStore has duplicate keys. [#11462]
  • Backups' view of the Ringbuffer differs from that of the primary's in case of an exception is thrown by the store underlying the Ringbuffer. [#11209]
  • It does not seem to be possible to configure a list of cipher suites nor a list of SSL/TLS protocols. Client authorization is implemented, but it has to be passed in a populated Properties object. [#10750]
  • Transaction could not obtain a lock for the key while calling the method TransactionalMap.getForUpdate(). [#9374]
  • JCache fails to initialize when the type of a key or value is not available on a remote member. [#8972]
  • There is no way to set the HazelcastClient name and/or InstanceName programmatically. So, the method HazelcastClient.getHazelcastClientByName(String name) does not work. [#7289]
  • IMap JMX statistics are evicted together with the map entry: When system starts and caches are populated, and get the hits, the statistics presents the relevant values for localHits and localGetOperationCount attributes. But after 1 hour of idle and some entries are evicted, these attributes become less and less, till 0. Looks like these statistics are stored together with the entry itself and they are evicted together with the entry. [#4321]

Coverity Fixes

  • The methods readObject(...) and writeObject(...) should call the method from the superclass instead of handling the attributeName field themselves in the classes LikePredicate and RegexPredicate. [#11768]
  • The field retryCounter is not atomically updated in the method RestartingMemberIterator.retry(Set). [#11750]

Behavioral Changes

Up to 3.9.x, the method Config.findCacheConfig looks up a CacheSimpleConfig: if none is found, then null is returned. This behavior has been not like all the other findXXConfig methods in the following ways:

  • findXXConfig never returns null, it falls back to defaults, creates the missing data structure configuration and stores it in Config.
  • findXXConfig returns a read-only copy of the actual configuration, while findCacheConfig returns the found configuration object itself.

With 3.10, the method Config.findCacheConfig is aligned to behave like the other findXXConfig methods; it now returns a read-only copy and does fallback to defaults. If you who want the old behavior for this method in 3.10.x, you should use the method Config.findCacheConfigOrNull.

Known Problems

  • PartitionPredicates only works if you upgrade all of your members to 3.9.3. It may not work
    • when running a mixed cluster having members from 3.9.0, 3.9.1, 3.9.2 and 3.9.3, and
    • when rolling up from 3.8.x to 3.9.x.

Removed/Deprecated Features

  • The data structure IdGenerator is deprecated. It could produce duplicate IDs in case of a network split, even with split-brain protection being enabled. Use Flake ID Generator for an alternative implementation which does not suffer from the mentioned issue.
  • Following system properties are deprecated:
    • hazelcast.master.confirmation.interval.seconds