Skip to content

surface rather than hide error handling #135

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

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

maxenglander
Copy link
Collaborator

@maxenglander maxenglander commented Apr 3, 2025

Surface rather than hide errors that are encountered throughout the sync process. Only update table cursor position after successfully flushing records to Airbyte.

This is a lot, so splitting across multiple PRs:

  1. This PR: split up sync() a bit to make subsequent refactoring a bit easier.
  2. surface errors for flushing and recording #136
  3. QueryToResults error handling #137

Once all PRs are approved, I'll merge them from the bottom up, and then merge this PR into main.

Copy link
Contributor

@Copilot Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR refactors the sync process to expose errors more clearly and simplify error handling during the VStream processing. Key changes include:

  • Splitting up the sync() function parameters for better readability.
  • Introducing a local logf closure for consistent logging.
  • Replacing panic calls in unexpected event cases with error returns.

switch {
case ok && s.Code() == codes.DeadlineExceeded:
// No next VGTID found within deadline.
logf(LOGLEVEL_ERROR, "no new VGTID found before deadline exceeded: %v", err)
Copy link
Preview

Copilot AI Apr 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The DeadlineExceeded condition is likely an expected scenario; consider using an informational log level instead of LOGLEVEL_ERROR.

Suggested change
logf(LOGLEVEL_ERROR, "no new VGTID found before deadline exceeded: %v", err)
logf(LOGLEVEL_INFO, "no new VGTID found before deadline exceeded: %v", err)

Copilot is powered by AI, so mistakes are possible. Review output carefully before use.

logf(LOGLEVEL_ERROR, "no new VGTID found before deadline exceeded: %v", err)
case errors.Is(err, io.EOF):
// EOF is an acceptable error indicating VStream is finished.
logf(LOGLEVEL_ERROR, "encountered EOF, possibly indicating end of VStream")
Copy link
Preview

Copilot AI Apr 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

EOF is typically an acceptable signal indicating the end of the stream; consider logging it at an informational level rather than as an error.

Suggested change
logf(LOGLEVEL_ERROR, "encountered EOF, possibly indicating end of VStream")
logf(LOGLEVEL_INFO, "encountered EOF, possibly indicating end of VStream")

Copilot is powered by AI, so mistakes are possible. Review output carefully before use.

Copy link
Contributor

@nickvanw nickvanw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I skipped some of the parts that are copy/pasted, but this looks good to me at first read

@@ -306,17 +317,17 @@ func (p PlanetScaleEdgeDatabase) sync(ctx context.Context, syncMode string, tc *

isFullSync := syncMode == "full"
vtgateReq := buildVStreamRequest(tabletType, s.Name, tc.Shard, tc.Keyspace, tc.Position, tc.LastKnownPk)
p.Logger.Log(LOGLEVEL_INFO, fmt.Sprintf("%sRequesting VStream with %+v", preamble, vtgateReq))
logf(LOGLEVEL_INFO, "Requesting VStream with %+v", vtgateReq)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This logging change is a very welcome change

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants