feat(plugin-oracle): show login handshake phase in connection-dropped diagnostic (#1746)#1763
Conversation
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ac659eb755
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| case "uncleanShutdown": | ||
| return .authConnectionDropped | ||
| case "serverVersionNotSupported": | ||
| switch OracleConnectErrorClassifier.classify(error.code.description) { |
There was a problem hiding this comment.
Avoid depending on an unversioned PluginKit symbol
This makes the downloadable Oracle plugin link against OracleConnectErrorClassifier, a symbol that does not exist in already-released TablePro apps whose currentPluginKitVersion is still 18. Because the Oracle plugin Info.plist still declares TableProPluginKitVersion 18 and has no TableProMinAppVersion, local zip/bundle installs are accepted by validateBundleVersions in those older apps, then the bundle can fail to load with an unresolved symbol. Keep this classifier in the Oracle plugin or add an app/version gate for the plugin binary when consuming a new PluginKit API.
Useful? React with 👍 / 👎.
Why
The #1746 crash is fixed, but the reporter (Oracle 11.2.0.4, no encryption) still can't connect: TablePro shows "the server closed the connection during the login handshake" (
.authConnectionDropped, from oracle-nio'suncleanShutdown). There's no information about where in the handshake the server dropped us, so the report is opaque.The fork already supports 11g at the version/auth layer (
TNS_VERSION_MIN_ACCEPTED = 313, 10G/11G/12C verifiers), so this is not the upstream "12.1 floor" case. The drop is somewhere in negotiation/auth, and oracle-nio already records the phase inOracleSQLError.handshakePhase(connect/advancedNegotiation/protocolNegotiation/dataTypeNegotiation/preAuthentication/authentication). The plugin was discarding it.Note: the pcap attached to the issue is an SQLcl session, not TablePro, so it doesn't show the failure. This change captures the missing signal directly from the app.
What
Instrument-only, no fork change:
DiagnosticEntry(same pattern as the existing "Verifier flag" entry), plus a suggested action to file an issue with the phase.OracleConnectErrorClassifierin TableProPluginKit (mirrorsOracleChannelFatalCode) so it's unit-testable instead of dead-gated.Once the reporter comes back with the phase:
dataTypeNegotiationpoints at the uncleared Oracle 23ai capability bits inadjustForServerCompileCapabilities;authenticationpoints at a verifier issue;connectat TLS/listener.Notes
plugin-oracle-v*release.OracleConnectErrorClassifieris a new public PluginKit type (additive ABI, no version bump).Tests
OracleConnectErrorClassifierTests:uncleanShutdown→ dropped,serverVersionNotSupported→ version,unsupportedVerifierType(...)→ verifier (flag preserved), other → generic.swiftlint lint --strictclean on changed files.https://claude.ai/code/session_01NVomHPErfCr8FWRVywmyVP