Skip to content

Commit 84ec8b3

Browse files
committed
Use Callable instead of Runnable
To get emit returning values, it should use Callable interface. Verify connected state before #emit.
1 parent 7392010 commit 84ec8b3

File tree

1 file changed

+17
-6
lines changed

1 file changed

+17
-6
lines changed

src/main/java/org/fluentd/logger/sender/AsyncRawSocketSender.java

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22
package org.fluentd.logger.sender;
33

44
import java.util.Map;
5+
import java.util.concurrent.Callable;
6+
import java.util.concurrent.ExecutionException;
57
import java.util.concurrent.ExecutorService;
68
import java.util.concurrent.Executors;
9+
import java.util.concurrent.Future;
710

811
import org.fluentd.logger.errorhandler.ErrorHandler;
912
import org.fluentd.logger.sender.ExponentialDelayReconnector;
@@ -21,7 +24,7 @@
2124
*/
2225
public class AsyncRawSocketSender implements Sender {
2326

24-
private final class EmitRunnable implements Runnable {
27+
private final class EmitRunnable implements Callable<Boolean> {
2528
private final String tag;
2629
private final Map<String, Object> data;
2730
private final RawSocketSender sender;
@@ -36,8 +39,11 @@ private EmitRunnable(String tag, Map<String, Object> data,
3639
}
3740

3841
@Override
39-
public void run() {
40-
sender.emit(tag, timestamp, data);
42+
public Boolean call() {
43+
if (!sender.isConnected() && !reconnector.enableReconnection(System.currentTimeMillis()))
44+
return false;
45+
46+
return sender.emit(tag, timestamp, data);
4147
}
4248
}
4349

@@ -106,9 +112,14 @@ public boolean emit(String tag, Map<String, Object> data) {
106112
@Override
107113
public boolean emit(final String tag, final long timestamp, final Map<String, Object> data) {
108114
final RawSocketSender sender = this.sender;
109-
senderTask.execute(new EmitRunnable(tag, data, sender, timestamp));
110-
111-
return this.isConnected() || reconnector.enableReconnection(System.currentTimeMillis());
115+
try {
116+
Future<Boolean> result = senderTask.submit(new EmitRunnable(tag, data, sender, timestamp));
117+
return result.get();
118+
} catch (InterruptedException e) {
119+
throw new RuntimeException(e);
120+
} catch (ExecutionException e) {
121+
throw new RuntimeException(e);
122+
}
112123
}
113124

114125
@Override

0 commit comments

Comments
 (0)