Skip to content

Commit 1fad3f1

Browse files
committed
resolve merge
1 parent a0011b2 commit 1fad3f1

File tree

1 file changed

+50
-43
lines changed

1 file changed

+50
-43
lines changed

src/replit_river/server_transport.py

Lines changed: 50 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,6 @@ async def handshake_to_get_session(
110110
async def close(self) -> None:
111111
await self._close_all_sessions()
112112

113-
async def _get_existing_session(self, to_id: str) -> ServerSession | None:
114-
async with self._session_lock:
115-
return self._sessions.get(to_id)
116-
117113
async def _get_or_create_session(
118114
self,
119115
transport_id: str,
@@ -251,57 +247,68 @@ async def _establish_handshake(
251247
)
252248
raise InvalidMessageException("handshake request to wrong server")
253249

254-
old_session = await self._get_existing_session(request_message.from_)
255-
client_next_expected_seq = (
256-
handshake_request.expectedSessionState.nextExpectedSeq
257-
)
258-
client_next_sent_seq = handshake_request.expectedSessionState.nextSentSeq or 0
259-
if old_session and old_session.session_id == handshake_request.sessionId:
260-
# check invariants
261-
# ordering must be correct
262-
our_next_seq = await old_session.get_next_sent_seq()
263-
our_ack = await old_session.get_next_expected_seq()
250+
async with self._session_lock:
251+
old_session = self._sessions.get(request_message.from_)
252+
client_next_expected_seq = (
253+
handshake_request.expectedSessionState.nextExpectedSeq
254+
)
255+
client_next_sent_seq = (
256+
handshake_request.expectedSessionState.nextSentSeq or 0
257+
)
258+
if old_session and old_session.session_id == handshake_request.sessionId:
259+
# check invariants
260+
# ordering must be correct
261+
our_next_seq = await old_session.get_next_sent_seq()
262+
our_ack = await old_session.get_next_expected_seq()
264263

265-
if client_next_sent_seq > our_ack:
266-
message = (
267-
"client is in the future: "
268-
f"server wanted {our_ack} but client has {client_next_sent_seq}"
269-
)
270-
await self._send_handshake_response(
271-
request_message,
272-
HandShakeStatus(ok=False, reason=message),
273-
websocket,
274-
)
275-
raise SessionStateMismatchException(message)
264+
if client_next_sent_seq > our_ack:
265+
message = (
266+
"client is in the future: "
267+
f"server wanted {our_ack} but client has {client_next_sent_seq}"
268+
)
269+
await self._send_handshake_response(
270+
request_message,
271+
HandShakeStatus(ok=False, reason=message),
272+
websocket,
273+
)
274+
raise SessionStateMismatchException(message)
276275

277-
if our_next_seq > client_next_expected_seq:
278-
message = (
279-
"server is in the future: "
280-
f"client wanted {client_next_expected_seq} "
281-
f"but server has {our_next_seq}"
282-
)
276+
if our_next_seq > client_next_expected_seq:
277+
message = (
278+
"server is in the future: "
279+
f"client wanted {client_next_expected_seq} "
280+
f"but server has {our_next_seq}"
281+
)
282+
await self._send_handshake_response(
283+
request_message,
284+
HandShakeStatus(ok=False, reason=message),
285+
websocket,
286+
)
287+
raise SessionStateMismatchException(message)
288+
elif old_session:
289+
# we have an old session but the session id is different
290+
# just delete the old session
291+
await old_session.close()
292+
old_session = None
293+
294+
if not old_session and (
295+
client_next_sent_seq > 0 or client_next_expected_seq > 0
296+
):
297+
message = "client is trying to resume a session but we don't have it"
283298
await self._send_handshake_response(
284299
request_message,
285300
HandShakeStatus(ok=False, reason=message),
286301
websocket,
287302
)
288303
raise SessionStateMismatchException(message)
289-
elif old_session:
290-
# we have an old session but the session id is different
291-
# just delete the old session
292-
await old_session.close()
293-
old_session = None
294304

295-
if not old_session and (
296-
client_next_sent_seq > 0 or client_next_expected_seq > 0
297-
):
298-
message = "client is trying to resume a session but we don't have it"
299-
await self._send_handshake_response(
305+
# from this point on, we're committed to connecting
306+
session_id = handshake_request.sessionId
307+
handshake_response = await self._send_handshake_response(
300308
request_message,
301-
HandShakeStatus(ok=False, reason=message),
309+
HandShakeStatus(ok=True, sessionId=session_id),
302310
websocket,
303311
)
304-
raise SessionStateMismatchException(message)
305312

306313
return handshake_request, handshake_response
307314

0 commit comments

Comments
 (0)