Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Provide a gRPC (messaging) way of terminating the monitor connection #2271

Copy link
Copy link
Closed
@kittaakos

Description

@kittaakos
Issue body actions

Describe the request

As a consumer of the CLI, I need a way to request terminating the monitor connection; by the time the client receives the response to the request, the resource (port) must be available.

Describe the current behavior

Initially from arduino/arduino-ide#1783 (comment):

IDE2 creates a gRPC bidirectional stream via the Monitor method.

BeforeIDE2 does an upload, all related monitor connections are closed. IDE2 closes the monitor connection by ending the bidirectional stream and waiting for the OK signal:

https://github.com/arduino/arduino-ide/blob/69ae38effaf950ae6fba83617b08b1cc0bc0a40d/arduino-ide-extension/src/node/monitor-service.ts#L435

I see a race condition; if I put a breakpoint into the code after closing the bidirectional stream (and let the OS clean up the resources), I do not have the access is denied error.

CLI should provide a way to terminate the monitor connection gracefully. Calling this API and receiving an OK ack means the port is free.

This is what is happening:

  • client (IDE2) ends the stream
  • server (CLI) receives the end of the stream, kills the monitor process
  • the stream is already closed on the client, it does not wait for the server, the server is still killing the processes (maybe),
  • the client starts an upload
  • 💥

This is what should happen:

  • client (IDE2) send a STOP request via the open bidirectional stream,
  • server receives the STOP request (the server is allowed to ignore any other requests received after the STOP) and closes the monitor,
  • server sends a STOP ACK equivalent,
  • client ends the connection,
  • server receives the end of stream (noop, the monitor process is already killed)

This is just one of the possible solutions, but the main idea is that IDE2 or any other CLI client might need this way of terminating the monitor.

Arduino CLI version

0.34.0-rc.1

Operating system

macOS

Operating system version

13.5

Additional context

No response

Issue checklist

  • I searched for previous requests in the issue tracker
  • I verified the feature was still missing when using the nightly build
  • My request contains all necessary details

Metadata

Metadata

Assignees

Labels

topic: codeRelated to content of the project itselfRelated to content of the project itselftopic: gRPCRelated to the gRPC interfaceRelated to the gRPC interfacetype: enhancementProposed improvementProposed improvement

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions

    Morty Proxy This is a proxified and sanitized view of the page, visit original site.