Alexey Kukushkin created IGNITE-16272: -----------------------------------------
Summary: IgniteOutOfMemoryException is not a critical failure Key: IGNITE-16272 URL: https://issues.apache.org/jira/browse/IGNITE-16272 Project: Ignite Issue Type: Improvement Reporter: Alexey Kukushkin h3. The Problem Ignite raises the [IgniteOutOfMemoryException|https://github.com/apache/ignite/blob/2.11.1/modules/core/src/main/java/org/apache/ignite/internal/mem/IgniteOutOfMemoryException.java] if a data region size is exceeded when trying to add more data to a cache. Ignite considers the {{IgniteOutOfMemoryException}} as a critical failure. This causes shutting down the Ignite server with the default failure handler. However, reaching the data region capacity does not seem to be such a critical problem requiring the server shutdown or restart. For example, in our application we just want to report this problem back to the users and notify the DevOps without applying the critical failure handler. To achieve that, we had to define a custom {{FailureHandler}} that detects and ignores the {{IgniteOutOfMemoryException}} and all the exception caused by the {{{}IgniteOutOfMemoryException{}}}, allowing the final exception to reach the application. This solution is clumsy and unreliable since it uses the internal {{IgniteOutOfMemoryException}} definition and relies on a complex secondary exception structure trying to find the {{IgniteOutOfMemoryException}} among the suppressed exception and causes. Ignite out-of-the-box failure handlers have the {{ignoredFailure}} property that allows filtering out some kinds of failures. However, the {{IgniteOutOfMemoryException}} is not among the [FailureType|https://github.com/apache/ignite/blob/2.11.1/modules/core/src/main/java/org/apache/ignite/failure/FailureType.java] that can be ignored. h3. The Proposal # Does anyone really want to treat the "data region capacity exceeded" problem as a critical failure and stop or restart the server? ** Consider never treating this condition as a critical failure. This change is not backward compatible. ** Or add another item to the {{FailureType}} enumeration to optionally allow the users not to have that treated as a critical failure. This is backward-compatible. # Make the {{IgniteOutOfMemoryException}} a public API (now it is in the {{internal}} package) # Consider renaming {{IgniteOutOfMemoryException}} (for example, to something like {{{}NotEnoughStorageException{}}}) since the current name is similar to a really critical and usually unrecoverable Java's {{OutOfMemoryError}} although the {{IgniteOutOfMemoryException}} is not that critical. -- This message was sent by Atlassian Jira (v8.20.1#820001)