-
Notifications
You must be signed in to change notification settings - Fork 438
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
feat: add databaseMirroringPartner
event handler
#1671
base: master
Are you sure you want to change the base?
feat: add databaseMirroringPartner
event handler
#1671
Conversation
} | ||
|
||
onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) { | ||
// Do nothing | ||
} | ||
} |
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 moved this handler to be right below the onDatabaseChange
event handler for better ordering and to keep the event next to all of the other ENVCHANGE
events.
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1671 +/- ##
==========================================
- Coverage 86.05% 78.78% -7.28%
==========================================
Files 90 90
Lines 4877 4879 +2
Branches 918 918
==========================================
- Hits 4197 3844 -353
- Misses 675 737 +62
- Partials 5 298 +293 ☔ View full report in Codecov by Sentry. |
src/token/handler.ts
Outdated
onDatabaseMirroringPartner(token: DatabaseMirroringPartnerEnvChangeToken) { | ||
this.connection.emit('databaseMirroringPartner', token.newValue); | ||
} | ||
|
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.
Does this mean that the database mirroring partner event is sent by the server when the initial SQL setup query is sent by tedious
?
This is... surprising. 🤔
The MS-TDS specification states that:
Type 13 (Database Mirroring) is sent in response to a LOGIN7 message whenever connection is requested to a database that it is being served as primary in real-time log shipping. The ENVCHANGE stream reflects the name of the partner node of the database that is being log shipped.
I'm wondering if there's some other issue in the sequencing of how we handle events and which state the handling happens in. Because based just on the specification, this event should not be send by the server in a response to the initial sql query we send.
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.
@arthurschreiber You're actually 100% correct, I mistakenly had added the event emitters in each of them during debugging but hadn't removed them to determine if it was a specific handler or not.
I've removed the unnecessary event handler from the InitialSqlTokenHandler
class and verified that the event is still handled correctly.
Thanks!
This PR is to fix #1669, where the library throws an unhandled exception if it encounters an
ENVCHANGE
event of typeDATABASE_MIRRORING_PARTNER
.This behavior isn't explicitly documented, but there have been a few issues brought up regarding this functionality in the past, and it has been stated that tedious does not plan to support failover partners. While that may be the case, this event being emitted by SQL Server is causing Tedious to crash completely rather than simply ignoring it as you would expect.
The changes in this PR are to create the
databaseMirroringPartner
event emitter and register the necessary handler methods in the associated token handler classes, to prevent the default behavior of throwing anUnexpected token
error.To clarify, this does not implement mirroring functionality or anything of the sort, it simply updates the default behavior to allow the event to pass through and be ignored, rather than unnecessarily throwing an unhandled exception.