@@ -139,6 +139,8 @@ public class UNICAST3 extends Protocol implements AgeOutCache.Handler<Address> {
139
139
/** Keep track of when a SEND_FIRST_SEQNO message was sent to a given sender */
140
140
protected ExpiryCache <Address > last_sync_sent =null ;
141
141
142
+ // Queues messages until a {@link ReceiverEntry} has been created. Queued messages are then removed from
143
+ // the cache and added to the ReceiverEntry
142
144
protected final MessageCache msg_cache =new MessageCache ();
143
145
144
146
protected static final Message DUMMY_OOB_MSG =new Message ().setFlag (Message .Flag .OOB );
@@ -485,7 +487,7 @@ public void up(MessageBatch batch) {
485
487
if (hdr .first )
486
488
entry =getReceiverEntry (sender , hdr .seqno (), hdr .first , hdr .connId ());
487
489
else if (entry == null ) {
488
- msg_cache .cache (sender , msg );
490
+ msg_cache .add (sender , msg );
489
491
log .trace ("%s: cached %s#%d" , local_addr , sender , hdr .seqno ());
490
492
}
491
493
}
@@ -495,7 +497,7 @@ else if(entry == null) {
495
497
sendRequestForFirstSeqno (sender );
496
498
else {
497
499
if (!msg_cache .isEmpty ()) { // quick and dirty check
498
- List <Message > queued_msgs =msg_cache .drain (sender );
500
+ Collection <Message > queued_msgs =msg_cache .drain (sender );
499
501
if (queued_msgs != null )
500
502
addQueuedMessages (sender , entry , queued_msgs );
501
503
}
@@ -745,12 +747,12 @@ public void expired(Address key) {
745
747
protected void handleDataReceived (final Address sender , long seqno , short conn_id , boolean first , final Message msg ) {
746
748
ReceiverEntry entry =getReceiverEntry (sender , seqno , first , conn_id );
747
749
if (entry == null ) {
748
- msg_cache .cache (sender , msg );
750
+ msg_cache .add (sender , msg );
749
751
log .trace ("%s: cached %s#%d" , local_addr , sender , seqno );
750
752
return ;
751
753
}
752
754
if (!msg_cache .isEmpty ()) { // quick and dirty check
753
- List <Message > queued_msgs =msg_cache .drain (sender );
755
+ Collection <Message > queued_msgs =msg_cache .drain (sender );
754
756
if (queued_msgs != null )
755
757
addQueuedMessages (sender , entry , queued_msgs );
756
758
}
@@ -781,7 +783,7 @@ protected void addMessage(ReceiverEntry entry, Address sender, long seqno, Messa
781
783
}
782
784
}
783
785
784
- protected void addQueuedMessages (final Address sender , final ReceiverEntry entry , List <Message > queued_msgs ) {
786
+ protected void addQueuedMessages (final Address sender , final ReceiverEntry entry , Collection <Message > queued_msgs ) {
785
787
for (Message msg : queued_msgs ) {
786
788
UnicastHeader3 hdr =msg .getHeader (this .id );
787
789
if (hdr .conn_id != entry .conn_id ) {
@@ -1444,47 +1446,4 @@ public String toString() {
1444
1446
}
1445
1447
}
1446
1448
1447
- /**
1448
- * Used to queue messages until a {@link ReceiverEntry} has been created. Queued messages are then removed from
1449
- * the cache and added to the ReceiverEntry
1450
- */
1451
- protected class MessageCache {
1452
- private final Map <Address ,List <Message >> map =new ConcurrentHashMap <>();
1453
- private volatile boolean is_empty =true ;
1454
-
1455
- protected MessageCache cache (Address sender , Message msg ) {
1456
- List <Message > list =map .computeIfAbsent (sender , addr -> new ArrayList <>());
1457
- list .add (msg );
1458
- is_empty =false ;
1459
- return this ;
1460
- }
1461
-
1462
- protected List <Message > drain (Address sender ) {
1463
- List <Message > list =map .remove (sender );
1464
- if (map .isEmpty ())
1465
- is_empty =true ;
1466
- return list ;
1467
- }
1468
-
1469
- protected MessageCache clear () {
1470
- map .clear ();
1471
- is_empty =true ;
1472
- return this ;
1473
- }
1474
-
1475
- /** Returns a count of all messages */
1476
- protected int size () {
1477
- return map .values ().stream ().mapToInt (Collection ::size ).sum ();
1478
- }
1479
-
1480
- protected boolean isEmpty () {
1481
- return is_empty ;
1482
- }
1483
-
1484
- public String toString () {
1485
- return String .format ("%d message(s)" , size ());
1486
- }
1487
- }
1488
-
1489
-
1490
1449
}
0 commit comments