{"record":{"id":"cc26f2a3d7a76ec1","repo":"apache/cassandra","slug":"sync-failed-between-s-and-s-cc26f2","errorCode":null,"errorMessage":"Sync failed between %s and %s","messagePattern":"Sync failed between (.+?) and (.+?)","errorType":"exception","errorClass":"RepairException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/repair/SymmetricRemoteSyncTask.java","lineNumber":71,"sourceCode":"    {\n        InetAddressAndPort local = ctx.broadcastAddressAndPort();\n        SyncRequest request = new SyncRequest(desc, local, nodePair.coordinator, nodePair.peer, rangesToSync, previewKind, false);\n        Preconditions.checkArgument(nodePair.coordinator.equals(request.src));\n        String message = String.format(\"Forwarding streaming repair of %d ranges to %s (to be streamed with %s)\", request.ranges.size(), request.src, request.dst);\n        logger.info(\"{} {}\", previewKind.logPrefix(desc.sessionId), message);\n        Tracing.traceRepair(message);\n        sendRequest(request, request.src);\n    }\n\n    public void syncComplete(boolean success, List<SessionSummary> summaries)\n    {\n        if (success)\n        {\n            trySuccess(stat.withSummaries(summaries));\n        }\n        else\n        {\n            tryFailure(RepairException.warn(desc, previewKind, String.format(\"Sync failed between %s and %s\", nodePair.coordinator, nodePair.peer)));\n        }\n        finished();\n    }\n\n    @Override\n    public String toString()\n    {\n        return \"SymmetricRemoteSyncTask{\" +\n               \"rangesToSync=\" + rangesToSync +\n               \", nodePair=\" + nodePair +\n               '}';\n    }\n}\n","sourceCodeStart":53,"sourceCodeEnd":85,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/SymmetricRemoteSyncTask.java#L53-L85","documentation":"A symmetric remote sync task (both replicas must stream to each other) failed between the coordinator and peer. tryFailure fails the task with a RepairException containing this message and the surrounding repair session terminates.","triggerScenarios":"syncComplete invoked with success=false when the bidirectional sync/stream between nodePair.coordinator and nodePair.peer did not finish successfully.","commonSituations":"Streaming failures from full disks, node crashes mid-stream, network timeouts, or a replica failing to respond to SyncRequest during standard (non-preview) repair.","solutions":["Inspect peer logs for streaming exceptions (StreamSession, StreamPlan).","Confirm disk space and I/O health on both endpoints.","Re-run nodetool repair after fixing the node; streams resume from scratch per session.","Check network throughput/latency between nodes; increase streaming_socket_timeout_in_ms if streams time out on large datasets.","Use nodetool netstats to see stuck or failed stream sessions."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-flight: nodetool status (all UP), nodetool netstats (no failed streams),\n// df -h both endpoints, check streaming_socket_timeout_in_ms","typeGuard":null,"tryCatchPattern":"try {\n    repairAsync(keyspace);\n} catch (RuntimeException e) {\n    if (e.getMessage().contains(\"Sync failed between\")) {\n        // inspect peer logs, verify disk/network, retry repair\n    }\n}","preventionTips":["Monitor disk usage and network health on all replicas.","Tune streaming timeouts for large repairs.","Keep repair sessions small enough to retry cheaply.","Automatically retry repair after transient streaming errors."],"tags":["repair","streaming","cassandra"],"backgroundTag":"repair-sync-failed","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}