Skip to content

Commit 6a29b4a

Browse files
authored
BlockingFlush: Deregister parties upon message completion (#471)
As alluded to in #261, parties registered when messages are enqueued must be deregistered when those messages complete, otherwise the Phaser's number of parties increases without end. As such there are certain cases where `BlockingFlush#block` will hang indefinitely, even once all messages have completed. Example: ``` 00: Phaser initialized; phase=0, parties=1, arrived=0 01: Enqueue Message 1; phase=0, parties=2, arrived=0 02: Enqueue Message 2; phase=0, parties=3, arrived=0 03: arriveAndAwaitAdvance; phase=0, parties=3, arrived=1 04: Complete Message 1; phase=0, parties=3, arrived=2 05: Complete Message 2; phase=0, parties=3, arrived=3 (advance) 06: Enqueue Message 4; phase=1, parties=4, arrived=0 07: Enqueue Message 5; phase=1, parties=5, arrived=0 08: arriveAndAwaitAdvance; phase=1, parties=5, arrived=1 09: Complete Message 4; phase=1, parties=5, arrived=2 10: Complete Message 5; phase=1, parties=5, arrived=3 (no advance) ``` if no more messages are enqueued, `08` will block forever Deregistering parties when messages complete solves this problem ``` 00: Phaser initialized; phase=0, parties=1, arrived=0 01: Enqueue Message 1; phase=0, parties=2, arrived=0 02: Enqueue Message 2; phase=0, parties=3, arrived=0 03: arriveAndAwaitAdvance; phase=0, parties=3, arrived=1 04: Complete Message 1; phase=0, parties=2, arrived=1 05: Complete Message 2; phase=0, parties=1, arrived=1 (advance) 06: Enqueue Message 4; phase=1, parties=2, arrived=0 07: Enqueue Message 5; phase=1, parties=3, arrived=0 08: arriveAndAwaitAdvance; phase=1, parties=3, arrived=1 09: Complete Message 4; phase=1, parties=2, arrived=1 10: Complete Message 5; phase=1, parties=1, arrived=1 (advance) ```
1 parent c58231a commit 6a29b4a

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

analytics-sample/src/main/java/sample/BlockingFlush.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,12 +55,12 @@ public boolean transform(MessageBuilder builder) {
5555
new Callback() {
5656
@Override
5757
public void success(Message message) {
58-
phaser.arrive();
58+
phaser.arriveAndDeregister();
5959
}
6060

6161
@Override
6262
public void failure(Message message, Throwable throwable) {
63-
phaser.arrive();
63+
phaser.arriveAndDeregister();
6464
}
6565
});
6666
}

0 commit comments

Comments
 (0)