Details
-
Bug
-
Status: Resolved
-
Major
-
Resolution: Fixed
-
1.9.1
Description
In the mail list [1]. The user complain that it will see the same row twice if encountered any HBase exception.
The problem is here:
public T nextRecord(T reuse) throws IOException { if (resultScanner == null) { throw new IOException("No table result scanner provided!"); } try { Result res = resultScanner.next(); if (res != null) { scannedRows++; currentRow = res.getRow(); return mapResultToOutType(res); } } catch (Exception e) { resultScanner.close(); //workaround for timeout on scan LOG.warn("Error after scan of " + scannedRows + " rows. Retry with a new scanner...", e); scan.setStartRow(currentRow); resultScanner = table.getScanner(scan); Result res = resultScanner.next(); if (res != null) { scannedRows++; currentRow = res.getRow(); return mapResultToOutType(res); } } endReached = true; return null; }
We will set the startRow of the new scan to the currentRow which has been seen, that means the currentRow will be seen twice. Actually, we should replace the scan.setStartRow(currentRow) as scan.withStartRow(currentRow, false) , the false means exclude the currentRow.
Attachments
Issue Links
- links to