-
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
Changes from 9 commits
d58353b
46236d8
a5e99d3
e5a31f3
8227d5f
27fd5df
6ac8e67
5d2c27c
e9ee20d
e567e2e
5884592
c1fcc61
d3ef836
e85d0b7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4033,6 +4033,18 @@ stanMsg_Destroy(stanMsg *msg); | |
NATS_EXTERN natsStatus | ||
natsConnection_Connect(natsConnection **nc, natsOptions *options); | ||
|
||
/** \brief Causes the client to drop the connection to the current server and | ||
* 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 commentThe reason will be displayed to describe this comment to others. Learn more. Well, actually not |
||
* respected. | ||
* | ||
* @param nc the pointer to the #natsConnection object. | ||
*/ | ||
natsStatus | ||
natsConnection_Reconnect(natsConnection *nc); | ||
|
||
/** \brief Process a read event when using external event loop. | ||
* | ||
* When using an external event loop, and the callback indicating 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.
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 ofnc->opts->allowReconnect
whenDisconnect()
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 thenatsOptions_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, callnatsConnection_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.