Details
-
Bug
-
Status: Resolved
-
Low
-
Resolution: Fixed
-
Low
Description
The error progress message in RepairRunnable is not compliant with the LegacyJMXProgressSupport class, which uses a regex to match on the text of a progress event. Therefore, actual failures slip through as successes if using legacy JMX for repairs.
In RepairRunnable
protected void fireErrorAndComplete(String tag, int progressCount, int totalProgress, String message) { fireProgressEvent(tag, new ProgressEvent(ProgressEventType.ERROR, progressCount, totalProgress, message)); fireProgressEvent(tag, new ProgressEvent(ProgressEventType.COMPLETE, progressCount, totalProgress, String.format("Repair command #%d finished with error", cmd))); }
Note the "Repair command #%d finished with error"
See https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/repair/RepairRunnable.java#L109
In LegacyJMXProgressSupport:
protected static final Pattern SESSION_FAILED_MATCHER = Pattern.compile("Repair session .* for range .* failed with error .*"); protected static final Pattern SESSION_SUCCESS_MATCHER = Pattern.compile("Repair session .* for range .* finished");
Legacy JMX support was introduced for CASSANDRA-11430 (version 2.2.6) and the bug was introduced as part of CASSANDRA-12279 (version 2.2.8).
Attachments
Attachments
Issue Links
- is broken by
-
CASSANDRA-12279 nodetool repair hangs on non-existant table
- Resolved
- is related to
-
CASSANDRA-11530 Remove deprecated repair method in 4.0
- Resolved
- relates to
-
CASSANDRA-11430 Add legacy notifications backward-support on deprecated repair methods
- Resolved
-
CASSANDRA-8901 Generalize progress reporting between tools and a server
- Resolved
- links to