-
Notifications
You must be signed in to change notification settings - Fork 696
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
Refactor syncWithPrimary and replicaTryPartialResynchronization #1476
base: unstable
Are you sure you want to change the base?
Conversation
Signed-off-by: Nitai Caro <[email protected]>
Signed-off-by: Nitai Caro <[email protected]>
…case Signed-off-by: Nitai Caro <[email protected]>
Signed-off-by: Nitai Caro <[email protected]>
…and and replicaProcessPsyncReply Signed-off-by: Nitai Caro <[email protected]>
…ions Signed-off-by: Nitai Caro <[email protected]>
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## unstable #1476 +/- ##
============================================
- Coverage 70.86% 70.85% -0.02%
============================================
Files 119 119
Lines 64859 64882 +23
============================================
+ Hits 45963 45972 +9
- Misses 18896 18910 +14
|
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.
This kind of refactoring is really valuable for the long-term health of Valkey. It makes the codebase easier to understand, maintain, and improve, which ultimately helps us deliver better features faster. Thanks @nitaicaro and @naglera!
My main focus in this review is on the high level code structure, which looks great to me. That said, the use of goto in syncWithPrimary
stands out. Let's aim to eliminate all goto statements from that function. I'll take another look and provide more detailed feedback once that's addressed.
/** | ||
* Handles the initial step of the partial resynchronization process by |
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.
nit - I don't remember we start the comment block with /**
?
/** | |
* Handles the initial step of the partial resynchronization process by | |
/* Handles the initial step of the partial resynchronization process by |
* step is to call replicaProcessPsyncReply(). | ||
*/ |
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.
nit - I believe this is more common.
* step is to call replicaProcessPsyncReply(). | |
*/ | |
* step is to call replicaProcessPsyncReply(). */ |
|
||
|
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 personally like using double empty lines between functions but the convention is single empty link I think
@@ -3738,7 +3763,7 @@ void syncWithPrimary(connection *conn) { | |||
server.repl_transfer_read = 0; | |||
server.repl_transfer_last_fsync_off = 0; | |||
server.repl_transfer_lastio = server.unixtime; | |||
return; | |||
goto ok; | |||
|
|||
no_response_error: /* Handle receiveSynchronousResponse() error when primary has no reply */ |
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.
These goto
labels (no_response_error
, error
, write_error
, and ok
) have really gone too far now. Let's consolidate them into a single syncWithPrimaryHandleError
function. I am hopeful that we can remove all the goto
s in this function.
In continuation to #945
syncWithPrimary:
replicaTryPartialResynchronization:
This function was performing two different jobs based on the value of the read_reply argument -
This change simplifies the logic by clearly separating the writing and reading stages of the PSYNC process.
The PR was split into individual commits for easy review.