In the current implementation, the index read repair deletes only the cells that are returned by the scan initiated by the Phoenix client instead of deleting all the cells of an invalid unverified row.
The read repair deletes cells (i.e., a specific version of a row) only when if an index row is overwritten but the corresponding data table row overwrite fails. This leaves the the index row in the unverified status. Then the read repair detects this unverified row when it is scanned and needs to delete the cells of this unverified version of the row. However, the read repair (i.e., GlobalIndexChecker) puts the delete markers for only the cells returned by the scan. If the scan does not return all the cells of the row, then only a subset of the cells of the row will be deleted. The remaining cells will not be removed and can be returned by the scans initiated later.