org.apache.cassandra.service

## Class ActiveRepairService.ParentRepairSession

- java.lang.Object
- - org.apache.cassandra.service.ActiveRepairService.ParentRepairSession

Enclosing class:
  ActiveRepairService

    public static class ActiveRepairService.ParentRepairSession
    extends java.lang.Object

We keep a ParentRepairSession around for the duration of the entire repair, for example, on a 256 token vnode rf=3 cluster we would have 768 RepairSession but only one ParentRepairSession. We use the PRS to avoid anticompacting the sstables 768 times, instead we take all repaired ranges at the end of the repair and anticompact once. We do an optimistic marking of sstables - when we start an incremental repair we mark all unrepaired sstables as repairing (@see markSSTablesRepairing), then while the repair is ongoing compactions might remove those sstables, and when it is time for anticompaction we will only anticompact the sstables that are still on disk. Note that validation and streaming do not care about which sstables we have marked as repairing - they operate on all unrepaired sstables (if it is incremental), otherwise we would not get a correct repair.

### Field Summary

Fields
`java.net.InetAddress` `coordinator`
`boolean` `isGlobal`
`boolean` `isIncremental`
`long` `repairedAt`
`java.util.Map<java.util.UUID,java.util.Set<java.lang.String>>` `sstableMap`

### Constructor Summary

Constructors
Constructor and Description
`ParentRepairSession(java.net.InetAddress coordinator, java.util.List<ColumnFamilyStore> columnFamilyStores, java.util.Collection<Range<Token>> ranges, boolean isIncremental, long repairedAt, boolean isGlobal)`

### Method Summary

All Methods Instance Methods Concrete Methods

`Refs<SSTableReader>`

`getActiveRepairedSSTableRefsForAntiCompaction(java.util.UUID cfId, java.util.UUID parentSessionId)`
Get the still active sstables we should run anticompaction on note that validation and streaming do not call this method - they have to work on the actual active sstables on the node, we only call this to know which sstables are still there that were there when we started the repair

`long` `getRepairedAt()`
`void` `markSSTablesRepairing(java.util.UUID cfId, java.util.UUID parentSessionId)` Mark sstables repairing - either all sstables or only the unrepaired ones depending on whether this is an incremental or full repair
`void` `maybeSnapshot(java.util.UUID cfId, java.util.UUID parentSessionId)`
`java.lang.String` `toString()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Field Detail

#### sstableMap

    public final java.util.Map<java.util.UUID,java.util.Set<java.lang.String>> sstableMap

#### isIncremental

    public final boolean isIncremental

#### isGlobal

    public final boolean isGlobal

#### repairedAt

    public final long repairedAt

#### coordinator

    public final java.net.InetAddress coordinator

### Constructor Detail

#### ParentRepairSession

    public ParentRepairSession(java.net.InetAddress coordinator,
                               java.util.List<ColumnFamilyStore> columnFamilyStores,
                               java.util.Collection<Range<Token>> ranges,
                               boolean isIncremental,
                               long repairedAt,
                               boolean isGlobal)

### Method Detail

#### markSSTablesRepairing

    public void markSSTablesRepairing(java.util.UUID cfId,
                                      java.util.UUID parentSessionId)

Mark sstables repairing - either all sstables or only the unrepaired ones depending on whether this is an incremental or full repair

Parameters:
  `cfId` - the column family
  `parentSessionId` - the parent repair session id, used to make sure we don't start multiple repairs over the same sstables

#### getActiveRepairedSSTableRefsForAntiCompaction

    public Refs<SSTableReader> getActiveRepairedSSTableRefsForAntiCompaction(java.util.UUID cfId,
                                                                             java.util.UUID parentSessionId)

Get the still active sstables we should run anticompaction on note that validation and streaming do not call this method - they have to work on the actual active sstables on the node, we only call this to know which sstables are still there that were there when we started the repair

Parameters:
  `cfId` -
  `parentSessionId` - for checking if there exists a snapshot for this repair
Returns:

#### maybeSnapshot

    public void maybeSnapshot(java.util.UUID cfId,
                              java.util.UUID parentSessionId)

#### getRepairedAt

    public long getRepairedAt()

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`