-
Notifications
You must be signed in to change notification settings - Fork 56
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
base: dev
Are you sure you want to change the base?
connection: emit networkError in all cases #683
Conversation
There was a problem hiding this 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.
emit networkError(job->errorString(), job->rawDataSample(), | ||
job->maxRetries(), -1); | ||
else | ||
if (job->error() != BaseJob::StatusCode::NetworkError) |
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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
?
There was a problem hiding this comment.
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, (it's actually public, so point 1 below is done). So what I suggest is:setMaxRetries()
is protected but there's actually no particular reason it should be this way
- 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. - Call
job->setMaxRetries()
on the job object returned bycallApi()
. This is safe to do at any point in the job's lifecycle, no need to delay the job execution. - Delete emission of
networkError()
(you already did it here).
4a74de6
to
dcae1dc
Compare
dcae1dc
to
01ebbc3
Compare
There was a problem hiding this 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()); |
There was a problem hiding this comment.
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) |
There was a problem hiding this comment.
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, (it's actually public, so point 1 below is done). So what I suggest is:setMaxRetries()
is protected but there's actually no particular reason it should be this way
- 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. - Call
job->setMaxRetries()
on the job object returned bycallApi()
. This is safe to do at any point in the job's lifecycle, no need to delay the job execution. - Delete emission of
networkError()
(you already did it here).
Things brings networkError on parity with requestFailed(), which is emitted for every job that goes through callApi()