Hazelcast v4.1 Release Notes

Release Date: 2020-11-04 // 7 months ago
  • πŸš€ This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast IMDG 4.1 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.

    πŸ†• New Features

    • SQL Implementation: Implemented the SQL engine that
      πŸ‘Œ supports map scans, index scans, projections and filters.
      It also introduces the hazelcast-sql module to handle the
      πŸ‘€ SQL engine's dependencies on Apache Calcite. See the SQL section.
    • Automatic Discovery Strategy Detection: Hazelcast now automatically detects
      the cloud environment it's running on (Kubernetes, AWS, GCP or Azure) and applies
      the necessary discovery strategy for the environment. This allows automatically
      πŸ”§ forming the Hazelcast clusters in cloud environments without any configuration.
      πŸ‘€ See the Auto Detection section.
    • πŸ”’ Security Audit Logging: This feature allows observing some important cluster events.
      Auditable events have a unique type ID, and contain a timestamp and importance level.
      πŸ‘€ See the Logging Auditable Events section.
    • πŸ”§ Overriding Configuration: You can now override the configuration entries
      πŸ”§ of your cluster without changing the declarative configuration files (XML/YAML).
      πŸ‘€ See the Overriding Configuration section.
    • Instance Tracking: Hazelcast now writes a file on a Hazelcast member startup
      πŸ“‡ at the configured location. This file contains metadata about the member such as version, product name
      and process ID, and it is not deleted on the member shutdown.
      πŸ‘€ See the Instance Tracking section.

    ✨ Enhancements

    • πŸ‘Œ Improvements in Partial Network Disconnections: Introduced properties
      πŸ”§ to be configured to detect and resolve the partial network issues among the
      πŸ‘€ Hazelcast IMDG members. See [#16680] and the Partial Network Partitions section.
    • Parallel Independent Migrations: Parallelized the partition replica migrations so that
      the time needed for rebalancing the partitions after adding
      πŸ‘€ or removing a member to/from a cluster is reduced. See the hazelcast.partition.max.parallel.migrations property explanation in the
      System Properties appendix.
    • Multiple Persistent Directories: Added support for multiple mounting
      πŸ”§ directories in the persistent memory configuration and also thread affinity for NVMs
      (Non-Volatile Main Memories).
      πŸ‘€ See the Using Persistent Memory section.
    • CP Subsystem Listeners and Metrics: Added membership and group availability
      πŸ‘ listeners for CP Subsystem. Also, added support for publishing CP Subsystem and CP data structure
      πŸ‘€ statistics via Metrics. See the CP Subsystem Listeners section.
    • GenericRecord: Added support for accessing domain objects without domain classes.
      πŸ‘€ See the GenericRecord section.
    • Thread Affinity: Introduced the CPU thread affinity; threads can have affinity for
      🚀 particular CPUs and using this you have a better control on the latency and a better throughput.
      πŸ‘€ See the CPU Thread Affinity section.
    • Trusted Interfaces: It is now possible to restrict the source IP addresses
      πŸ‘€ from which the Management Center operations are allowed. See the Limiting Source Addresses section.
    • πŸ‘ Out-of-the-Box Kerberos Support: Introduced support for Kerberos
      authentication protocol which is one of the standard
      πŸ‘ solutions for single-sign-on. It also adds the GSSAPI authentication support in
      πŸ‘€ LDAP configuration. See the Kerberos Authentication Type section.
    • WAN Throttling Mechanism : This prevents the WAN consumers from
      getting overloaded by the WAN producers if transferring the WAN events takes
      less time than processing them in the target cluster. This can be the case with
      🚀 WAN synchronization if the network latency is low enough. It can be configured using
      the following properties:
      ** hazelcast.wan.consumer.invocation.threshold
      ** hazelcast.wan.consumer.ack.delay.backoff.init
      ** hazelcast.wan.consumer.ack.delay.backoff.max
      ** hazelcast.wan.consumer.ack.delay.backoff.multiplier [#17113]
    • Priority Queue: Added support for the queues with comparators. Using Priority
      Queue, you can define items with higher priority to be polled first.
      πŸ‘€ See the Priority Queue section.
    • Implemented a new concurrent High-Density Memory Store index
      0️⃣ for the queries, based on B+ tree that is enabled by default;
      🐎 brings better performance for lookup queries and enables SQL queries.
    • ⏱ Statistics for Durable and Scheduled Executor Services: Added the statistics for scheduled and
      durable executor services, and for the executor of offloaded entry
      πŸ–¨ processors to be monitored by Management Center.

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

    • βž• Added the missing replicatedmap-permission support to the
      πŸ”§ XML and YAML configuration handlers. [#17812]
    • πŸ‘» Replaced the word "should" with "must" in the exception messages
      to improve the user focus and indicate obligation rather than advice. [#17710]
    • βž• Added the getAndDecrement() operation support for the IAtomicLong
      data structure. [#17699]
    • πŸ”§ Introduced the mode configuration attribute for the
      persistent memory. It defines operational mode of it which can be
      either MOUNTED or SYSTEM_MEMORY. [#17696]
    • βž• Added the support for checking duplicate fields when building
      class definitions. [#17682]
    • βž• Added the support for IList with nullable items to the client protocol. [#17690]
    • πŸ‘Œ Improved the robustness of the diagnostics log writer and its plugins. [#17665]
    • βž• Added the client name tag to the client related metrics. [#17654]
    • βž• Added a check for IMap READ permissions for the maps involved in the
      SQL query executions. [#17612]
    • βž• Added the support for accessing the Hazelcast instance in the
      login modules and credential factories. [#17605]
    • πŸ”§ Introduced a simplified configuration of Kerberos authentication
      for simple scenarios. [#17573]
    • βž• Added statistics support for IBM, OpenJ9, ZGC and Shenandoah. [#17561]
    • πŸ”§ Introduced a state-tracking mechanism for the external configuration
      πŸ”§ parser; all mismatched/unapplied configuration entries coming from
      environment variables or system properties are now logged. [#17559]
    • ⚑️ Updated the jackson.version to 2.11.2 and
      SnakeYAML to 2.1. [#17484], [#17446]
    • βž• Added support for the merge operation in IMap. [#17419]
    • βž• Added public classes to expose the member- and
      client-side caching provider implementations (in the JCache implementation)
      without referring to internal classes. [#17320]
    • πŸ‘Œ Improved the entry processing mechanism so that the read-only processors on backups
      are not executed anymore. [#17318]
    • πŸ‘Œ Improved CacheSimpleConfig so that it now accepts cache name in its constructors. [#17287]
    • βž• Added the statistics for schedule and durable executor services,
      and for the executor of offloaded entry processors to be
      monitored by Management Center. [#17253]
    • 🌲 Cleaned up the noisy initial log messages on Hazelcast startups. [#17243]
    • ⏱ Introduced auto-disposable tasks for the scheduled executor service. [#17215]
    • βž• Added client labels to ClientEndpointImpl.toString()
      to simplify the client identification (in addition to client uuid)
      on the Hazelcast member side. [#17178]
    • βž• Added exception handling when creating caches with tenant control. [#17122]
    • βž• Added support for IMap.compute(). [#17030]
    • βž• Added support to allow submitting and executing operations while a member
      is shutting down to increase the availability of a cluster more that keeps
      large data. [#17028]
    • βž• Added ExtendedMapEntry in order to create a mechanism for setting TTLs in
      entry processors. [#16991]
    • βž• Added hazelcast-azure discovery plugin to the hazelcast-all module. [#16982]
    • Introduced the ConfigRecognition API that determines if a
      πŸ”§ provided declarative configuration is recognized by the rules defined in a given
      implementation. Along with the API the following three implementations are added:
      ** MemberConfigRecognizer for recognizing member XML and YAML configurations
      ** ClientConfigRecognizer for recognizing client XML and YAML configurations
      ** ClientFailoverConfigRecognizer for recognizing failover client XML and YAML configurations [#16958]
    • βž• Added the publishAll(), publishAllAsync() and publishAsync()
      methods to ITopic. [#16946]
    • πŸ”Š Made the diagnostics logs cloud-friendly so that they
      can also be sent to stdout in addition to sending to local files. [#16941]
    • πŸ‘Œ Improved the mechanism of partition table updates to
      ⚑️ eliminate the latencies when these updates are sent to the clients by a member. [#16939]
    • πŸ‘Œ Improved the client configuration such that when the client
      πŸ”§ failover configuration is provided, the reconnect mode cannot
      be set as off; it now fails fast in this case. [#16886]
    • πŸ‘ Introduced the forEach() loop support for IMap. [#16877]
    • βž• Added the load() method to Config, ClientConfig and
      πŸ”§ ClientFailoverConfig classes. This method loads the configuration
      πŸ”§ with the known locations. If not found, the default configuration is returned. [#16864]
    • πŸ‘Œ Improved the deleteAll() (MapStore) and ITopic Javadocs. [#16862], [#16861],
    • βž• Added support for IMap.computeIfAbsent(). [#16808]
    • βž• Added the setAll() and setAllAsync() methods for IMap. [#16787]
    • βž• Added the creation time metric for the executor service. [#16775]
    • πŸ‘Œ Improved an unclear exception message for credentials. [#16756]
    • ⚑️ Updated the related aspects of Hazelcast IMDG after the
      πŸ”„ changes done on the client protocol side to add the ability
      to add new parameters, methods, services, events and custom types
      to codecs. [#16718]
    • Introduced the putAllAsync() method for MultiMap. [#16698]
    • Defined metrics for ISet and IList collections. [#16665]
    • ⬆️ Upgraded log4j2 version to 2.13.0. [#16654]
    • πŸ‘Œ Improved the computeIfPresent() implementation so that now it keeps a
      πŸ‘― clone of the old/existing value and uses that for replace/delete operations. [#16636]
    • 🌲 Introduced the hazelcast.logging.details.enabled property
      🌲 to make the logging of cluster version, name and IP optional to
      ⬇ decrease the noise in the logs when, for example, you have a single-member cluster. [#16622]
    • ⬆️ Upgraded the Hazelcast Kubernetes plugin version to 2.0.1. [#16590]
    • βž• Added the support for automatically detecting the classloader
      πŸš€ of a type for the user code deployment feature. [#16585]
    • Made IMap.putAllAsync() and IMap.submitToKeys() methods public API. [#16449]
    • πŸ‘» Clarified the exception message when you connect to a cluster with an
      invalid cluster name. [#15099]
    • ♻️ Refactored the check and retry initialization logic of
      ReplicatedMapProxy so that they are performed in parallel for different
      partitions. [#14331]
    • βž• Added a test for the ClientConsoleApp class. [#12298]
    • πŸ‘Œ Improved the behavior of ConcurrentMap.computeIfPresent:
      combined single client-server round trips instead of two (for get and
      replace methods). [#11958]

    πŸ’₯ Breaking Changes

    • Starting a standalone Hazelcast instance requires disabling Auto Detection joiner
      (before it required disabling Multicast joiner). [#17112]
    • In a CP subsystem session, a generic IllegalStateException was being thrown when Hazelcast
      is shutdown. Now the same situation throws HazelcastInstanceNotActiveException. [#17120]
    • 0️⃣ Implemented and/or overridden the default methods in Java 8 collections,
      such as computeIfAbsent(), forEach() compute() and replaceAll() for maps. [#14913]

    πŸ›  Fixes

    • πŸ›  Fixed an exception in the /node-state REST calls when the member
      is not fully activated. [#17798]
    • πŸ›  Fixed an issue where Hazelcast was not releasing the acquired lock
      sessions that fail for the reasons other than session expiration and
      wait key cancellation. [#17697]
    • πŸ›  Fixed an issue where Hazelcast was returning false if a client
      is successfully deregistered from any member, but events are still
      delivered for the non-deregistered ones. [#17646]
    • πŸ›  Fixed a data loss issue that was happening while promoting a lite member
      to a data member. [#17621]
    • πŸ›  Fixed an issue where the configuration was not updating entries' time-to-live
      values if the entry processor implements the Offloadable interface. [#17606]
    • πŸ›  Fixed an issue where the caller stacktrace was missing on the
      rethrown async runtime exceptions. [#17546]
    • πŸ›  Fixed the rendering of diagnostics in case there is an exception
      πŸ”Œ inside a diagnostics plugin. [#17501]
    • πŸ›  Fixed an exception that is thrown when using the entry store API and issuing
      a put into the IMap for an item which is not in the map but
      exists in the backing store. [#17441]
    • πŸ›  Fixed an issue where the custom load balancers
      πŸ”§ could not be configured declaratively. [#17415]
    • πŸ›  Fixed a race issue when creating a cache (JCache) using
      multiple methods with the same cache name but having different keys. [#17286]
    • πŸ›  Fixed an issue where the repeated calls of executeOnKeys()
      in Hazelcast clients for NATIVE maps was causing a continuous
      increase in the used memory and exhaustion of the memory pool after a while. [#17276]
    • πŸ›  Fixed an issue where ReliableTopicMessageListener was firing
      ⚠ a warning when the client is shutting down. [#17153]
    • πŸ›  Fixed an issue where the client was stuck with an outdated
      member list after a split-brain scenario. [#17147]
    • πŸ›  Fixed the member side user code deployment; it was throwing an exception
      when inner classes are used to be loaded. [#17044]
    • πŸ›  Fixed the broken interoperability between the CompletableFuture methods. [#17020]
    • πŸ›  Fixed an issue where touching a map entry having an entry processor working on it
      was modifying its time-to-live. [#16987]
    • πŸ›  Fixed an issue in the cache service where its pre-join
      operation was considering CacheConfig as resolved: it
      was assuming that key/value types, user customizations and
      πŸ”§ other cache configurations have been loaded. This was an issue
      when the cache is not touched yet. [#16917]
    • πŸ›  Fixed an issue where Management Center was not working as expected
      πŸ”§ when the cluster is set up using advanced network configuration. [#16910]
    • πŸ›  Fixed an issue where ServiceLoader was round-tripping between URL and URI,
      and consequently loses the associated URLStreamHandler when trying to load
      Hazelcast from a custom class loader. [#16846]
    • πŸ›  Fixed an issue where the class definitions, that are registered explicitly in
      πŸ”§ the serialization configuration and have the same class ID in different factories,
      were not handled properly. [#16831]
    • πŸ›  Fixed the NullPointerException in IndexCopyBehavior.NEVER mode. [#16784]
    • πŸ›  Fixed an issue where the client XML configuration could not
      properly handle the empty Near Cache name. [#16768]
    • πŸ›  Fixed an issue where the client permissions for Reliable Topic and Ringbuffer
      were missing. [#16755]
    • πŸ›  Fixed an issue where the type information was missing the Metrics MBeans. [#16747]
    • πŸ›  Fixed an issue where the REST API was always requiring the call URLs
      to end with a slash character. [#16688]
    • πŸ›  Fixed an issue where the service URL for Eureka could not be set
      πŸ”§ using the declarative configuration. [#16679]
    • πŸ›  Fixed an issue where the wait key of a blocking call within
      a Raft invocation was still being reported as a live operation,
      when the key times out. [#16614]
    • πŸ›  Fixed an issue where the upload of classes using the client
      πŸš€ user code deployment were not successful when they are retrieved not
      in their created order. [#16612]
    • πŸ›  Fixed an issue where the size() method was returning a negative
      value when map, cache and multimap contain more than Integer.MAX_VALUE entries. [#16594]
    • πŸ›  Fixed an invalidation issue when using a transactional map
      from a cache with a Near Cache: the cache invalidation event occurs
      when the transactionalMap.put method is called. As a result,
      the entry was getting invalidated before the change is committed to the map. [#16579]
    • πŸ›  Fixed an issue where InPredicate was not invoking value comparison when the
      read attribute is null. [#15100]
    • πŸ›  Fixed an issue where Map, Cache, MultiMap data structures
      were returning negative values (size()) when the size is more than
      Integer.MAX_VALUE. [#14935]
    • πŸ›  Fixed an issue when a Hazelcast client calls the distributed executor service
      πŸ‘» and the callable throws an exception with a custom type, then the exception
      was not being transported to the client. [#9753]

    Contributors

    We would like to thank the contributors from our open source
    πŸš€ community who worked on this release:


Previous changes from v4.1-BETA

  • πŸš€ This document lists the new features, enhancements, fixed issues and, removed or deprecated features for Hazelcast IMDG 4.1-BETA-1 release. The numbers in the square brackets refer to the issues in Hazelcast's GitHub repositories.

    πŸ†• New Features

    ✨ Enhancements

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

    • βž• Added support for the merge operation in IMap. [#17419]
    • βž• Added support for publishing CP Subsystem and CP data structure
      statistics via Metrics. [#17369]
    • βž• Added public classes to expose the member- and
      client-side caching provider implementations (in the JCache implementation)
      without referring to internal classes. [#17320]
    • πŸ‘Œ Improved the entry processing mechanism so that the read-only processors on backups
      are not executed anymore. [#17318]
    • πŸ‘Œ Improved CacheSimpleConfig so that it now accepts cache name in its constructors. [#17287]
    • βž• Added support for advanced persistent memory configuration. [#17282]
    • 🌲 Cleaned up the noisy initial log messages on Hazelcast startups. [#17243]
    • ⏱ Introduced auto-disposable tasks for the scheduled executor service. [#17215]
    • βž• Added support for configurable priority queues. [#17201]
    • Parallelized the partition replica migrations so that
      the time needed for rebalancing the partitions after adding
      or removing a member to/from a cluster is reduced. [#17197]
    • βž• Added support for basic SQL expressions. [#17183]
    • βž• Added client labels to ClientEndpointImpl.toString()
      to simplify the client identification (in addition to client uuid)
      on the Hazelcast member side. [#17178]
    • βž• Added the statistics entry to phone home, that counts the caches having WAN replication
      πŸ”§ configured. [#17143]
    • βž• Added support for tenant control when creating caches. [#17122]
    • βž• Added support for accessing domain objects without domain classes (GenericRecord). [#17105]
    • βž• Added metric count support for sets, and maps having backup reads enabled,
      πŸ”§ query caches, map stores, custom attributes and WAN replication configurations.
      [#17053], [#17071], [#17069], [#17081]
    • βž• Added support for IMap.compute(). [#17030]
    • βž• Added support to allow submitting and executing operations while a member
      is shutting down to increase the availability of a cluster more that keeps
      large data. [#17028]
    • βž• Added ExtendedMapEntry in order to create a mechanism for setting TTLs in
      entry processors. [#16991]
    • βž• Added hazelcast-azure discovery plugin to the hazelcast-all module. [#16982]
    • Introduced the ConfigRecognition API that determines if a
      πŸ”§ provided declarative configuration is recognized by the rules defined in a given
      implementation. Along with the API the following three implementations are added:
      ** MemberConfigRecognizer for recognizing member XML and YAML configurations
      ** ClientConfigRecognizer for recognizing client XML and YAML configurations
      ** ClientFailoverConfigRecognizer for recognizing failover client XML and YAML configurations
      [#16958]
    • πŸ”Š Made the diagnostics logs more cloud-friendly so that they are sent to
      stdout instead of sending to local files. [#16941]
    • πŸ‘Œ Improved the mechanism of partition table updates to
      ⚑️ eliminate the latencies when these updates are sent to the clients by a member. [#16939]
    • πŸ‘Œ Improved the client configuration such that when the client
      πŸ”§ failover configuration is provided, the reconnect mode cannot
      be set as off; it now fails fast in this case. [#16886]
    • πŸ‘ Introduced the forEach() loop support for IMap. [#16877]
    • βž• Added the load() method to Config, ClientConfig and
      πŸ”§ ClientFailoverConfig classes. This method loads the configuration
      πŸ”§ with the known locations. If not found, the default configuration is returned. [#16864]
    • πŸ‘Œ Improved the deleteAll() (MapStore) and ITopic Javadocs. [#16862], [#16861],
    • Introduced the ServerConnection and ClientConnection interfaces
      that extend Connection for cleaning up purposes. [#16849]
    • Implemented the root operator for the SQL engine
      responsible for getting the final result stream. [#16829]
    • βž• Added support for IMap.computeIfAbsent(). [#16808]
    • Introduced SQL thread pools for query processing. [#16805]
    • Introduced the network protocol, base executor and row
      interfaces for the SQL engine. [#16799], [#16762]
    • βž• Added the setAll() and setAllAsync() methods for IMap. [#16787]
    • βž• Added the writeOrdered() method to the Connection class
      for the purpose of ordered delivery of messages. [#16776]
    • βž• Added the creation time metric for the executor service. [#16775]
    • πŸ‘Œ Improved an unclear exception message for credentials. [#16756]
    • ⚑️ Updated the related aspects of Hazelcast IMDG after the
      πŸ”„ changes done on the client protocol side to add the ability
      to add new parameters, methods, services, events and custom types
      to codecs. [#16718]
    • βž• Added the offset parameter that can be used while creating
      inputs in BufferObjectDataInput. [#16701]
    • Introduced the putAllAsync() method for MultiMap. [#16698]
    • Defined metrics for ISet and IList collections. [#16665]
    • ⬆️ Upgraded log4j2 version to 2.13.0. [#16654]
    • πŸ“‡ Renamed MultiMap proxy implementation to follow the established naming convention:
      ObjectMultiMapProxy -> MultiMapProxyImpl. [#16637]
    • πŸ‘Œ Improved the computeIfPresent() implementation so that now it keeps a
      πŸ‘― clone of the old/existing value and uses that for replace/delete operations. [#16636]
    • 🌲 Introduced the hazelcast.logging.details.enabled property
      🌲 to make the logging of cluster version, name and IP optional to
      ⬇ decrease the noise in the logs when, for example, you have a single-member cluster. [#16622]

    - ⬆️ Upgraded the Hazelcast Kubernetes plugin version to 2.0.1. [#16590]

    • Added the support for automatically detecting the classloader
      πŸš€ of a type for the user code deployment feature. [#16585]
      • Made IMap.putAllAsync() and IMap.submitToKeys() methods public API. [#16449]
      • Implemented the base type system for SQL: the base SQL data types
        have been defined and mapped to the corresponding Java types.
        Type information is used by executor stages to use the right strategy
        of expression evaluation. [#15241]
      • πŸ‘» Clarified the exception message when you connect to a cluster with an
        invalid group name. [#15099]
      • ♻️ Refactored the check and retry initialization logic of
        ReplicatedMapProxy so that they are performed in parallel for different
        partitions. [#14331]
      • βž• Added a test for the ClientConsoleApp class. [#12298]
      • πŸ‘Œ Improved the behavior of ConcurrentMap.computeIfPresent:
        combined single client-server round trips instead of two (for get and
        replace methods). [#11958]

    πŸ’₯ Breaking Changes

    • In a CP subsystem session, a generic IllegalStateException was being thrown when Hazelcast
      is shutdown. Now the same situation throws HazelcastInstanceNotActiveException. [#17120]
    • The TcpIpConnection class has been renamed as ServerConnection. [#16839]

    πŸ›  Fixes

    • πŸ›  Fixed an issue where the custom load balancers
      πŸ”§ could not be configured declaratively. [#17415]
    • πŸ›  Fixed the issue of dangling pointers in global indexes. [#17338]
    • πŸ›  Fixed a race issue when creating a cache (JCache) using
      multiple methods with the same cache name but having different keys.[#17286]
    • πŸ›  Fixed an issue where the repeated calls of executeOnKeys()
      in Hazelcast clients for NATIVE maps was causing a continuous
      increase in the used memory and exhaustion of the memory pool after a while. [#17276]
    • πŸ›  Fixed an issue where ReliableTopicMessageListener was firing a warning when the client is shutting down. [#17153]
    • πŸ›  Fixed an issue where the client was stuck with an outdated
      member list after a split-brain scenario. [#17147]
    • πŸ›  Fixed the broken interoperability between the CompletableFuture methods. [#17020]
    • πŸ›  Fixed an issue where touching a map entry having an entry processor working on it
      was modifying its time-to-live. [#16987]
    • πŸ›  Fixed an issue in the cache service where its pre-join
      operation was considering CacheConfig as resolved: it
      was assuming that key/value types, user customizations and
      πŸ”§ other cache configurations have been loaded. This was an issue
      when the cache is not touched yet. [#16917]
    • πŸ›  Fixed an issue where Management Center was not working as expected
      πŸ”§ when the cluster is set up using advanced network configuration. [#16910]
    • πŸ›  Fixed an issue where ServiceLoader was round-tripping between URL and URI,
      and consequently loses the associated URLStreamHandler when trying to load
      Hazelcast from a custom class loader. [#16846]
    • πŸ›  Fixed an issue where the class definitions, that are registered explicitly in
      πŸ”§ the serialization configuration and have the same class ID in different factories,
      were not handled properly. [#16831]
    • πŸ›  Fixed the NullPointerException in IndexCopyBehavior.NEVER mode. [#16784]
    • πŸ›  Fixed an issue where the client permissions for Reliable Topic and Ringbuffer
      we're missing. [#16755]
    • πŸ›  Fixed an issue where the type information was missing the Metrics MBeans. [#16747]
    • πŸ›  Fixed an issue where the RESP API was always requiring the call URLs
      to end with a slash character. [#16688]
    • πŸ›  Fixed an issue where the service URL for Eureka could not be set
      πŸ”§ using the declarative configuration. [#16679]
    • πŸ›  Fixed an issue where the wait key of a blocking call within
      a Raft invocation was still being reported as a live operation,
      when the key times out. [#16614]
    • πŸ›  Fixed an issue where the upload of classes using the client
      πŸš€ user code deployment were not successful when they are retrieved not
      in their created order. [#16612]
    • πŸ›  Fixed an issue where the size() method was returning a negative
      value when map, cache and multimap contain more than Integer.MAX_VALUE entries. [#16594]
    • πŸ›  Fixed an invalidation issue when using a transactional map
      from a cache with a Near Cache: the cache invalidation event occurs
      when the transactionalMap.put method is called. As a result,
      the entry was getting invalidated before the change is committed to the map. [#16579]
    • πŸ›  Fixed an issue where InPredicate was not invoking value comparison when the
      read attribute is null. [#15100]
    • πŸ›  Fixed an issue where Map, Cache, MultiMap data structures
      were returning negative values (size()) when the size is more than
      Integer.MAX_VALUE. [#14935]

    Contributors

    We would like to thank the contributors from our open source
    πŸš€ community who worked on this release:

    • Inel Pandzic
    • Omid Pourhadi
    • Ryan Lindeborg
    • Santhosh Kumar
    • Bartek Kowalczyk
    • Ashutosh Agrawal
    • ÁdΓ‘m Berkecz
    • HugeOrangeDev
    • Harry Tran
    • Stephen Russett
    • Ulf Adams
    • Abdul Aziz Ali
    • Dmitry Konstantinov
    • Anmol Chaddha
    • lprimak
    • keteracel
    • Burak Sezer
    • wangumer
    • Marcin L