Skip to content

Commit

Permalink
Add numberOfRetries option
Browse files Browse the repository at this point in the history
Add a numberOfRetries method to the DeadLetterEntry. This allows users a
 chance to evict the entry after a certain amount if they desire so.
Also, drop the GenericEventDeadLetter for now, as we're not using it at
  all. Lastly, fix the test entry in the DeadLetterEntryTest to comply
 with the compareTo change using the expiresAt field instead of the
 deadLettered field for comparison.

#2021
  • Loading branch information
smcvb committed Jan 31, 2022
1 parent 6241e5a commit 833b423
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 146 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ public interface DeadLetterEntry<T extends Message<?>> {
*/
Instant expiresAt();

/**
* The number of retries this {@link DeadLetterEntry dead-letter} has gone through.
*
* @return The number of retries this {@link DeadLetterEntry dead-letter} has gone through.
*/
int numberOfRetries();

/**
* Acknowledges this {@link DeadLetterEntry dead-letter} as successfully evaluated. This operation will remove the
* entry from its queue.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -339,6 +339,7 @@ private class GenericDeadLetterMessage implements DeadLetterEntry<T> {
private final T message;
private final Throwable cause;
private final Instant expiresAt;
private final int numberOfRetries;
private final Instant deadLettered;
private final Consumer<GenericDeadLetterMessage> releaseOperation;

Expand All @@ -350,6 +351,7 @@ private GenericDeadLetterMessage(DeadLetterEntry<T> entry,
entry.cause(),
entry.deadLettered(),
expiresAt,
entry.numberOfRetries() + 1,
releaseOperation);
}

Expand All @@ -359,11 +361,22 @@ private GenericDeadLetterMessage(QueueIdentifier queueIdentifier,
Instant deadLettered,
Instant expiresAt,
Consumer<GenericDeadLetterMessage> releaseOperation) {
this(queueIdentifier, message, cause, deadLettered, expiresAt, 0, releaseOperation);
}

private GenericDeadLetterMessage(QueueIdentifier queueIdentifier,
T message,
Throwable cause,
Instant deadLettered,
Instant expiresAt,
int numberOfRetries,
Consumer<GenericDeadLetterMessage> releaseOperation) {
this.queueIdentifier = queueIdentifier;
this.message = message;
this.cause = cause;
this.deadLettered = deadLettered;
this.expiresAt = expiresAt;
this.numberOfRetries = numberOfRetries;
this.releaseOperation = releaseOperation;
}

Expand Down Expand Up @@ -392,6 +405,11 @@ public Instant expiresAt() {
return expiresAt;
}

@Override
public int numberOfRetries() {
return numberOfRetries;
}

@Override
public void acknowledge() {
releaseOperation.accept(this);
Expand All @@ -411,7 +429,7 @@ public boolean equals(Object o) {
return false;
}

// Validation does not include the expiresAt and releaseOperation, to allow stable removal of entries
// Check does not include the expiresAt, numberOfRetries, and releaseOperation allowing easy entry removal.
//noinspection unchecked
GenericDeadLetterMessage that = (GenericDeadLetterMessage) o;
return Objects.equals(queueIdentifier, that.queueIdentifier)
Expand All @@ -427,12 +445,13 @@ public int hashCode() {

@Override
public String toString() {
return "DeadLetterEntry{" +
return "GenericDeadLetterMessage{" +
"queueIdentifier=" + queueIdentifier +
", message=" + message +
", cause=" + cause +
", deadLettered=" + deadLettered +
", expiresAt=" + expiresAt +
", numberOfRetries=" + numberOfRetries +
", deadLettered=" + deadLettered +
'}';
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ void testCompareReturnsZeroIfFirstAndSecondLetterOccurredAtTheSameTime() {

private static class TestDeadLetterEntry implements DeadLetterEntry<Message<?>> {

private final Instant deadLettered;
private final Instant expiresAt;

private TestDeadLetterEntry(Instant deadLettered) {
this.deadLettered = deadLettered;
private TestDeadLetterEntry(Instant expiresAt) {
this.expiresAt = expiresAt;
}

@Override
Expand All @@ -85,12 +85,17 @@ public Throwable cause() {

@Override
public Instant expiresAt() {
return null;
return expiresAt;
}

@Override
public int numberOfRetries() {
return 0;
}

@Override
public Instant deadLettered() {
return deadLettered;
return null;
}

@Override
Expand Down

0 comments on commit 833b423

Please sign in to comment.