[ https://issues.apache.org/jira/browse/CASSANDRA-17477?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17635994#comment-17635994 ]
n.v.harikrishna commented on CASSANDRA-17477: --------------------------------------------- Sorry for taking so long to given an update. As per the code here [https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/service/ActiveRepairService.java#L585] {noformat} /** * we only want to set repairedAt for incremental repairs including all replicas for a token range. For non-global * incremental repairs, forced incremental repairs, and full repairs, the UNREPAIRED_SSTABLE value will prevent * sstables from being promoted to repaired or preserve the repairedAt/pendingRepair values, respectively. */ static long getRepairedAt(RepairOption options, boolean force) { // we only want to set repairedAt for incremental repairs including all replicas for a token range. For non-global incremental repairs, full repairs, the UNREPAIRED_SSTABLE value will prevent // sstables from being promoted to repaired or preserve the repairedAt/pendingRepair values, respectively. For forced repairs, repairedAt time is only set to UNREPAIRED_SSTABLE if we actually // end up skipping replicas if (options.isIncremental() && options.isGlobal() && !force) { return currentTimeMillis(); } else { return ActiveRepairService.UNREPAIRED_SSTABLE; } }{noformat} and RepairOption.isGlobal() {noformat} public boolean isGlobal() { return dataCenters.isEmpty() && hosts.isEmpty(); } {noformat} it is behaving as expected as the data centre is explicitly specified in the first case. > -dc option for repair, prevents incremental repairs > --------------------------------------------------- > > Key: CASSANDRA-17477 > URL: https://issues.apache.org/jira/browse/CASSANDRA-17477 > Project: Cassandra > Issue Type: Bug > Components: Consistency/Repair > Reporter: Pedro Gordo > Assignee: n.v.harikrishna > Priority: Normal > Fix For: 4.0.x, 4.x > > > By default running `{*}nodetool repair{*}` should trigger incremental > repairs, but this does not happen if you use the `{*}-dc{*}` flag, even > though the repair summary says `{*}incremental: true{*}`. > You can replicate the issue with the following commands: > {code:bash} > ccm create test-incremental-repairs -v 4.0.1 -n 3 -s > ccm node1 cqlsh -e "CREATE KEYSPACE keyspace1 WITH replication = {'class': > 'NetworkTopologyStrategy', 'datacenter1': 2 };" > ccm stress write > ccm node1 nodetool "repair keyspace1 standard1 -dc datacenter1" > find ~/.ccm/test-incremental-repairs/*/data0/keyspace1/standard1* -name > *Data.db -exec <PATH_TO_TOOLS>/bin/sstablemetadata {} \; | grep Repaired > ccm node1 nodetool "repair keyspace1 standard1" > find ~/.ccm/test-incremental-repairs/*/data0/keyspace1/standard1* -name > *Data.db -exec <PATH_TO_TOOLS>/bin/sstablemetadata {} \; | grep Repaired > {code} > You'll notice that the output for the first `{*}find{*}` command will all be > `{*}Repaired at: 0{*}`, but the second `{*}find{*}` command will give you > results like `{*}Repaired at: 1648044754464 (03/23/2022 14:12:34){*}`. > At the same time, both `{*}nodetool repair{*}` commands will output like the > following: > {code:bash} > [2022-03-23 15:15:52,500] Starting repair command #2 > (20f12190-aabc-11ec-a3d4-e9e5a941ef6c), repairing keyspace keyspace1 with > repair options (parallelism: parallel, primary range: false, incremental: > true, job threads: 1, ColumnFamilies: [standard1], dataCenters: > [datacenter1], hosts: [], previewKind: NONE, # of ranges: 2, pull repair: > false, force repair: false, optimise streams: false, ignore unreplicated > keyspaces: false) > {code} > Indicating `{*}incremental: true{*}` for both of them. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org