[BugFix] Fix SQL digest inconsistency between Follower and Leader (backport #67227) #67261
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Why I'm doing:
When the same SQL query is executed on Follower (forwarded to Leader) vs Leader (local execution), the
Digestfield in audit logs are inconsistent.Root Cause:
Analyzer.analyze()phase normalizes AST by filling catalog/db information into TableName and SlotRef objectsExample:
This inconsistency breaks digest-based query tracking, monitoring, and analysis.
What I'm doing:
Solution: Leader computes digest after analysis and returns it to Follower via Thrift RPC
Changes:
Thrift Protocol (
FrontendService.thrift)sql_digestfield toTMasterOpResultstructureLeader Side (
ConnectProcessor.java)doProxyExecute(): Compute SQL digest after AST analysis and set it inresult.sql_digestFollower Side (
ConnectProcessor.java)auditAfterExec()to accept optionaldigestFromLeaderparameterhandleQuery()andhandleExecute(): Extractsql_digestfrom Leader's resultFlow:
Fixes #issue
What type of PR is this:
Does this PR entail a change in behavior?
If yes, please specify the type of change:
Checklist:
Bugfix cherry-pick branch check:
Note
Ensures consistent
Digestin audit logs across leader/follower executions.sql_digesttoTMasterOpResultinFrontendService.thrift.doProxyExecute(), compute digest post-analysis (computeStatementDigest) and setresult.sql_digest.auditAfterExec()to acceptdigestFromLeader; inhandleQuery()andhandleExecute(), extractsql_digestfrom leader result and pass to audit. Falls back to local digest when not forwarded or missing.Written by Cursor Bugbot for commit bf9c562. This will update automatically on new commits. Configure here.
This is an automatic backport of pull request #67227 done by [Mergify](https://mergify.com).