Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

connection: emit networkError in all cases #683

Open
wants to merge 1 commit into
base: dev
Choose a base branch
from

Conversation

tdfischer
Copy link

Things brings networkError on parity with requestFailed(), which is emitted for every job that goes through callApi()

Copy link
Member

@KitsuneRal KitsuneRal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the direction but the devil's in the details.

Quotient/connection.h Outdated Show resolved Hide resolved
emit networkError(job->errorString(), job->rawDataSample(),
job->maxRetries(), -1);
else
if (job->error() != BaseJob::StatusCode::NetworkError)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're effectively reverting e9c3d37 here, which reopens #614. networkError() is emitted here with -1 for the time until the next attempt to signify that the job has run out of attempts (probably it should be documented). Quaternion relies on this to retry assumeIdentity() indefinitely; but now that I think of it, it's probably reasonable to just make assumeIdentity() try indefinitely instead, the same way SyncJob does. In any case, that piece has to be either reverted, or overhauled.

Copy link
Author

@tdfischer tdfischer Jul 18, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When you mean "that piece", are you referring to the magic -1 handling? Would you suggest modifying assumeIdentity() to have that behavior should happen here in quotient or in quaternon? Or would it be better done by just adding setMaxRetries(std::numeric_limits<int>::max()); to GetTokenOwnerJob?

Copy link
Member

@KitsuneRal KitsuneRal Jul 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean the way assumeIdentity() deals with network errors. I think it would be ideal to call setMaxRetries() on this particular job instance.

GetTokenOwnerJob itself is generated from the API definition, you can't change it directly - and actually, you shouldn't because it would affect all respective requests, including those from the client code. As of now, setMaxRetries() is protected but there's actually no particular reason it should be this way (it's actually public, so point 1 below is done). So what I suggest is:

  1. Make BaseJob::setMaxRetries() public. As far as I can tell, it doesn't even break the ABI (and definitely doesn't break the API) compatibility.
  2. Call job->setMaxRetries() on the job object returned by callApi(). This is safe to do at any point in the job's lifecycle, no need to delay the job execution.
  3. Delete emission of networkError() (you already did it here).

@KitsuneRal KitsuneRal added the enhancement A feature or change request for the library label Jul 18, 2023
@tdfischer tdfischer force-pushed the tdfischer/bugfix/retry-signals branch from 4a74de6 to dcae1dc Compare July 18, 2023 09:21
@tdfischer tdfischer force-pushed the tdfischer/bugfix/retry-signals branch from dcae1dc to 01ebbc3 Compare July 18, 2023 09:45
@tdfischer tdfischer requested a review from KitsuneRal July 19, 2023 20:21
Copy link
Member

@KitsuneRal KitsuneRal left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See below. Also: you accidentally added the temporary .swp file to the PR, please remove it.

@@ -17,4 +17,5 @@ GetTokenOwnerJob::GetTokenOwnerJob()
makePath("/_matrix/client/v3", "/account/whoami"))
{
addExpectedKey("user_id");
setMaxRetries(std::numeric_limits<int>::max());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is generated code (look in CONTRIBUTING.md and search csapi in it) - this line will be overwritten the next time I run the generator (which can be almost any time).

emit networkError(job->errorString(), job->rawDataSample(),
job->maxRetries(), -1);
else
if (job->error() != BaseJob::StatusCode::NetworkError)
Copy link
Member

@KitsuneRal KitsuneRal Jul 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I mean the way assumeIdentity() deals with network errors. I think it would be ideal to call setMaxRetries() on this particular job instance.

GetTokenOwnerJob itself is generated from the API definition, you can't change it directly - and actually, you shouldn't because it would affect all respective requests, including those from the client code. As of now, setMaxRetries() is protected but there's actually no particular reason it should be this way (it's actually public, so point 1 below is done). So what I suggest is:

  1. Make BaseJob::setMaxRetries() public. As far as I can tell, it doesn't even break the ABI (and definitely doesn't break the API) compatibility.
  2. Call job->setMaxRetries() on the job object returned by callApi(). This is safe to do at any point in the job's lifecycle, no need to delay the job execution.
  3. Delete emission of networkError() (you already did it here).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement A feature or change request for the library
Projects
Status: 0.9 - To Do
Development

Successfully merging this pull request may close these issues.

2 participants