Skip to content

Commit 310f950

Browse files
garyrussellartembilan
authored andcommitted
GH-1258: Change OOMHandler to JavaLangErrorHandler
Resolves #1258 Call the handler for all `Error`s on container threads. **I will do the cherry-pick; there will be conflicts**
1 parent 14dee1f commit 310f950

File tree

5 files changed

+24
-26
lines changed

5 files changed

+24
-26
lines changed

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/AbstractMessageListenerContainer.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ public abstract class AbstractMessageListenerContainer extends RabbitAccessor
248248

249249
private long consumeDelay;
250250

251-
private OOMHandler oOMHandler = error -> System.exit(EXIT_99);
251+
private JavaLangErrorHandler javaLangErrorHandler = error -> System.exit(EXIT_99);
252252

253253
private volatile boolean lazyLoad;
254254

@@ -1149,19 +1149,19 @@ public void setConsumeDelay(long consumeDelay) {
11491149
this.consumeDelay = consumeDelay;
11501150
}
11511151

1152-
protected OOMHandler getOOMHandler() {
1153-
return this.oOMHandler;
1152+
protected JavaLangErrorHandler getJavaLangErrorHandler() {
1153+
return this.javaLangErrorHandler;
11541154
}
11551155

11561156
/**
11571157
* Provide an OOMHandler implementation; by default, {@code System.exit(99)} is
11581158
* called.
1159-
* @param oOMHandler the handler.
1159+
* @param javaLangErrorHandler the handler.
11601160
* @since 2.2.12
11611161
*/
1162-
public void setOOMHandler(OOMHandler oOMHandler) {
1163-
Assert.notNull(oOMHandler, "'oOMHandler' cannot be null");
1164-
this.oOMHandler = oOMHandler;
1162+
public void setjavaLangErrorHandler(JavaLangErrorHandler javaLangErrorHandler) {
1163+
Assert.notNull(javaLangErrorHandler, "'javaLangErrorHandler' cannot be null");
1164+
this.javaLangErrorHandler = javaLangErrorHandler;
11651165
}
11661166

11671167
/**
@@ -1992,18 +1992,18 @@ private interface ContainerDelegate {
19921992
}
19931993

19941994
/**
1995-
* A handler for {@link OutOfMemoryError} on the container thread(s).
1995+
* A handler for {@link Error} on the container thread(s).
19961996
* @since 2.2.12
19971997
*
19981998
*/
19991999
@FunctionalInterface
2000-
public interface OOMHandler {
2000+
public interface JavaLangErrorHandler {
20012001

20022002
/**
20032003
* Handle the error; typically, the JVM will be terminated.
20042004
* @param error the error.
20052005
*/
2006-
void handle(OutOfMemoryError error);
2006+
void handle(Error error);
20072007

20082008
}
20092009

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/DirectMessageListenerContainer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,8 +1093,8 @@ private void callExecuteListener(Object data, long deliveryTag) { // NOSONAR (co
10931093
}
10941094
}
10951095
}
1096-
catch (OutOfMemoryError e) { // NOSONAR
1097-
getOOMHandler().handle(e);
1096+
catch (Error e) { // NOSONAR
1097+
getJavaLangErrorHandler().handle(e);
10981098
throw e;
10991099
}
11001100
}

spring-rabbit/src/main/java/org/springframework/amqp/rabbit/listener/SimpleMessageListenerContainer.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,12 +1255,9 @@ public void run() { // NOSONAR - line count
12551255
}
12561256
}
12571257
catch (Error e) { //NOSONAR
1258-
// ok to catch Error - we're aborting so will stop
12591258
logger.error("Consumer thread error, thread abort.", e);
1260-
if (e instanceof OutOfMemoryError) { // NOSONAR
1261-
getOOMHandler().handle((OutOfMemoryError) e);
1262-
}
12631259
publishConsumerFailedEvent("Consumer threw an Error", true, e);
1260+
getJavaLangErrorHandler().handle(e);
12641261
aborted = true;
12651262
}
12661263
catch (Throwable t) { //NOSONAR

src/reference/asciidoc/amqp.adoc

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5685,6 +5685,15 @@ a|image::images/tickmark.png[]
56855685
a|image::images/tickmark.png[]
56865686
a|image::images/tickmark.png[]
56875687

5688+
|javaLangErrorHandler
5689+
(N/A)
5690+
5691+
|An `AbstractMessageListenerContainer.JavaLangErrorHandler` implementation that is called when a container thread catches an `Error`.
5692+
The default implementation calls `System.exit(99)`; to revert to the previous behavior (do nothing), add a no-op handler.
5693+
5694+
a|image::images/tickmark.png[]
5695+
a|image::images/tickmark.png[]
5696+
56885697
|maxConcurrentConsumers
56895698
(max-concurrency)
56905699

@@ -5789,15 +5798,6 @@ a|image::images/tickmark.png[]
57895798
a|image::images/tickmark.png[]
57905799
a|image::images/tickmark.png[]
57915800

5792-
|oOMHandler
5793-
(N/A)
5794-
5795-
|An `AbstractMessageListenerContainer.OOMHandler` implementation that is called when a container thread catches an `OutOfMemoryException`.
5796-
The default implementation calls `System.exit(99)`.
5797-
5798-
a|image::images/tickmark.png[]
5799-
a|image::images/tickmark.png[]
5800-
58015801
|phase
58025802
(phase)
58035803

src/reference/asciidoc/whats-new.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ See <<template-confirms>> for more information.
3838

3939
A new listener container property `consumeDelay` is now available; it is helpful when using the https://github.com/rabbitmq/rabbitmq-sharding[RabbitMQ Sharding Plugin].
4040

41-
The default `OOMHandler` (out of memory handler) now calls `System.exit(99)`.
41+
The default `JavaLangErrorHandler` now calls `System.exit(99)`.
42+
To revert to the previous behavior (do nothing), add a no-op handler.
4243

4344
See <<containerAttributes>> for more information.
4445

0 commit comments

Comments
 (0)