Skip to content

Commit ced33fb

Browse files
committed
Introduce ReceivedRequestEntry for better logging of cancel a tasks
1 parent f4b0cfa commit ced33fb

File tree

2 files changed

+16
-10
lines changed

2 files changed

+16
-10
lines changed

robotcode/jsonrpc2/protocol.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,11 @@ class SendedRequestEntry(NamedTuple):
315315
result_type: Optional[Type[Any]]
316316

317317

318+
class ReceivedRequestEntry(NamedTuple):
319+
future: asyncio.Future[Any]
320+
request: Optional[Any]
321+
322+
318323
class JsonRPCProtocolBase(asyncio.Protocol, ABC):
319324

320325
_logger = LoggingDescriptor()
@@ -405,7 +410,7 @@ def __init__(self) -> None:
405410
self._sended_request: OrderedDict[Union[str, int], SendedRequestEntry] = OrderedDict()
406411
self._sended_request_count = 0
407412
self._received_request_lock = threading.RLock()
408-
self._received_request: OrderedDict[Union[str, int, None], asyncio.Future[Any]] = OrderedDict()
413+
self._received_request: OrderedDict[Union[str, int, None], ReceivedRequestEntry] = OrderedDict()
409414

410415
@staticmethod
411416
def _generate_json_rpc_messages_from_dict(
@@ -641,7 +646,7 @@ async def handle_request(self, message: JsonRPCRequest) -> None:
641646
result = asyncio.create_task(ensure_coroutine(e.method)(*params[0], **params[1]))
642647

643648
with self._received_request_lock:
644-
self._received_request[message.id] = result
649+
self._received_request[message.id] = ReceivedRequestEntry(result, message)
645650

646651
try:
647652
self.send_response(message.id, await result)
@@ -660,16 +665,17 @@ async def handle_request(self, message: JsonRPCRequest) -> None:
660665
self._logger.exception(e)
661666
self.send_error(JsonRPCErrors.INTERNAL_ERROR, f"{type(e).__name__}: {e}", id=message.id)
662667

663-
async def cancel_received_request(self, id: Union[int, str, None]) -> None:
668+
async def cancel_request(self, id: Union[int, str, None]) -> None:
664669
with self._received_request_lock:
665-
future = self._received_request.get(id, None)
666-
if future is not None and not future.cancelled():
667-
future.cancel()
670+
entry = self._received_request.get(id, None)
671+
if entry is not None and entry.future is not None and not entry.future.cancelled():
672+
self._logger.debug(f"try to cancel request {entry.request}")
673+
entry.future.cancel()
668674

669675
async def cancel_all_received_request(self) -> None:
670-
for future in self._received_request.values():
671-
if future is not None and not future.cancelled():
672-
future.cancel()
676+
for entry in self._received_request.values():
677+
if entry is not None and entry.future is not None and not entry.future.cancelled():
678+
entry.future.cancel()
673679

674680
async def handle_notification(self, message: JsonRPCNotification) -> None:
675681
e = self.registry.get_entry(message.method)

robotcode/language_server/common/protocol.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ async def _set_trace(self, value: TraceValue, **kwargs: Any) -> None:
222222
@rpc_method(name="$/cancelRequest", param_type=CancelParams)
223223
@_logger.call
224224
async def _cancel_request(self, id: Union[int, str], **kwargs: Any) -> None:
225-
await self.cancel_received_request(id)
225+
await self.cancel_request(id)
226226

227227
async def register_capability(self, id: str, method: str, register_options: Optional[Any]) -> None:
228228
await self.register_capabilities([Registration(id=id, method=method, register_options=register_options)])

0 commit comments

Comments
 (0)