Releases: hazelcast/hazelcast
v4.1.10
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast IMDG 4.1.10 releases. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Enhancements
- Improved connection handling. [#21644]
- To decrease the load on the Management Center for large clusters, the level of network related metrics has been changed to DEBUG. When you need these metrics, you can use the hazelcast.metrics.debug.enabled property. [#21260]
Fixes
- Fixed an issue where replication over WAN was failing on the source cluster members, when there are multiple batch publishers configured in a single WAN replication. [#22498]
- Fixed an issue where the cluster was failing to operate since the indexes on backup partitions were removed by
map.ClearBackupOperation
. [#22305] - Fixed an issue where a cluster could not be formed when security is enabled, various client permissions are set, and multiple members are started simultaneously. [#21507]
v5.2.1
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast Platform 5.2.1 releases. The numbers in the square brackets refer to the issues and pull requests in Hazelcast's GitHub repository.
Enhancements
- Added support for discovering ECS and EC2 members on AWS. See Deploying a Cluster on Amazon AWS. [#22590]
Fixes
- Fixed a memory leak due to incomplete clean-up of backup replica sync operations. [#22756]
- Fixed an issue where a map was loading old values with
map.set()
when map store offloading is enabled. [#22603] - Fixed an issue where the map entries recovered from persistence were not expiring after their time-to-live durations. [#22557]
- Fixed an issue where external data store configurations could not be added dynamically. [#22464]
v5.1.5
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast Platform 5.1.5 releases. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Fixes
- Fixed a memory leak due to incomplete clean-up of backup replica sync operations. [#22767]
- Fixed an issue where
NullPointerException
was thrown around theCREATE JOB
statement which is using Kafka Sink connector when Kafka has no records yet. Now, it produces an appropriate log message. [#22697] - Fixed an issue where the map entries recovered from persistence were not expiring after their time-to-live durations. [#22558]
- Fixed an issue where replication over WAN was failing on the source cluster members, when there are multiple batch publishers configured in a single WAN replication. [#22500]
v5.2.0
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast Platform 5.2.0 release. The numbers in the square brackets refer to the issues and pull requests in Hazelcast's GitHub repository.
New Features
- SQL stream-to-stream joins: You can now correlate multiple streams of data with each other using the relational join operation.
- Generic MapStore (BETA): You no longer need to write Java code to get data from an external data store, such as a relational database, into Hazelcast by implementing the
MapStore
orMapLoader
interfaces. - JDBC connector (BETA): You can now use SQL to connect to and query any database that supports the JDBC interface.
- CP Subsystem Leadership Priority: To ensure the availability of the CP subsystem, you can now transfer CP member leadership to another member:
There are cases when some CP members should not act as a leader. For example, a member with high load would not be a good leader, or, in a WAN deployment, members in a primary datacenter may be preferred in order to minimize the latency between the clients and leader. You can transfer the leadership using thecp-member-priority
configuration element. See Configuring Leadership Priority. - User Defined Types (Experimental): You can now query nested objects within Java, compact, and portable mappings using the User Defined Types (UDTs).
Breaking Changes
- Introduced a check to control the versions of Hazelcast Platform members and Hazelcast CLI are matched. Previously, it was possible to submit a job using a different version of CLI from the member version. Generally, it would work when there were no change in the serialized form of pipeline. Now, Hazelcast fails earlier in this case. [#22224]
- Removed the
BETA
annotations from the compact serialization andGenericRecord
related classes, i.e., they are stable. Now, compact serialization is enabled by default; theenabled
attribute within thecompact-serialization
configuration block does not exist anymore. [#21997]
Enhancements
Performance
- MapStore Offloading: Added
offload
element to map store configuration. It is used to offload map store and loader operations for each map in the cluster. This way, a map store operation does not block the next operations by blocking a partition thread indefinitely. Partition threads are one of the most important shared resources in a cluster; this offloading enables faster completion of the operations in these threads.
See Offloading MapStore and MapLoader Operations. [#21651]
SQL Engine
- Multiple performance enhancements in the SQL engine.
Distribution
- Removed
hazelcast-hibernate53
dependency from the main Hazelcast Platform distribution as it is not needed anymore. [#22282] - Minor versions of Hazelcast Platform are now released as X.Y.0, instead of the previous X.Y versioning scheme. [#22218]
Serialization
-
Added support of
List
,ArrayList
,Set
,HashSet
,Map
, andHashMap
for the zero-config serializers. [#21980] -
Added a check to the array of
Compact
andGenericRecord
object fields, that does not allow different item types and schemas in such fields. [#21958] -
Moved the
GenericRecord
andGenericRecordBuilder
interfaces to the newserialization.genericrecord
package. [#21955] -
In case there is a field type that is not supported by the reflective serializer, now Hazelcast fails with an exception; all JDK classes are now excluded from the zero-config serialization, meaning, they cannot be used as types, field types, or array component types in the reflective serializers. [#21918]
-
Hazelcast now does not provide methods to read a default value in case of a missing field in the data. Instead, the following method has been introduced in
CompactReader
to check the existence of a field with its name and kind.+FieldKind getFieldKind(String fieldName);
You can use this method for fields that have changed or have a potential to change in the future. [#21876]
-
Moved the
type-name
andclass
configuration elements into thecompact-serialization
block. Removed theregistered-classes
element. [#21861] -
Renamed the
cloneWithBuilder()
method asnewBuilderWithClone()
in theGenericRecord
class. [#21730] -
Added support for
char
fields in the compact serialization format. With this,char
,char[]
,Character
, andCharacter[]
fields are now supported in the reflective compact serializers. [#21054]
Configuration
- REST API is now enabled by default when you use Hazelcast Platform with Docker or by downloading the distribution packages (ZIP or TAR). [#22249]
- Member discoveries in cloud environments (AWS, GCP, Azure, Kubernetes, Eureka) in Spring XML can be configured now using property placeholders. [#21995]
- Added configuration elements for external data stores used by map stores, and JDBC sinks and sources. See Configuring Connections to External Data Stores. [#21716]
- Introduced a way to configure AWS Asynchronous Client's executor service used by Jet engine's Kinesis sources and sinks (thread pool size, threads names pattern).
For this purpose,AwsConfig
is extended with an additionalexecutorServiceSupplier
field that allows to specify what executor service to be used. [#21075]
Other Enhancements
- You can now provide comma-separated lists to give multiple labels for the Kubernetes Discovery Plugin configurations
service-label-name
,service-label-value
,pod-label-name
, andpod-label-value
. [#22277] - Added a new method which allows to update a map entry's value without changing its previously set expiration time.
See https://docs.hazelcast.org/docs/5.2.0/javadoc/com/hazelcast/map/ExtendedMapEntry.html#setValueWithoutChangingExpiryTime-V-. [#22199] - Added support of configuring the maximum message size for Python runner, when using the Jet engine with Python. [#22106]
- Fixed an issue where a client was infinitely trying to reconnect to the cluster with CP persistence enabled. [#21769]
- Improved the change data capture API:
- Introduced two new methods,
newValue()
andoldValue()
, to compare values before and after an update of a record. - Methods that are used to extract metadata are no longer doing on the fly parsing of the payload, meaning there won't be any
ParsingException
and you don't have to deal with those possible exceptions. - Expose the Debezium source method, which takes a class instance instead of
String
with class name, to make the code more strongly-typed.
[#21536]
- Introduced two new methods,
- You can now specify multiple partitions while using predicate queries. This can only be done using https://docs.hazelcast.org/docs/5.2.0/javadoc/com/hazelcast/query/Predicates.html#multiPartitionPredicate-java.util.Set-com.hazelcast.query.Predicate-. [#21319]
- To decrease the load on the Management Center for large clusters, the level of network related metrics has been changed to
DEBUG
. When you need these metrics, you can use thehazelcast.metrics.debug.enabled
] property. [#21232] - While building Hazelcast from the source, you can now use the boolean
hazelcast.disable.docker.tests
property to ignore the tests that require Docker to run (by setting it tofalse
). [#21087] - Improved connection handling. [#21631]
- Added support of dynamic update of IP addresses of cluster members. For this, a new REST endpoint (
hazelcast/rest/config/tcp-ip/member-list
) is introduced for getting and updating the member list at runtime.
This improves the split-brain recovery under even certain corner cases and ensures that the cluster recovery from split-brain in every cluster setup can be initially formed. [#20552] - Added support of nested fields for Hazelcast's Java classes. [#19954]
Fixes
- Fixed an issue where map persistence was not working when configured programmatically. See vbekiaris@e7828b8.
- Fixed an issue where the
IS NULL
condition was being ignored when there is another condition for the same column. [#22238] - Fixed an issue where the
IMap.get()
call was blocked whenNoNodeAvailableException
is thrown from the MapStore. [#22168] - Fixed an issue where
ClearBackupOperation
in maps was being reported as a slow operation on the members which was causing the entire cluster to be frozen. [#22082] - Fixed an issue where the cluster merge was not happening properly when the master member does not know the addresses of the other members and if the other members start before the master one. [#22021]
- Fixed an issue where the failover client statistics was not calculated properly. [#21807]
- Fixed an issue where an internal periodic task (with an interval of 1 second) was trying to connect a client to all cluster members, even if there is no connection to the cluster yet:
- A client connects to the cluster (where smart routing is enabled by default)
- Connection is lost due to a failure
- When the cluster is up, the client retries to connect for the configured wait time between retries
- During these reconnection attempts, the internal periodic task was outputting logs of connection failure for each second until the client connects to the cluster.
[#21705]
- SQL storage now is able to replicate data to the newly joined members in the cluster. [#21632]
- Fixed an issue where
NullPointerException
was thrown around theCREATE JOB
statement which is using Kafka Sink connector when Kafka has no records yet. Now, it produces an appropriate log message. [#21460] - Fixed an issue where a cluster could not be formed when security is enabled, various client permissions are set, and multiple members are started simultaneously. [#21440]
- Fixed an issue where data persistence and tiered storage configurations could not be added dynamically. [#21432...
v5.1.4
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast Platform 5.1.4 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Enhancements
- Removed the
hazelcast-jet-cdc-mysql
module from the Hazelcast Platform Enterprise distributions due to licensing.
You need to manually download this module if you have the Enterprise edition. See xref:pipelines:cdc.adoc#step-4-start-hazelcast[Capture Changes from MySQL] for details. #5312 - The Kubernetes discovery plugin has been enhanced to support the service token expiration. The token is time-bound and its content
is refreshed periodically in the recent Kubernetes versions. A new token reader has been implemented to get the token value periodically. [#22394] - You can now provide comma-separated lists to give multiple labels for the Kubernetes Discovery Plugin configurations
service-label-name
,service-label-value
,pod-label-name
, andpod-label-value
. [#22401]
v5.2-BETA-1
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast Platform 5.2-BETA-1 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
New Features
- Streaming SQL: Hazelcast Platform now supports stream-to-stream joins. You can
combine data from different streams into a new stream which allows you to enrich the data
of one stream with the data of another. - Out-of-the-box Connector for Relational Databases: You were required to write Java code to get
data from an external storage system (such as a relational database) into Hazelcast by implementing
MapLoader
andMapStore
interfaces. With this release, you can achieve this in a "zero-code" way. - JDBC Connector: Hazelcast Platform's SQL engine now can connect to any database supporting the JDBC interface.
We have also added the SQL basedGenericMapStore
; a map store implementation which uses the JDBC connector.
Enhancements
SQL Engine
- Added support of the
Calc
operator to mergeProject
andFilter
. [#17058],
Distribution
- Upgraded the Kafka client library to version 2.8.1. [#20938]
Serialization
-
Removed the
BETA
annotations from the compact serialization
andGenericRecord
related classes, i.e., they are stable. Now, compact serialization is enabled by default. [#21991] -
Added support of
List
,ArrayList
,Set
,HashSet
,Map
, andHashMap
for the zero-config serializers. [#20754] -
Added a check to the array of
Compact
andGenericRecord
object fields, that does not allow different item types and schemas in such fields. [#21958] -
Moved the
GenericRecord
andGenericRecordBuilder
interfaces to the newserialization.genericrecord
package. [#21955] -
In case there is a field type that is not supported by the reflective serializer, now Hazelcast fails with an exception; all JDK classes are now excluded from the zero-config serialization, meaning, they cannot be used as types, field types, or array component types in the reflective serializers. [#21918]
-
Hazelcast now does not provide methods to read a default value in case of a missing field in the data. Instead, the following method has been introduced in
CompactReader
to check the existence of a field with its name and kind.FieldKind getFieldKind(String fieldName);
You can use this method for fields that have changed or have a potential to change in the future. [#21876]
-
Moved the
type-name
andclass
configuration elements into thecompact-serialization
block. Removed theregistered-classes
element. [#21861] -
Renamed the
cloneWithBuilder()
method asnewBuilderWithClone()
in theGenericRecord
class. [#21730] -
Added support for
char
fields in the compact serialization format. With this,char
,char[]
,Character
, andCharacter[]
fields are now supported in the reflective compact serializers. [#21054] -
Hazelcast now does not allow to create SQL mappings containing the compact format, when the compact serialization is not enabled, and provides a meaningful error; previously this situation was producing confusing errors. [#20998]
Configuration
- Member discoveries in cloud environments (AWS, GCP, Azure, Kubernetes, Eureka) in Spring XML can be configured now using property placeholders. [#21995]
- Added configuration elements for external data stores used by map stores, and JDBC sinks and sources. [#21716]
- Added
offload
element to map store configuration. It is used to offload map store and loader operations for each map in the cluster.
This way, a map store operation does not block the next operations by blocking a partition thread indefinitely.
Partition threads are one of the most important shared resources in a cluster; this offloading enables faster completion of the operations in these threads. [#21651]
WAN Replication
- Improved the way how acknowledgements are handled for WAN synchronization, such that they are now sent asynchronously.
This makes the WAN synchronization progress much more reliable and WAN synchronization more resilient by doing retries if something goes wrong in any phase. [#21415]
Other Enhancements
- To ensure the availability of the CP subsystem, you can now transfer CP member leadership to another member:
There are cases when some CP members should not act as a leader. For example, a member with high load would not be a good leader, or, in a WAN deployment,
members in a primary datacenter may be preferred in order to minimize the latency between the clients and leader.
You can transfer the leadership using thecp-member-priority
configuration element. [#21941] - Improved the change data capture API:
- Introduced two new methods,
newValue()
andoldValue()
, to compare values before and after an update of a record. - Methods that are used to extract metadata are no longer doing on the fly parsing of the payload, meaning there won't be any
ParsingException
and
you don't have to deal with those possible exceptions. - Expose the Debezium source method, which takes a class instance instead of
String
with class name, to make the code more strongly-typed.
[#21536]
- Introduced two new methods,
- While https://github.com/hazelcast/hazelcast#building-from-source[building Hazelcast] from the source,
you can now use the booleanhazelcast.disable.docker.tests
property to ignore the tests that require Docker
to run (by setting it tofalse
). [#21087] - Improved connection handling. [#21631]
- Added support of dynamic update of IP addresses of cluster members. For this,
a new REST endpoint (hazelcast/rest/config/tcp-ip/member-list
) is introduced for getting and updating the member list at runtime.
This improves the split-brain recovery under even certain corner cases and ensures that the
cluster recovery from split-brain in every cluster setup can be initially formed. [#20552] - Added support of nested fields for Hazelcast's Java classes. [#19954]
Fixes
- Fixed an issue where an internal periodic task (with an interval of 1 second) was trying to connect a client to all cluster members, even if there is no connection to the cluster yet:
- A client connects to the cluster (where smart routing is enabled by default)
- Connection is lost due to a failure
- When the cluster is up, the client retries to connect for the configured wait time between retries
- During these reconnection attempts, the internal periodic task was outputting logs of connection failure for each second until the client connects to the cluster.
[#21705]
- Fixed an issue where the SQL storage was not able to replicate data to the newly joined members in the cluster. [#21632]
- Fixed an issue where
NullPointerException
was thrown around theCREATE JOB
statement which is using Kafka Sink connector when Kafka has no records yet. Now, it produces an appropriate log message. [#21460] - Fixed an issue where a cluster could not be formed when security is enabled, various client permissions are set,
and multiple members are started simultaneously. [#21440] - Fixed an issue where data persistence and tiered storage configurations could not be added dynamically. [#21432]
- Fixed a data loss issue which was occurring with graceful shutdown with when a member (with zero backup) restarts on the same address. [#21428]
- Fixed an issue where a map remains empty after a put operation when the
max-idle-seconds
configuration has the value ofInteger.MAX_VALUE
. [#21409] - Fixed an issue where the connections were dropping in an active-active WAN replication setup using
advanced network configurations. [#21219] - Fixed an issue where a cluster was unresponsive when you perform a health check to see the members are in the safe state;
cluster members were hanging in theREPLICA_NOT_SYNC
state during such health checks. [#21145] - Fixed an issue where the statistics like puts and removals were not increasing when these operations are executed through Transactional interface. [#21086]
- Fixed an issue where a set time-to-live (TTL) duration for an entry was ignoring the split seconds.
For example, when you set TTL as 1 seconds and put an entry at 01:01:5.99 AM , then the entry was already
expired when you want to get this entry at 01:01:6.01 AM (should have been expired at 01:01:6.99 AM). [#21018] - Fixed a data race in
SingleProtocolEncoder
; while one method of this interface is called from the input thread,
another one is called from the output thread which was causing the race.[#20991] - Fixed an issue where the automatic module name in
hazelcast-5.x.jar
could not be detected using Gradle. The reason was
/META-INF/MANIFEST.MF
not being the first or second entry in the JAR file; now this manifest file is the second entry. [#20969] - Fixed an issue where the list of members in the cluster was reset to an empty list when the UUID of a cluster changes after its restart:
this was causing startup failures since Hazelcast could not manage the events due to the empty member list after a restart. [#20818] - Fixed an issue where
JSON_QUERY
with expression filter in SQL was not producing a result when the data source contains internal array(s). [#20761] - Fixed the mapping issue of Hazelcast map fields in SQL; when the value object contains a public getter of
java.util.Map
, theCREATE MAPPING
statement was failing. [#20256] - Fixed an issue where the cluster was not merging properly if the master member does not know other members' addresses and when the other members start before the master member. [#18661]
Contributors
We would like to thank the contributors from our open source community
who worked on this release:
3.12.13
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast IMDG 3.12.13 releases. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Enhancements
- Improved connection handling. [#21885]
Fixes
- Fixed a split-brain recovery issue where the split clusters could not merge due to missing master member
address. [#21860] - Fixed an issue that occurred when there is Near Cache configured for both the member and client sides for the same map and
serialize-keys
option isfalse
. [#18322] - Fixed an issue where the Java client was not receiving membership events in its membership listener when a member with Hot Restart Persistence enabled is restarted. [#18271]
- The difference between the Near Cache configurations before and after a client is recreated with the same client failover configuration is fixed now. [#18168]
- Fixed an issue that prohibited Hazelcast from being used as Tomcat session manager when it is also deployed in a web application context: When a client application that uses Hazelcast tries to connect to the Hazelcast cluster and this application’s web sessions are persisted using Hazelcast’s Tomcat session manager, the session manager could not connect to the cluster. This has been fixed by improving Hazelcast’s service loader mechanism. [#18119]
v5.1.3
This document lists the new features, enhancements, fixed issues, and removed or deprecated features for Hazelcast Platform v5.1.3 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Enhancements
- Improved connection handling. [#21641]
Fixes
- When the
hazelcast.socket.buffer.direct
property is enabled, clusters no longer throw exceptions in response to text protocols such as the REST API. [#21700]
v5.1.2
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast 5.1.2 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Fixes
- Fixed an issue where a cluster could not be formed when security is enabled, various client permissions are set, and multiple members
are started simultaneously. [#21510] - Fixed an issue where a cluster was unresponsive when you perform a health check to see the members are in the safe state;
cluster members were hanging in theREPLICA_NOT_SYNC
state during such health checks. [#21208] - Fixed an issue where the list of members in the cluster was reset to an empty list when the UUID of a cluster changes after its restart:
this was causing startup failures since Hazelcast could not manage the events due to the empty member list after a restart. [#21178] - Fixed an issue where the statistics like puts and removals were not increasing when these operations are executed through Transactional interface. [#21107]
- Fixed a data race in
SingleProtocolEncoder
; while one method of this interface is called from the input thread,
another one is called from the output thread which was causing the race. [#20994] - Fixed an issue where the automatic module name in
hazelcast-5.x.jar
could not be detected using Gradle. The reason was
/META-INF/MANIFEST.MF
not being the first or second entry in the JAR file; now this manifest file is the second entry. [#20976]
v4.2.5
This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast IMDG 4.2.5 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.
Enhancements
- Introduced a system property for allowing you to audit that all the Hazelcast instances running in your
environment have the instance tracking file name set correctly in the configuration. See the note in Instance Tracking documentation. [#19929] - Enabled XXE (XML External Entity Reference) protection for
XMLInputFactory
. The issue was reported through
https://huntr.dev/bounties/d63972a2-b910-480a-a86b-d1f75d24d563/. [#20942] - The probe level for most of the network related statistics has been changed to "DEBUG" to decrease the pressure on Management Center; now they are not sent to Management Center by default. If you want to see these statistics, you need to set the "hazelcast.metrics.debug.enabled" property to "true. [#21275]
Fixes
- Fixed an issue where the statistics like puts and removals were not increasing when these operations are executed through Transactional interface. [#21105]
- Fixed an issue where Hazelcast clients, which have only the IP address of a member to connect (but the member also has a hostname), were not able to connect to the cluster. [#20631]
- Hazelcast’s memcached implementation was interpreting the number values and parameters for
incr
anddecr
wrongly (numbers were being converted into byte arrays instead of decimals).
This has been fixed by making these commands' implementations strictly follow the memcached protocol specification. [#19676] - Fixed an issue where the
totalPublishes
statistics for the Reliable Topic data structure were always generated as0
. [#19656] - Fixed an issue where the
map.clear
andcache.clear
methods were evicting all entries in all near caches of all the maps in a cluster, not only the map on which these methods are called. [#19501] - Fixed an issue where map entries were never evicted or expired:
** Let's say you have a map whose entries have both time-to-live and maximum idle durations configured.
** You are periodically reading the entries at times shorter than these durations.
In this case, the entries were not evicted or expired according to their time-to-live or maximum idle duration configurations.
You can set theper-entry-stats-enabled
property totrue
to fix this.
[#19483]
Removed/Deprecated Features
The following system properties have been deprecated:
hazelcast.client.statistics.enabled
hazelcast.client.statistics.period.seconds