Skip to content

Commit ae771f8

Browse files
committed
keep alive handler: less allocations
Signed-off-by: Maksym Ostroverkhov <[email protected]>
1 parent 1efddd1 commit ae771f8

File tree

1 file changed

+10
-11
lines changed

1 file changed

+10
-11
lines changed

rsocket-core/src/main/java/io/rsocket/keepalive/KeepAliveHandler.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import io.rsocket.frame.KeepAliveFrameFlyweight;
2323
import io.rsocket.resume.ResumeStateHolder;
2424
import java.time.Duration;
25-
import java.util.Optional;
2625
import java.util.concurrent.atomic.AtomicReference;
2726
import reactor.core.Disposable;
2827
import reactor.core.Disposables;
@@ -32,10 +31,10 @@
3231
import reactor.core.publisher.UnicastProcessor;
3332

3433
abstract class KeepAliveHandler implements Disposable {
35-
protected final ByteBufAllocator allocator;
34+
final ByteBufAllocator allocator;
3635
private final Duration keepAlivePeriod;
37-
private final Duration keepAliveTimeout;
38-
private volatile Optional<ResumeStateHolder> resumeStateHolder = Optional.empty();
36+
private final long keepAliveTimeout;
37+
private volatile ResumeStateHolder resumeStateHolder;
3938
private final UnicastProcessor<ByteBuf> sent = UnicastProcessor.create();
4039
private final MonoProcessor<KeepAlive> timeout = MonoProcessor.create();
4140
private final AtomicReference<Disposable> intervalDisposable = new AtomicReference<>();
@@ -55,7 +54,7 @@ private KeepAliveHandler(
5554
ByteBufAllocator allocator, Duration keepAlivePeriod, Duration keepAliveTimeout) {
5655
this.allocator = allocator;
5756
this.keepAlivePeriod = keepAlivePeriod;
58-
this.keepAliveTimeout = keepAliveTimeout;
57+
this.keepAliveTimeout = keepAliveTimeout.toMillis();
5958
}
6059

6160
public void start() {
@@ -90,11 +89,11 @@ public long receive(ByteBuf keepAliveFrame) {
9089
}
9190

9291
public void resumeState(ResumeStateHolder resumeStateHolder) {
93-
this.resumeStateHolder = Optional.of(resumeStateHolder);
92+
this.resumeStateHolder = resumeStateHolder;
9493
}
9594

9695
public boolean hasResumeState() {
97-
return resumeStateHolder.isPresent();
96+
return resumeStateHolder != null;
9897
}
9998

10099
public Flux<ByteBuf> send() {
@@ -113,13 +112,13 @@ void doSend(ByteBuf frame) {
113112

114113
void doCheckTimeout() {
115114
long now = System.currentTimeMillis();
116-
if (now - lastReceivedMillis >= keepAliveTimeout.toMillis()) {
117-
timeout.onNext(new KeepAlive(keepAlivePeriod.toMillis(), keepAliveTimeout.toMillis()));
115+
if (now - lastReceivedMillis >= keepAliveTimeout) {
116+
timeout.onNext(new KeepAlive(keepAlivePeriod.toMillis(), keepAliveTimeout));
118117
}
119118
}
120119

121-
Long obtainLastReceivedPos() {
122-
return resumeStateHolder.map(ResumeStateHolder::impliedPosition).orElse(0L);
120+
long obtainLastReceivedPos() {
121+
return resumeStateHolder != null ? resumeStateHolder.impliedPosition() : 0;
123122
}
124123

125124
private static class Server extends KeepAliveHandler {

0 commit comments

Comments
 (0)