-
Notifications
You must be signed in to change notification settings - Fork 139
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
[Added] natsConnection_Reconnect #757
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## main #757 +/- ##
==========================================
+ Coverage 68.72% 68.75% +0.02%
==========================================
Files 39 39
Lines 15176 15189 +13
Branches 3137 3140 +3
==========================================
+ Hits 10430 10443 +13
+ Misses 1695 1692 -3
- Partials 3051 3054 +3 ☔ View full report in Codecov by Sentry. |
src/conn.c
Outdated
natsConn_Lock(nc); | ||
|
||
if (!initialConnect) | ||
forceReconnect = initialConnect || nc->forceReconnect; |
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.
Are you sure we need a change here? Meaning, if you were to just close the socket (not set the fd to invalid, just call natsSock_Close()
in the new reconnect call, this should trigger the normal reconnect process. I think there should be no need to change anything else. What made you need to change code here?
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.
The go
client disregards/overrides its equivalent of nc->opts->allowReconnect
when Disconnect()
is invoked, I posed a question about it in nats-io/nats.go#1624 (comment).
If we were to error out when not nc->opts->allowReconnect
- no changes would be needed, otherwise I need to override it (present implementation).
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.
In my view, we should return an error in natsConnection_Reconnect()
if the user explicitly disallowed reconnect with the natsOptions_SetAllowReconnect(opts, false)
. It does not make sense otherwise.
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.
Ok, but that also means that the user would not be able to reconnect only "manually", the connection will auto-reconnect on all relevant errors.
I'll make the change now.
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.
Sorry I don't understand. The original check here says to check for the current connection status so that we don't attempt to reconnect if we are in the middle of it. The check for !initialConnect
was likely introduced when adding the ability to connect asynchronously (that is, call natsConnection_Create()
(or Connect) while a server is not running does not fail, but attempt the reconnect right away.
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 just meant that one won't be able to make a connection with allowReconnect==false if so desired, but then forcefully Reconnect()
on it (say if they want to re-auth?). That was my understanding of the use-case.
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.
That's why maybe don't do the changes until it is agreed with the rest of the team. I did not mean to have you make all the changes if you have to put it back because this is how the team wants the feature to work.
If as a team it is agreed that it should override, then simply add to the doc that this function ignores the "allow reconnect" option (currently it says that it respects them all).
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.
(will not merge until verified)
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 the comment from the team feedback: ignore allowReconnect
altogether, just close the socket and let the client do what it does.
src/conn.c
Outdated
natsConn_Lock(nc); | ||
|
||
if (!initialConnect) | ||
forceReconnect = initialConnect || nc->forceReconnect; |
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.
In my view, we should return an error in natsConnection_Reconnect()
if the user explicitly disallowed reconnect with the natsOptions_SetAllowReconnect(opts, false)
. It does not make sense otherwise.
* perform standard reconnection process. | ||
* | ||
* This means that all subscriptions and consumers should be resubscribed and | ||
* their work resumed after successful reconnect where all reconnect options are |
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.
Well, actually not all reconnect options
if we consider that "allow reconnect" is a reconnect option ;-). So I would argue that either the Go client should be changed, or the spec modified to specifically cover cases of libraries have an option to disable reconnection (maybe not all do that).
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.
LGTM, but ping me for another review if the team decides to override the allow reconnect option.
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.
LGTM. (Unrelated: the kv cross domains test is taking 20+ secs now and since you repeat the tests 3 times for some runs, it starts to add up. May want to see if that can be optimized in the test or if this is just the result from the server updates)
@kozlovic yes, I knew it when I committed. I was hoping to soon get the word from @jnmoyne that the timeout can be shortened, but yes, let me at least make all the "long" tests run once. TBH I am yet to see any new flakes appear from the x3 change, so maybe it should be changed back to x1 for all, like it was before. |
Simplified version of #756