Skip to content

Commit 4264862

Browse files
committed
fire and forget, close stream only on future done.
1 parent f50f290 commit 4264862

File tree

4 files changed

+8
-4
lines changed

4 files changed

+8
-4
lines changed

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
Changelog
22
---------
33

4+
v0.4.6
5+
======
6+
- fire_and_forget now only removes the stream id when the future is done.
7+
48
v0.4.5
59
======
610
- Breaking change: Normalized the request_channel method argument names across implementations and added where missing (vanilla, reactivex etc.):

rsocket/rsocket_base.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -493,7 +493,7 @@ def fire_and_forget(self, payload: Payload) -> Awaitable[None]:
493493
stream_id = self._allocate_stream()
494494
frame = to_fire_and_forget_frame(stream_id, payload)
495495
self.send_request(frame)
496-
self.finish_stream(stream_id)
496+
frame.sent_future.add_done_callback(lambda _: self.finish_stream(stream_id))
497497
return frame.sent_future
498498

499499
def request_stream(self, payload: Payload) -> Union[BackpressureApi, Publisher]:

tests/rsocket/test_misbehaving_client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ async def request_response(self, payload: Payload) -> Awaitable[Payload]:
2929

3030
bad_client = MisbehavingRSocket(client._transport)
3131

32-
client.fire_and_forget(Payload())
32+
await client.fire_and_forget(Payload())
3333

34-
await bad_client.send_frame(to_payload_frame(145, Payload()))
34+
await bad_client.send_frame(to_payload_frame(stream_id=145, payload=Payload()))
3535

3636
await client.request_response(Payload(b'request'))
3737

tests/rsocket/test_routing.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,7 @@ async def fire_and_forget(payload):
153153
async with lazy_pipe(
154154
client_arguments={'metadata_encoding': WellKnownMimeTypes.MESSAGE_RSOCKET_COMPOSITE_METADATA},
155155
server_arguments={'handler_factory': handler_factory}) as (server, client):
156-
client.fire_and_forget(Payload(b'request data', composite(route('test.path'))))
156+
await client.fire_and_forget(Payload(b'request data', composite(route('test.path'))))
157157

158158
await received.wait()
159159
assert received_data == b'request data'

0 commit comments

Comments
 (0)