Skip to content

Commit e8ee6d8

Browse files
committed
[#8] In MessageOperator, temporary failure occurred. Try again.
1 parent 4a5fe4d commit e8ee6d8

File tree

3 files changed

+36
-24
lines changed

3 files changed

+36
-24
lines changed

src/main/java/org/code13k/perri/business/message/MessageOperator.java

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,26 @@
11
package org.code13k.perri.business.message;
22

3-
import org.code13k.perri.app.Status;
3+
44
import org.code13k.perri.business.message.sender.BasicSender;
55
import org.code13k.perri.business.message.sender.SenderFactory;
66
import org.code13k.perri.model.MessageOperation;
77
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
99

1010
import java.util.ArrayList;
11+
import java.util.Timer;
12+
import java.util.TimerTask;
1113
import java.util.function.Consumer;
1214

1315
public class MessageOperator {
1416
// Logger
1517
private static final Logger mLogger = LoggerFactory.getLogger(MessageOperator.class);
1618

19+
// Const
20+
private static final int MAX_RETRY_COUNT = 5;
21+
1722
// Data
23+
private Timer mRetryTimer = new Timer("perri-retry-timer");
1824
private ArrayList<MessageOperation> mQueue = new ArrayList<>();
1925
private long mSentMessageCount = 0;
2026

@@ -57,14 +63,14 @@ public void add(MessageOperation messageOperation) {
5763
/**
5864
* Number of ready message
5965
*/
60-
public int getReadyMessageCount(){
66+
public int getReadyMessageCount() {
6167
return mQueue.size();
6268
}
6369

6470
/**
6571
* Number of sent message
6672
*/
67-
public long getSentMessageCount(){
73+
public long getSentMessageCount() {
6874
return mSentMessageCount;
6975
}
7076

@@ -85,7 +91,21 @@ public void accept(Integer result) {
8591
mLogger.error("The operation has failed. (" + type + ")");
8692
} else if (result == BasicSender.SendResult.TEMPORARY_FAILURE) {
8793
mLogger.error("The operation has failed. But it's temporary. Try again. (" + type + ")");
88-
// TODO Impl
94+
95+
// Retry operation
96+
if (messageOperation.getRetryCount() < MAX_RETRY_COUNT) {
97+
messageOperation.increaseRetryCount();
98+
mLogger.info("messageOperation = " + messageOperation);
99+
mRetryTimer.schedule(new TimerTask() {
100+
@Override
101+
public void run() {
102+
add(messageOperation);
103+
}
104+
}, 3000 * messageOperation.getRetryCount());
105+
} else {
106+
// FAILURE
107+
mLogger.error("Failed to retry. The operation has failed. (" + type + ")");
108+
}
89109
}
90110
}
91111
});

src/main/java/org/code13k/perri/model/BasicModel.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,12 @@
11
package org.code13k.perri.model;
22

33
import com.google.gson.Gson;
4-
import org.slf4j.Logger;
5-
import org.slf4j.LoggerFactory;
64

75
import java.lang.reflect.Field;
86
import java.util.HashMap;
97
import java.util.Map;
108

119
public class BasicModel implements Cloneable {
12-
// Logger
13-
private Logger mLogger = null;
14-
15-
/**
16-
* getLogger();
17-
*/
18-
public Logger getLogger() {
19-
if (mLogger == null) {
20-
mLogger = LoggerFactory.getLogger(this.getClass());
21-
}
22-
return mLogger;
23-
}
24-
2510
/**
2611
* toMap()
2712
*/
@@ -31,11 +16,9 @@ public Map<String, Object> toMap() {
3116
Field[] fields = ((Object) this).getClass().getDeclaredFields();
3217
for (Field field : fields) {
3318
try {
34-
if (field.getName().equals("mLogger") == false) {
35-
field.setAccessible(true);
36-
result.put(field.getName(), field.get(this));
37-
field.setAccessible(false);
38-
}
19+
field.setAccessible(true);
20+
result.put(field.getName(), field.get(this));
21+
field.setAccessible(false);
3922
} catch (IllegalAccessException ex) {
4023
// Nothing
4124
}

src/main/java/org/code13k/perri/model/MessageOperation.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ public class MessageOperation extends BasicModel {
66
private ChannelInfo channelInfo;
77
private Message message;
88
private int messageCount = 1;
9+
private int retryCount = 0;
910

1011
@Override
1112
public boolean equals(Object object) {
@@ -42,4 +43,12 @@ public int getMessageCount() {
4243
public void increaseMessageCount() {
4344
this.messageCount++;
4445
}
46+
47+
public int getRetryCount(){
48+
return retryCount;
49+
}
50+
51+
public void increaseRetryCount(){
52+
this.retryCount++;
53+
}
4554
}

0 commit comments

Comments
 (0)