Skip to content

Commit 9bd625f

Browse files
Ryland Degnanrobertroeser
Ryland Degnan
authored andcommitted
Replace close() method with dispose()/isDisposed() (#456)
1 parent c6fd3f4 commit 9bd625f

File tree

41 files changed

+307
-319
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+307
-319
lines changed

rsocket-core/src/jmh/java/io/rsocket/RSocketPerf.java

+9-5
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public static class Input {
7979

8080
static final ByteBuffer HELLO = ByteBuffer.wrap("HELLO".getBytes(StandardCharsets.UTF_8));
8181

82-
static final Payload HELLO_PAYLOAD = new DefaultPayload(HELLO);
82+
static final Payload HELLO_PAYLOAD = DefaultPayload.create(HELLO);
8383

8484
static final DirectProcessor<Frame> clientReceive = DirectProcessor.create();
8585
static final DirectProcessor<Frame> serverReceive = DirectProcessor.create();
@@ -121,8 +121,7 @@ public Mono<Void> metadataPush(Payload payload) {
121121
}
122122

123123
@Override
124-
public Mono<Void> close() {
125-
return Mono.empty();
124+
public void dispose() {
126125
}
127126

128127
@Override
@@ -140,8 +139,13 @@ public Mono<Void> onClose() {
140139
MonoProcessor<Void> onClose = MonoProcessor.create();
141140

142141
@Override
143-
public Mono<Void> close() {
144-
return Mono.empty().doFinally(s -> onClose.onComplete()).then();
142+
public void dispose() {
143+
onClose.onComplete();
144+
}
145+
146+
@Override
147+
public boolean isDisposed() {
148+
return onClose.isDisposed();
145149
}
146150

147151
@Override

rsocket-core/src/jmh/java/io/rsocket/perfutil/TestDuplexConnection.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ public double availability() {
6868
}
6969

7070
@Override
71-
public Mono<Void> close() {
72-
return Mono.empty();
71+
public void dispose() {
7372
}
7473

7574
@Override

rsocket-core/src/main/java/io/rsocket/AbstractRSocket.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@
2424
/**
2525
* An abstract implementation of {@link RSocket}. All request handling methods emit {@link
2626
* UnsupportedOperationException} and hence must be overridden to provide a valid implementation.
27-
*
28-
* <p>{@link #close()} returns a {@code Publisher} that immediately terminates. That same Publisher
29-
* is returned by the {@link #onClose()} method.
3027
*/
3128
public abstract class AbstractRSocket implements RSocket {
3229

@@ -58,12 +55,13 @@ public Mono<Void> metadataPush(Payload payload) {
5855
}
5956

6057
@Override
61-
public Mono<Void> close() {
62-
return Mono.defer(
63-
() -> {
64-
onClose.onComplete();
65-
return onClose;
66-
});
58+
public void dispose() {
59+
onClose.onComplete();
60+
}
61+
62+
@Override
63+
public boolean isDisposed() {
64+
return onClose.isDisposed();
6765
}
6866

6967
@Override

rsocket-core/src/main/java/io/rsocket/Closeable.java

+3-13
Original file line numberDiff line numberDiff line change
@@ -16,24 +16,14 @@
1616

1717
package io.rsocket;
1818

19+
import reactor.core.Disposable;
1920
import reactor.core.publisher.Mono;
2021

2122
/** */
22-
public interface Closeable {
23-
/**
24-
* Close this {@code RSocket} upon subscribing to the returned {@code Publisher}
25-
*
26-
* <p><em>This method is idempotent and hence can be called as many times at any point with same
27-
* outcome.</em>
28-
*
29-
* @return A {@code Publisher} that triggers the close when subscribed to and that completes when
30-
* this {@code RSocket} close is complete.
31-
*/
32-
Mono<Void> close();
33-
23+
public interface Closeable extends Disposable {
3424
/**
3525
* Returns a {@code Publisher} that completes when this {@code RSocket} is closed. A {@code
36-
* RSocket} can be closed by explicitly calling {@link #close()} or when the underlying transport
26+
* RSocket} can be closed by explicitly calling {@link RSocket#dispose()} or when the underlying transport
3727
* connection is closed.
3828
*
3929
* @return A {@code Publisher} that completes when this {@code RSocket} close is complete.

rsocket-core/src/main/java/io/rsocket/DuplexConnection.java

+5
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,9 @@ default Mono<Void> sendOne(Frame frame) {
7474
* @return Stream of all {@code Frame}s received.
7575
*/
7676
Flux<Frame> receive();
77+
78+
@Override
79+
default double availability() {
80+
return isDisposed() ? 0.0 : 1.0;
81+
}
7782
}

rsocket-core/src/main/java/io/rsocket/RSocket.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,6 @@ public interface RSocket extends Availability, Closeable {
7171

7272
@Override
7373
default double availability() {
74-
return 0.0;
74+
return isDisposed() ? 0.0 : 1.0;
7575
}
7676
}

rsocket-core/src/main/java/io/rsocket/RSocketClient.java

+13-8
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class RSocketClient implements RSocket {
9898
.doOnError(
9999
t -> {
100100
errorConsumer.accept(t);
101-
connection.close().subscribe();
101+
connection.dispose();
102102
})
103103
.subscribe();
104104
}
@@ -234,8 +234,13 @@ public double availability() {
234234
}
235235

236236
@Override
237-
public Mono<Void> close() {
238-
return connection.close();
237+
public void dispose() {
238+
connection.dispose();
239+
}
240+
241+
@Override
242+
public boolean isDisposed() {
243+
return connection.isDisposed();
239244
}
240245

241246
@Override
@@ -260,25 +265,25 @@ public Flux<Payload> handleRequestStream(final Payload payload) {
260265
return receiver
261266
.doOnRequest(
262267
l -> {
263-
if (first.compareAndSet(false, true) && !receiver.isTerminated()) {
268+
if (first.compareAndSet(false, true) && !receiver.isDisposed()) {
264269
final Frame requestFrame =
265270
Frame.Request.from(streamId, FrameType.REQUEST_STREAM, payload, l);
266271
payload.release();
267272
sendProcessor.onNext(requestFrame);
268-
} else if (contains(streamId) && !receiver.isTerminated()) {
273+
} else if (contains(streamId) && !receiver.isDisposed()) {
269274
sendProcessor.onNext(Frame.RequestN.from(streamId, l));
270275
}
271276
sendProcessor.drain();
272277
})
273278
.doOnError(
274279
t -> {
275-
if (contains(streamId) && !receiver.isTerminated()) {
280+
if (contains(streamId) && !receiver.isDisposed()) {
276281
sendProcessor.onNext(Frame.Error.from(streamId, t));
277282
}
278283
})
279284
.doOnCancel(
280285
() -> {
281-
if (contains(streamId) && !receiver.isTerminated()) {
286+
if (contains(streamId) && !receiver.isDisposed()) {
282287
sendProcessor.onNext(Frame.Cancel.from(streamId));
283288
}
284289
})
@@ -326,7 +331,7 @@ private Flux<Payload> handleChannel(Flux<Payload> request, FrameType requestType
326331
boolean firstRequest = true;
327332

328333
boolean isValidToSendFrame() {
329-
return contains(streamId) && !receiver.isTerminated();
334+
return contains(streamId) && !receiver.isDisposed();
330335
}
331336

332337
void sendOneFrame(Frame frame) {

rsocket-core/src/main/java/io/rsocket/RSocketFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ private Mono<? extends Void> processSetupFrame(
342342
return multiplexer
343343
.asStreamZeroConnection()
344344
.sendOne(Frame.Error.from(0, error))
345-
.then(multiplexer.close());
345+
.doFinally(signalType -> multiplexer.dispose());
346346
}
347347

348348
ConnectionSetupPayload setupPayload = ConnectionSetupPayload.create(setupFrame);

rsocket-core/src/main/java/io/rsocket/RSocketServer.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,13 @@ public Mono<Void> metadataPush(Payload payload) {
200200
}
201201

202202
@Override
203-
public Mono<Void> close() {
204-
return connection.close();
203+
public void dispose() {
204+
connection.dispose();
205+
}
206+
207+
@Override
208+
public boolean isDisposed() {
209+
return connection.isDisposed();
205210
}
206211

207212
@Override
@@ -213,7 +218,7 @@ private void cleanup() {
213218
cleanUpSendingSubscriptions();
214219
cleanUpChannelProcessors();
215220

216-
requestHandler.close().subscribe();
221+
requestHandler.dispose();
217222
}
218223

219224
private synchronized void cleanUpSendingSubscriptions() {

rsocket-core/src/main/java/io/rsocket/fragmentation/FragmentationDuplexConnection.java

+17-12
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,13 @@ public Flux<Frame> receive() {
8585
}
8686

8787
@Override
88-
public Mono<Void> close() {
89-
return source.close();
88+
public void dispose() {
89+
source.dispose();
9090
}
9191

92-
private synchronized FrameReassembler getFrameReassembler(Frame frame) {
93-
return frameReassemblers.computeIfAbsent(frame.getStreamId(), s -> new FrameReassembler(frame));
94-
}
95-
96-
private synchronized FrameReassembler removeFrameReassembler(int streamId) {
97-
return frameReassemblers.remove(streamId);
98-
}
99-
100-
private synchronized boolean frameReassemblersContain(int streamId) {
101-
return frameReassemblers.containsKey(streamId);
92+
@Override
93+
public boolean isDisposed() {
94+
return source.isDisposed();
10295
}
10396

10497
@Override
@@ -114,4 +107,16 @@ public Mono<Void> onClose() {
114107
}
115108
});
116109
}
110+
111+
private synchronized FrameReassembler getFrameReassembler(Frame frame) {
112+
return frameReassemblers.computeIfAbsent(frame.getStreamId(), s -> new FrameReassembler(frame));
113+
}
114+
115+
private synchronized FrameReassembler removeFrameReassembler(int streamId) {
116+
return frameReassemblers.remove(streamId);
117+
}
118+
119+
private synchronized boolean frameReassemblersContain(int streamId) {
120+
return frameReassemblers.containsKey(streamId);
121+
}
117122
}

rsocket-core/src/main/java/io/rsocket/internal/ClientServerInputMultiplexer.java

+22-5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
package io.rsocket.internal;
1818

19+
import io.rsocket.Closeable;
1920
import io.rsocket.DuplexConnection;
2021
import io.rsocket.Frame;
2122
import io.rsocket.FrameType;
@@ -41,7 +42,7 @@
4142
* even. Even IDs are for the streams initiated by server and odds are for streams initiated by the
4243
* client.
4344
*/
44-
public class ClientServerInputMultiplexer {
45+
public class ClientServerInputMultiplexer implements Closeable {
4546
private static final Logger LOGGER = LoggerFactory.getLogger("io.rsocket.FrameLogger");
4647

4748
private final DuplexConnection streamZeroConnection;
@@ -112,8 +113,19 @@ public DuplexConnection asStreamZeroConnection() {
112113
return streamZeroConnection;
113114
}
114115

115-
public Mono<Void> close() {
116-
return source.close();
116+
@Override
117+
public void dispose() {
118+
source.dispose();
119+
}
120+
121+
@Override
122+
public boolean isDisposed() {
123+
return source.isDisposed();
124+
}
125+
126+
@Override
127+
public Mono<Void> onClose() {
128+
return source.onClose();
117129
}
118130

119131
private static class InternalDuplexConnection implements DuplexConnection {
@@ -158,8 +170,13 @@ public Flux<Frame> receive() {
158170
}
159171

160172
@Override
161-
public Mono<Void> close() {
162-
return source.close();
173+
public void dispose() {
174+
source.dispose();
175+
}
176+
177+
@Override
178+
public boolean isDisposed() {
179+
return source.isDisposed();
163180
}
164181

165182
@Override

rsocket-core/src/main/java/io/rsocket/util/CloseableAdapter.java

-29
This file was deleted.

rsocket-core/src/main/java/io/rsocket/util/RSocketProxy.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,13 @@ public double availability() {
6060
}
6161

6262
@Override
63-
public Mono<Void> close() {
64-
return source.close();
63+
public void dispose() {
64+
source.dispose();
65+
}
66+
67+
@Override
68+
public boolean isDisposed() {
69+
return source.isDisposed();
6570
}
6671

6772
@Override

0 commit comments

Comments
 (0)