BrianGallew / cassandra_range_repair

python script to repair the primary range of a node in N discrete steps
MIT License
109 stars 47 forks source link

In cassandra 2.1, nodetool repair -st / -et doesn't pass the "column family" option #31

Closed Skunnyk closed 8 years ago

Skunnyk commented 8 years ago

On 2.0.x, I usually run repair with range_repair -k keyspace -c columnfamily, which run :

 nodetool repair -st (start token) -et (end token) $keyspace $columnfamily

The cassandra log was usually something like :

StorageService.java (line 2496) starting user-requested repair of range [(300005707039417874,300156110175996167]] for keyspace $keyspace and column families [$columnfamily]

In 2.1, nodetool doesn't pass the "column family" (cfnames) option (as seen in the code in NodeTool.java), in case of use of startToken/endToken, so you repair all tables in the range… : See https://git-wip-us.apache.org/repos/asf?p=cassandra.git;a=blob;f=src/java/org/apache/cassandra/tools/NodeTool.java;h=1d4a42024dd406f0c90fc6b99f599b4ab4a0948e;hb=refs/heads/cassandra-2.1#l1917

if (!startToken.isEmpty() || !endToken.isEmpty())
    probe.forceRepairRangeAsync(System.out, keyspace, parallelismDegree, dataCenters,hosts, startToken, endToken, !incrementalRepair);
else
    probe.forceRepairAsync(System.out, keyspace, parallelismDegree, dataCenters, hosts, primaryRange, !incrementalRepair, cfnames);

And the log :

StorageService.java:2846 - starting user-requested repair of range [(9187601611781349802,9189958813088431561]] for keyspace $keyspace and column families []

The "column family" is emtpy, so we are reparing all column families between theses 2 tokens.

Is it a bug (in cassandra ?), is it expected, or am I missing something ? :)

BrianGallew commented 8 years ago

That seems to be an exceptionally silly bug if it really works that way. I have never used 2.1 and so am unfamiliar with it.

On Fri, Jan 22, 2016 at 7:20 AM Skunnyk notifications@github.com wrote:

On 20x, I usually run repair with range_repair -k keyspace -c columnfamily, which run :

nodetool repair -st (start token) -et (end token) $keyspace $columnfamily

The cassandra log was usually something like :

StorageServicejava (line 2496) starting user-requested repair of range [(300005707039417874,300156110175996167]] for keyspace $keyspace and column families [$columnfamily]

In 21, nodetool doesn't pass the "column family" option (as seen in the code in NodeTooljava), in case of use of startToken/endToken, so you repair all tables in the range… : See https://git-wip-usapacheorg/repos/asf?p=cassandragit;a=blob;f=src/java/org/apache/cassandra/tools/NodeTooljava;h=1d4a42024dd406f0c90fc6b99f599b4ab4a0948e;hb=refs/heads/cassandra-21#l1917

if (!startTokenisEmpty() || !endTokenisEmpty()) probeforceRepairRangeAsync(Systemout, keyspace, parallelismDegree, dataCenters,hosts, startToken, endToken, !incrementalRepair); else probeforceRepairAsync(Systemout, keyspace, parallelismDegree, dataCenters, hosts, primaryRange, !incrementalRepair, cfnames);

And the log :

StorageServicejava:2846 - starting user-requested repair of range [(9187601611781349802,9189958813088431561]] for keyspace $keyspace and column families []

The "column family" is emtpy, so we are reparing all column families between theses 2 tokens

Is it a bug (in cassandra ?), is it expected, or am I missing something ? :)

— Reply to this email directly or view it on GitHub https://github.com/BrianGallew/cassandra_range_repair/issues/31.

arodrime commented 8 years ago

Reported in https://issues.apache.org/jira/browse/CASSANDRA-11986

Skunnyk commented 8 years ago

Fyi, it has been fixed in 2.1.16 (not yet released) : https://issues.apache.org/jira/browse/CASSANDRA-11866 .

Thank you :)