All Downloads are FREE. Search and download functionalities are using the official Maven repository.

.hazelcast.3.6.8.source-code.release_notes.txt Maven / Gradle / Ivy

There is a newer version: 5.4.0
Show newest version

In this Release Notes document, you will find the new features, enhancements and fixes of the Hazelcast 3.6.x releases.
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/.

1. New Features
This section provides the new features introduced with Hazelcast 3.6 release. 

-  High-Density Memory Store for Hazelcast Map: With this release, Hazelcast Map data structure is now equipped with the High-Density Memory Store, previously implemented for Hazelcast JCache.

-  Hot Restart Store: This new feature provides fast restarting of the Hazelcast clusters. This is achieved by storing the state of the cluster members to the disk.

-  Discovery Service Provider Interface (Discovery SPI): You can use this SPI to discover  Hazelcast instances on cloud environments provided by jclouds, Kubernetes and many more. The existing discovery mechanisms that Hazelcast provides (Multicast, TCP/IP and Amazon EC2) have been re-implemented on top of this new Discovery SPI.

-  Client Protocol: This feature presents the Hazelcast's new open binary client protocol.

-  Client Cross Version Compatibility: Now you can upgrade your Hazelcast clients independently from servers and other clients. 

-  Support for cloud providers through jclouds: Hazelcast now supports deployments on all the well-known cloud providers through the jclouds open source library.

-  Ringbuffer and Reliable Topic in Hazelcast Clients: The data structures Ringbuffer and Reliable Topic recently introduced by Hazelcast (with the release 3.5) are now implemented for Hazelcast Clients.

-  Cluster Quorum for Hazelcast JCache: Cluster Quorum checks are now provided for Hazelcast JCache implementations, too.

-  Split Brain Syndrome handler for Hazelcast JCache: Now Split Brain Syndrome is handled in JCache as it is taken care in Hazelcast Map. 

-  Partition Lost Listener for Hazelcast JCache: You can listen to partition lost events fired in your Hazelcast JCache implementation.

-  Hazelcast Docker image: Now you can run Hazelcast using our image in the Docker platform.

-  Lite Members: With the introduction of Hazelcast Lite Members, you are able to specify certain members in your cluster so that they do not store data. You can use these lite members mostly for your task executions and listener registrations.

- Querying in collections and arrays: Hazelcast is now able to query and index attributes of objects stored in a collection or array.

- Custom attributes extraction: It is now possible to extract a value of an object's attribute using a custom extractor class.

-  Acquiring locks with a lease time: Now, you can try to acquire locks with a lease time. 

-  Monitoring the WAN replication: You can now monitor the state of your WAN replications using the Hazelcast Management Center.



2. Enhancements

This section lists the enhancements performed for Hazelcast 3.6.x releases.

- Replicated Map improvements: The implementation of Hazelcast replicated maps has been revisited.
- Management Center improvements: Alerting mechanism added.
- Paging Predicate improvements: With the performed improvements, now random page accessing is supported.
- Rule based query optimizations: This improvement introduces a query optimizer based on static rewriting rules. The optimizer treats predicates as immutable and returns a modified copy when the optimized one is found.
- WAN replication improvements: With the improvements performed on Hazelcast's WAN replication feature, you can now monitor WAN replication events for each data structure and WAN replication now supports different acknowledge types for each target cluster group.
- Improvements on Hazelcast's OSGI support: With this improvement, Hazelcast bundles provide OSGI services so that the users can manage (create, access, shutdown) the Hazelcast instances through this service on OSGI environments. Having the `hazelcast.osgi.start` property enabled, when an Hazelcast OSGI service is activated, a default Hazelcast instance is created automatically. These instances can be served as an OSGI service to be accessed by other bundles. Registering the created Hazelcast instances behavior is enabled by default and can be disabled using the `hazelcast.osgi.register.disabled` property. Each Hazelcast bundle provides a different OSGI service and their instances can be grouped (clustered) together to prevent possible compatibility issues between different Hazelcast versions/bundles. This grouping behavior is enabled by default and can be disabled using the `hazelcast.osgi.grouping.disabled` property. Hazelcast OSGI service's lifecycle (and also the owned/created instances' lifecycles) are the same as the owner Hazelcast bundles. When the bundle is stopped (deactivated), owned service and Hazelcast instances are also deactivated/shutdown and deregistered automatically. Then, when the bundle is re-activated, its service is registered again. In addition, the Hazelcast Enterprise JAR file is also an OSGI bundle like the Hazelcast OSS JAR file.


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

- Approximate `max-size` calculation should be removed for IMap eviction. [6463]
- `SpringAwareWebFilter` should have a constructor which takes properties as arguments. [6438]
- Client side and server side cache proxies handle `putAll` operation one by one. This is not efficient. Records for this operation should be grouped as per their partitions and should be sent and processed in batches. [6367]
- Not requested events should not be sent to `MapListener` [6349]
- Inconsistent and potentially buggy design in `BasicCompletableFuture`. [6080]
- Starting with "hazelcast-wm 3.3", OSGI Manifest Spring package imports should be optional. [6072]
 - The new client determines the partition ID for every invocation for data structures like queue and list where the partition ID is static. There is no need for this behavior. It should calculate the partition ID for once  when the proxy is created and continue to re-use it. [5848]
- `Map.Entry` supplied to Entry Processor is not Serializable any more. [5611]
- The configuration file `minimal-json` with the provided scope is not picked up by the *shade* plugin. [5543]
- In Spring configuration, when a boolean property is injected for *hazelcast* bean (`` and the queue `secure.orders` is created at the client, Hazelcast throws `AccessControlException`. [7616]
- The FREE_HEAP_PERCENTAGE eviction policy does not work as documented because the `EvictionChecker` is incorrectly calculating available memory percentage in `checkFreeHeapPercentageEviction`. [7599]
- `DiscoveryStrategy`'s `destroy()` method is not called on shutdown. [7545]
- The method `MapStore.storeAll()` is never called when the objects are updated with a delay. [7464]
- WebFilter(3.6-RC1): Session attributes are lost or overwritten with old values when using `deferred-write` by reading them.[7291]
- The method `HazelcastHttpSession.getAttributeNames()` returns entries that were only read but not written. [7033]
- Hazelcast 3.5.3 conflicts with FUSE 6.1. When Hazelcast is integrated into a system with JBoss Fuse 6.1, there appeared some warnings in the logs. [6821]
- An exception is thrown on the server when attempting to deserialize `HIBERNATE4_TYPE_HIBERNATE_CACHE_ENTRY` value. [6683]
- The test `IOBalancerMemoryLeakTest.testMemoryLeak` fails due to a socket exception that reads as "unexpected end of file from server". [6496]


The following are the enhancements performed for 3.6.2 release.

- Hazelcast Docker images are big in size; it would be better to clean them up and reduce their sizes. [7553]
- It would be better to provide an `enterprise-javadoc.jar` in the Hazelcast Enterprise bundle. This way IDEs can auto-import the Javadocs for the Enterprise APIs and provide context sensitive completion/help within the IDE. [7245]
- Management Center WAN Replication metrics take a long time to stabilize. The responsiveness of the Outbound records/sec. metric should be improved. It currently seems to under-report WAN replication performance for 10s of seconds before reaching the same figure as the client side reported metrics.[7244]

*3.6.1 Fixes*

This section lists the fixed issues for 3.6.1 release.

- Hazelcast 3.6 fails to create `ObjectName` for an instance created with JCache API. [7548]
- The test `com.hazelcast.client.spi.impl.ClientInvocationTest.executionCallback_FailOnShutdown` fails. [7462]
- There are failures in `SystemClockChangeTest`. [7444]
- When you use EntryProcessor with a map interceptor, it does not get the correct value. [7414]
- Backup records also increase the owned cache entry count but they should be ignored. Cache statistics show incorrect entry count via the method `getOwnedEntryCount`. [7403]
- When getting values from `PredicateSupplier`, the method `DistinctValueAggregation.DistinctValueMapper.map()` throws a `ClassCastException`. [7398]
- Timeout is not enough for the test `TransferStressTest.testLargePackets`. [7393]
- There are failures in the test `ClientExceptionFactoryTest.testException`. [7360]
- The method `getReplicationImplObject` in `WanTargetClusterConfig` is not used. [7353]
- Entry processor and map put/remove tests in WAN replication module fail.  [7352]
- Hazelcast namespace for Spring configuration does not support Discovery SPI. [6913]
- When Hazelcast Spring configuration is used for the client and if a serialization configuration is present in the Spring client, then the client hangs forever during the authentication method. [5815]

*3.6 Fixes*

This section lists the fixed issues for 3.6 release.

- In the manifest file, `org.jclouds.*` should be marked as optional dependencies. [7318]
- Tests are needed for `WanReplicationPublisherDelegate`, `WanReplicationEvent`, `MapReplicationUpdate` and `AbstractMultipleEntryBackupOperation` in the Open Source WAN API. [7315]
- Invocation of quorum listener requires at least an attempt to perform a map operation. But it should not require this; just the crash of nodes should be enough to use the quorum mechanism. [7300]
- Owned entry count to be used as the expected near cache hit count should be calculated by checking the partition ownership in the `NearCacheTest::testGetAll`. [7285]
- The parameter `minEvictionCheckMillis` controls the maximum frequency of evictions. It is 100ms by default. It means at most 1 eviction is executed in a 100ms interval. No other `put()` operation within this interval triggers an eviction. So, if the put rate is greater than 1 per 100ms, then the number of entries is growing regardless of the `max-size-policy`. This eventually triggers a forced eviction which will prevent `OutOfMemoryException`. Forced evictions are only hiding this issue. Another possible solution is to keep the default interval as it is and apply batching: When X eviction cycles are skipped due the `minEvictionCheckMillis` parameter, then during the next cycle X + 1 entries should be evicted instead of just 1. [7268]
- Descriptions of some maximum size policies defined in the `com.hazelcast.config.EvictionConfig.MaxSizePolicy` and `com.hazelcast.config.MaxSizeConfig.MaxSizePolicy` are not clear and confusing. They shoule be clarified. [7267]
- Tests under `TopicOverloadDistributedTest` are spuriously failing even on the local machine.
They need to be reviewed. [7266]


*3.6-RC1 Fixes*

This section lists issues solved for Hazelcast 3.6-RC1 release.

- Javadoc for `IMap.putAll()` does not mention the lack of atomicity in the invocation. [7256]
- When a WAN Queue overrun occurs (with exception enabled), the source cluster logs an excessive amount of noise. This should to be logged. [7242]
- On WAN Replication Queue overrun, a WANReplicationQueueFullException is expected, but instead, the client receives an UndefinedErrorCodeException.[7241]
- When using Hazelcast as a JCache provider: As JSR-107 Javadoc states, an update should not reset expiry time for CreatedExpiryPolicy. However, when a cache entry is updated, it does not expire. [7236]
- Default WAN acknowledge type should be ACK_ON_RECEIPT. [7160]
- NullPointerException is thrown in ClientRegressionWithMockNetworkTest. [7148]
- Changing clusters in the Management Center does not update/refresh the cluster members in the Scripting tab. [7119]
- A fix is needed for operation retries in PartitionCheckIfLoadedOperation. [7114]
- WAN Queue counts in the Management Center for Hazelcast 3.6-EA3 are not correct. [7100]
- Hazelcast 3.6 Reference Manual is not correct for its Enterprise WAN Replication content. [7099]


*3.6-EA3 Fixes*

This section lists issues solved for Hazelcast 3.6-EA3 (Early Access 3) release.

- `NullPointerException` is thrown for the thread `cached4` in a test which uses `MapLoader`. [7098]
- The method `loadInternal` of `MapProxySupport` requires `dataKeys`. Hence, a serialization step should be added to `MapProxy.loadAll()`. [7090]
- Near cache heap cost calculation is not proper when the cache gets concurrent misses. [7057]
- `IQueue` accepts null values from the Hazelcast Java client. [7048]
- `WriteBehindMapStore` for a map that has `OBJECT` as the in-memory format causes the entry processors to serialize the objects. [7040]
- Latest code does not include the file `com.hazelcast.client.impl.protocol.codec.CacheContainsKeyCodec` and build fails.  [7019]
- Two members of a cluster become masters and ignore each other. [7016]
- `AbstractCacheRecordStore` should update the field `isOwner` while it is being cleared after migration. [6983]
- There are memory leaks in the local map statistics and near cache invalidation queues. The map containers also leak memory caused either by the near cache invalidation mechanism (when re-creating objects to check whether the near cache is enabled) or `MapPartitionDestroyOperation` (when re-creating objects and trying to the backup count). [6972]
- When the `lite-member` flag is used within the Spring context, its `enabled` attribute does not work properly. [6945]
- `LoadAllTask` for the client and server side cache proxies should also handle the `Throwable`, not just the `Exception`. [6944]
- The `enable` attribute of the `partition-group` element in the `Hazelcast-Spring.xsd` scheme should have the type `string`, not `boolean`. [6927]
- There is a left-over method in the Discovery SPI configuration, namely `addDiscoveryProviderConfig`. [6911]
- `InMemoryFormat.OBJECT` does not work with the `max-size` policies `USED_HEAP_SIZE` and `USED_HEAP_PERCENTAGE`. [6875]
- `PublicAddressTest` has been ignored due to the running time. [6858]
- `NullPointerException` is thrown in `ClientExecutionPoolSizeLowTest`. [6853]

*3.6-EA2 Fixes*

This section lists issues solved for Hazelcast 3.6-EA2 (Early Access 2) release.

- MapLoader may insert null values into IMap causing memory leak.[6830]
- When replicated map entries are migrated to a new destination; TTL eviction should be scheduled, eviction should be retried when a failure caused by the migration happens and the sync interval should be increased. [6799]
- There is a logical error in the method `Ringbuffer.readManyAsync()` when `minSize = 0`. In this case, the Ringbuffer is not read and nothing is returned. [6787]
- When a listener's registration is made from the listener configuration, an error occurs during the listener initialization. [6784]
- Remaining cache invalidation messages should be flushed on the `ICacheService` while the member is in the  `SHUTTING_DOWN` state. [6778]
- When a client cannot send a request to one of the connections, `TargetNotMemberException` is thrown. This name is confusing the Hazelcast users. [6766]
- `ClassCastException` is thrown when using `Timestamp` within `DataSerializable`. [6759]
- The method `destroyDistributedObject()` of `ReplicatedMapService` iterates over partition containers and record stores and destroys them. While destroying, record store calls `destroyDistributedObject()` which leads to an infinite loop. [6754]
- Hazelcast does not inject its instance into `HazelcastInstanceAware` registered via classname. [6697]
- There is a sporadic startup failure in 3.6-EA. [6684]
- There is no need to use `CacheLoader` inside the client/server side cache proxies. [6676]
- Fixed wrong calculation of eviction removal size when `PER_NODE` `max-size` policy is used. [6675]
- If the cluster state is not active `RepartitioningTask` should not be triggered. Otherwise, it causes infinite retries and prevents the member from shutdown. [6663]
- There are broken XML configuration tests in the Hazelcast client package. [6633]
- There is a memory leak since the method `publishBathcedEvents` does not remove the events from `batchEvent`. [6618]
- Custom credentials class is not de-serialized on the server side. [6615]
- Lite member element should be added to the Hazelcast Spring configuration. [6605]
- `EntryListener` shows the unprocessed value in combination with `PostProcessingMapStore`. [6588]
- Clients cannot submit `HazelcastInstanceAware` callables. [6570]

*3.6-EA Fixes*

This section lists issues solved for Hazelcast 3.6-EA (Early Access) release.

- The method `map.size()` waits indefinitely after the shutdown of a node. [6538]
- `HazelcastCachingProvider` does not use the specified instance (by the object) when `instance-name` is not specified. [6454]
- `onExecutionFailure` should be called before returning from `run`, if backup is not valid. [6420]
- `OperationThread.priorityPendingCount()` should return `scheduleQueue.prioritySize()` instead of `scheduleQueue.normalSize()`. [6318]
- There is a growth in heap usage caused by a memory leak in the following scenario: A node in the cluster regularly creates maps and puts entries into it, again in regular intervals. Another node removes the entries minutes after they were put, and if the map is empty, it destroys the map. [6317]
- Currently, there is an `EntryEvictedListener` that is notified both for expiration and eviction events. There should be a separate listener for expired entries: eviction happens due to size constraints, and expiry is once the entry has expired. [6311]
- `InvocationFuture`s async calls do not detect the lost operations. [6250]
-  When the method `setBooleanAttribute` of the class `Member` is run, Null Pointer Exception is occurred on `STDOUT`. The problem is in the method `sendMemberAttributeEvent` of the class `ClusterServiceImpl`. [6223]
- `IOBalancer` keeps references of all the socket reader/writers but when destroying the connection, they release the references for only the ones which has endpoints. This causes a memory leak. [6199]
- `ILIKE` and `Regex` examples should be added to the Reference Manual under the "Supported SQL Syntax" section. [6190]
- `GroupProperty` defaulting does not work properly when programmatic configuration is used. [6174]
- When integrating Hazelcast in Spring Boot: if `HazelcastInstance` is created using the default `newHazelcastInstance` static method, then an `HazelcastInstance` whose `Config` has a valid `configurationUrl` property is created. However, `XmlBuilder` does not set this URL in the configuration it parses. [6061]
- Hazelcast's latest snapshot run fails due to the introduction of `ClientExceptionFactory` which has been developed for exception processing and working well in that sense. [6010]
- The class `HazelcastXATest` has only fast and slow modes (nothing in between) and possibly due to this, sometimes a transaction is waiting for a timeout. Either the transaction recovery or the test class itself is racy. [5923]
- A memory leak occurs when a listener is added and removed from client. A "remove" runnable in the collection that is stored in `ClientEndpointImpl` is the leftover. This runnable collection is used to cleanup the
listeners when client is disconnected, it should be removed too after the listener is removed. [5893] 
- The class `CacheRemoveAllOperation` does not send the "completed" event in some cases, e.g. if `CacheRecordStore` for that partition is not created yet or if the filtered keys are empty. [5865]
- In the class `MapProxyImpl`, the methods `executeOnKey` and `submitToKey` create an `EntryOperation` with the thread ID set. This does not happen with the class `ClientMapProxy`. Therefore, the class `MapExecuteOnKeyRequest` should take a thread ID and set this on the generated `EntryOperation`. [5857]
- The method `IndexImpl.getRecords()` fails with Null Pointer Exception due to the inconsistency between the `not(...equals())` and `notEquals()`. [5807]
- The method `HazelcastHttpSession.getAttribute()` for WebFilter does not work when `deferredWrite` is set to `true`. [5798]
- When `hazelcast.nio.faststring` is enabled, `UTFEncoderDecoder` tries to create a `FastStringCreator`. However, if the reflection is not available due to the security manager, `buildFastStringCreator` returns null and consequently `StringCreator` becomes null. [5777]
- `hazelcast-jca-rar/pom.xml` references to `src/main/rar/ra.xml` which does not exist. [5760]
- The Maven profile `mvn clean compile -Pqa` does not exist but it is documented in the README of Hazelcast. [5746]
- `PerformanceLogFile` only compiles if JDK 1.7 or above is used. [5729]
- Currently, for every deserialization a `BufferObjectDataInput` is created. This generates waste since it is created with an array of data for every deserialization. The `BufferObjectDataOutput` is already cached; the input should use a similar approach. [5562]
- When any entities are defined as read only in the Hibernate L2 cache, an invalidation of the cache (such as caused by executing a native SQLQuery) leads to the error `UnsupportedOperationException`. [5562]
- The performance impacts of TWO_PHASE and LOCAL transaction types should be documented. [5075]
- Client requests are very inefficient when determining the partition ID. [4940]
- The method `keySet()` relies on `QueryOperation`. The `QueryOperation` does not accept `IterationType` - it always returns both keys and values. This can lead to unnecessary load and potentially even an OOM exception. [4642]
- Hazelcast is stuck in TIMED_WAITING when used as 2nd level cache for Hibernate. [4406]
- Management Center license loading problem when REST API is used. [189]
- Executor monitoring in Management Center does not show the "cancelled" operations" [177]
- When an alert for a data structure (map, queue, etc.) with its specific name is created, a `NullPointerException` is thrown after the cluster is reset. [175]
- Default directory name is hardcoded as "mancenter3.5" and it needs to be maintained for every major release. This process should be dynamic. [174]
- Throughput statistics for Map shows nothing when the `putAll()` method is used. [159]









© 2015 - 2024 Weber Informatics LLC | Privacy Policy