{"record":{"id":"a84a4a5956a3e7d0","repo":"apache/cassandra","slug":"sync-failed-between-s-and-s","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/AsymmetricRemoteSyncTask.java","lineNumber":62,"sourceCode":"\n    public void startSync()\n    {\n        InetAddressAndPort local = ctx.broadcastAddressAndPort();\n        SyncRequest request = new SyncRequest(desc, local, nodePair.coordinator, nodePair.peer, rangesToSync, previewKind, true);\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        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    }\n\n    @Override\n    public String toString()\n    {\n        return \"AsymmetricRemoteSyncTask{\" +\n               \"rangesToSync=\" + rangesToSync +\n               \", nodePair=\" + nodePair +\n               '}';\n    }\n}\n","sourceCodeStart":44,"sourceCodeEnd":75,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/repair/AsymmetricRemoteSyncTask.java#L44-L75","documentation":"An asymmetric remote sync task (used in preview/ir-synchronous repairs where streaming is one-directional) failed between the coordinator node and its peer. The task is failed with a RepairException carrying this message, which aborts the surrounding repair session.","triggerScenarios":"syncComplete is invoked with success=false after the remote sync/streaming request to nodePair.peer completed unsuccessfully (remote node error, stream failure, timeout).","commonSituations":"Node down or restarting mid-repair, streaming failures due to disk space or permissions, network partitions, or timeouts while transferring stream summaries between replicas.","solutions":["Check the peer node's logs for the underlying streaming/stream-plan failure.","Re-run the repair once both nodes are healthy.","Verify disk space, permissions, and network connectivity between nodePair.coordinator and nodePair.peer.","Increase repair session/streaming timeouts if the data volume is large.","Use nodetool netstats and check for failed streams to pinpoint the failure."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"// Pre-check before repair:\n// nodetool status  (all nodes UP/UN)\n// nodetool netstats (no failed/stuck streams)\n// df -h on both endpoints (sufficient disk)","typeGuard":null,"tryCatchPattern":"try {\n    repairAsync(keyspace);\n} catch (RuntimeException e) {\n    if (e.getMessage().contains(\"Sync failed between\")) {\n        // check peer health/logs, then retry repair\n    }\n}","preventionTips":["Verify node health before scheduling repairs.","Ensure ample disk space on all replicas.","Fix streaming timeouts for large datasets.","Automate repair retries after transient stream failures."],"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"}