@@ -353,9 +353,10 @@ public String getCassandraVersion(){
353
353
* For time being, we don't allow local nor snapshot repairs.
354
354
*
355
355
* @return Repair command number, or 0 if nothing to repair
356
+ * @throws ReaperException
356
357
*/
357
358
public int triggerRepair (BigInteger beginToken , BigInteger endToken , String keyspace ,
358
- RepairParallelism repairParallelism , Collection <String > columnFamilies , boolean fullRepair ) {
359
+ RepairParallelism repairParallelism , Collection <String > columnFamilies , boolean fullRepair ) throws ReaperException {
359
360
checkNotNull (ssProxy , "Looks like the proxy is not connected" );
360
361
String cassandraVersion = getCassandraVersion ();
361
362
boolean canUseDatacenterAware = false ;
@@ -373,49 +374,51 @@ public int triggerRepair(BigInteger beginToken, BigInteger endToken, String keys
373
374
columnFamilies );
374
375
LOG .info (msg );
375
376
376
- if (!cassandraVersion .startsWith ("2.0" )){
377
- if (fullRepair ) {
378
- if (repairParallelism .equals (RepairParallelism .DATACENTER_AWARE )) {
379
- if (canUseDatacenterAware ) {
380
- return ((StorageServiceMBean ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (), keyspace ,
381
- repairParallelism .ordinal (), null , null , fullRepair ,
382
- columnFamilies
383
- .toArray (new String [columnFamilies .size ()]));
384
- } else {
385
- LOG .info ("Cannot use DATACENTER_AWARE repair policy for Cassandra cluster with version {},"
386
- + " falling back to SEQUENTIAL repair." ,
387
- cassandraVersion );
388
- repairParallelism = RepairParallelism .SEQUENTIAL ;
389
- }
390
- }
391
- boolean snapshotRepair = repairParallelism .equals (RepairParallelism .SEQUENTIAL );
392
- return ((StorageServiceMBean ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (), keyspace ,
393
- snapshotRepair , false , fullRepair ,
394
- columnFamilies .toArray (new String [columnFamilies .size ()]));
395
- }
396
- else {
397
- return ((StorageServiceMBean ) ssProxy ).forceRepairAsync (keyspace , Boolean .FALSE , Boolean .FALSE , Boolean .FALSE , fullRepair , columnFamilies .toArray (new String [columnFamilies .size ()]));
398
- }
399
- }
400
- else {
401
- // Cassandra 2.0 compatibility
402
- if (repairParallelism .equals (RepairParallelism .DATACENTER_AWARE )) {
403
- if (canUseDatacenterAware ) {
404
- return ((StorageServiceMBean20 ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (), keyspace ,
405
- repairParallelism .ordinal (), null , null ,
406
- columnFamilies
407
- .toArray (new String [columnFamilies .size ()]));
408
- } else {
409
- LOG .info ("Cannot use DATACENTER_AWARE repair policy for Cassandra cluster with version {},"
410
- + " falling back to SEQUENTIAL repair." ,
411
- cassandraVersion );
412
- repairParallelism = RepairParallelism .SEQUENTIAL ;
413
- }
414
- }
415
- boolean snapshotRepair = repairParallelism .equals (RepairParallelism .SEQUENTIAL );
416
- return ((StorageServiceMBean20 ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (), keyspace ,
417
- snapshotRepair , false ,
418
- columnFamilies .toArray (new String [columnFamilies .size ()]));
377
+ try {
378
+ if (!cassandraVersion .startsWith ("2.0" )) {
379
+ if (fullRepair ) {
380
+ if (repairParallelism .equals (RepairParallelism .DATACENTER_AWARE )) {
381
+ if (canUseDatacenterAware ) {
382
+ return ((StorageServiceMBean ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (),
383
+ keyspace , repairParallelism .ordinal (), cassandraVersion .startsWith ("2.2" )?new HashSet <String >():null , cassandraVersion .startsWith ("2.2" )?new HashSet <String >():null , fullRepair ,
384
+ columnFamilies .toArray (new String [columnFamilies .size ()]));
385
+ } else {
386
+ LOG .info ("Cannot use DATACENTER_AWARE repair policy for Cassandra cluster with version {},"
387
+ + " falling back to SEQUENTIAL repair." , cassandraVersion );
388
+ repairParallelism = RepairParallelism .SEQUENTIAL ;
389
+ }
390
+ }
391
+ boolean snapshotRepair = repairParallelism .equals (RepairParallelism .SEQUENTIAL );
392
+
393
+ return ((StorageServiceMBean ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (),
394
+ keyspace , snapshotRepair ? RepairParallelism .SEQUENTIAL .ordinal () : RepairParallelism .PARALLEL .ordinal (),
395
+ cassandraVersion .startsWith ("2.2" )?new HashSet <String >():null , cassandraVersion .startsWith ("2.2" )?new HashSet <String >():null , fullRepair ,
396
+ columnFamilies .toArray (new String [columnFamilies .size ()]));
397
+
398
+ } else {
399
+ return ((StorageServiceMBean ) ssProxy ).forceRepairAsync (keyspace , Boolean .FALSE , Boolean .FALSE , Boolean .FALSE ,
400
+ fullRepair , columnFamilies .toArray (new String [columnFamilies .size ()]));
401
+ }
402
+ } else {
403
+ // Cassandra 2.0 compatibility
404
+ if (repairParallelism .equals (RepairParallelism .DATACENTER_AWARE )) {
405
+ if (canUseDatacenterAware ) {
406
+ return ((StorageServiceMBean20 ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (),
407
+ keyspace , repairParallelism .ordinal (), null , null ,
408
+ columnFamilies .toArray (new String [columnFamilies .size ()]));
409
+ } else {
410
+ LOG .info ("Cannot use DATACENTER_AWARE repair policy for Cassandra cluster with version {},"
411
+ + " falling back to SEQUENTIAL repair." , cassandraVersion );
412
+ repairParallelism = RepairParallelism .SEQUENTIAL ;
413
+ }
414
+ }
415
+ boolean snapshotRepair = repairParallelism .equals (RepairParallelism .SEQUENTIAL );
416
+ return ((StorageServiceMBean20 ) ssProxy ).forceRepairRangeAsync (beginToken .toString (), endToken .toString (),
417
+ keyspace , snapshotRepair , false , columnFamilies .toArray (new String [columnFamilies .size ()]));
418
+ }
419
+ } catch (Exception e ) {
420
+ LOG .error ("Segment repair failed" , e );
421
+ throw new ReaperException (e );
419
422
}
420
423
421
424
}
0 commit comments