Handle failed psync log when there is no replication backlog (#2886)

This crash was introduced in #2877, we will crash when there is no
replication backlog.

Signed-off-by: Binbin <binloveplay1314@qq.com>
This commit is contained in:
Binbin 2025-12-01 10:20:32 +08:00 committed by GitHub
parent a087cc1132
commit 4a0e20bbc9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 11 additions and 5 deletions

View File

@ -862,11 +862,17 @@ int primaryTryPartialResynchronization(client *c, long long psync_offset) {
/* We still have the data our replica is asking for? */
if (!server.repl_backlog || psync_offset < server.repl_backlog->offset ||
psync_offset > (server.repl_backlog->offset + server.repl_backlog->histlen)) {
if (!server.repl_backlog) {
serverLog(LL_NOTICE,
"Unable to partial resync with replica %s for lack of backlog (Replica request was: %s:%lld).",
replicationGetReplicaName(c), primary_replid, psync_offset);
} else {
serverLog(LL_NOTICE,
"Unable to partial resync with replica %s for lack of backlog (Replica request was %s:%lld, "
"and I can only reply with the range [%lld, %lld]).",
replicationGetReplicaName(c), primary_replid, psync_offset, server.repl_backlog->offset,
server.repl_backlog->offset + server.repl_backlog->histlen);
}
if (psync_offset > server.primary_repl_offset) {
serverLog(LL_WARNING,
"Warning: replica %s tried to PSYNC with an offset (%lld) that is greater than "