@@ -975,18 +975,23 @@ protected void removeAndDeliver(Table<Message> win, Address sender, AsciiString
975975 AtomicInteger adders =win .getAdders ();
976976 if (adders .getAndIncrement () != 0 )
977977 return ;
978-
979- AsciiString cl =cluster != null ? cluster : getTransport ().getClusterNameAscii ();
980- int cap =Math .max (Math .max (Math .max (win .size (), max_batch_size ), min_size ), DEFAULT_INITIAL_CAPACITY );
981978 MessageBatch b =null ;
982- if (reuse_message_batches ) {
983- b =cached_batches .get (sender );
984- if (b == null )
985- b =cached_batches .computeIfAbsent (sender , __ -> new MessageBatch (cap ).dest (local_addr )
986- .sender (sender ).cluster (cl ).incr (DEFAULT_INCREMENT ));
979+ try {
980+ AsciiString cl =cluster != null ? cluster : getTransport ().getClusterNameAscii ();
981+ int cap =Math .max (Math .max (Math .max (win .size (), max_batch_size ), min_size ), DEFAULT_INITIAL_CAPACITY );
982+ if (reuse_message_batches ) {
983+ b =cached_batches .get (sender );
984+ if (b == null )
985+ b =cached_batches .computeIfAbsent (sender , __ -> new MessageBatch (cap ).dest (local_addr )
986+ .sender (sender ).cluster (cl ).incr (DEFAULT_INCREMENT ));
987+ }
988+ else
989+ b =new MessageBatch (cap ).dest (local_addr ).sender (sender ).cluster (cl ).incr (DEFAULT_INCREMENT );
990+ }
991+ catch (Throwable t ) {
992+ adders .set (0 ); // so others can remove/deliver msgs (https://redhat.atlassian.net/browse/JGRP-3034)
993+ throw t ;
987994 }
988- else
989- b =new MessageBatch (cap ).dest (local_addr ).sender (sender ).cluster (cl ).incr (DEFAULT_INCREMENT );
990995 MessageBatch batch =b ;
991996 Supplier <MessageBatch > batch_creator =() -> batch ;
992997 MessageBatch mb =null ;
@@ -997,7 +1002,8 @@ protected void removeAndDeliver(Table<Message> win, Address sender, AsciiString
9971002 batch_creator , BATCH_ACCUMULATOR );
9981003 }
9991004 catch (Throwable t ) {
1000- log .error ("%s: failed removing messages from table for %s: %s" , local_addr , sender , t );
1005+ // will not throw an exception
1006+ log .failSafeError ("%s: failed removing messages from table for %s: %s" , local_addr , sender , t );
10011007 }
10021008 if (!batch .isEmpty ()) {
10031009 // batch is guaranteed to NOT contain any OOB messages as the drop_oob_msgs_filter above removed them
@@ -1172,7 +1178,7 @@ protected void deliverMessage(final Message msg, final Address sender, final lon
11721178 up_prot .up (msg );
11731179 }
11741180 catch (Throwable t ) {
1175- log .warn (Util .getMessage ("FailedToDeliverMsg" ), local_addr , msg .isFlagSet (OOB ) ?
1181+ log .failSafeWarn (Util .getMessage ("FailedToDeliverMsg" ), local_addr , msg .isFlagSet (OOB ) ?
11761182 "OOB message" : "message" , msg , t );
11771183 }
11781184 }
@@ -1197,7 +1203,7 @@ protected void deliverBatch(MessageBatch batch) {
11971203 avg_delivery_batch_size .add (batch .size ());
11981204 }
11991205 catch (Throwable t ) {
1200- log .warn (Util .getMessage ("FailedToDeliverMsg" ), local_addr , "batch" , batch , t );
1206+ log .failSafeWarn (Util .getMessage ("FailedToDeliverMsg" ), local_addr , "batch" , batch , t );
12011207 }
12021208 }
12031209
0 commit comments