String msg = "Results sent from server=" + noOfResults + ". But 
only got " + i                + " results completely at client. Resetting the 
scanner to scan again.";              LOG.error(msg);              throw new 
DoNotRetryIOException(msg);            }          } catch (IOException ioe) {   
         // We are getting IOE while retrieving the cells for Results.          
  // We have to scan for the same results again. Throwing DNRIOE as a client 
retry on the            // same scanner will result in 
OutOfOrderScannerNextException            LOG.error("Exception while reading 
cells from result."              + "Resetting the scanner to scan again.", 
ioe);            throw new DoNotRetryIOException("Resetting the scanner.", 
ioe);          }          cells.add(cellScanner.current());          
System.out.println("ResponseConverter.getResults(1)--cells == "+ cells + "--j 
== " + j + "---noOfCells == " + noOfCells);        }        results[i] = 
Result.create(cells, null, response.getStale(), isPartial);        
System.out.println("ResponseConverter.getResults(2)--cells == "+ cells + 
"--results[i] == " + results[i] + "---noOfCells == " + noOfCells);      } else 
{        // Result is pure pb.        results[i] = 
ProtobufUtil.toResult(response.getResults(i));        
System.out.println("ResponseConverter.getResults(3)--results == " + results[i] 
+ "--i == " + i);      }    }    return results; thank you very much, anoop, do 
you want to see this code, the exception should occur on the red mark line.
----- 原始邮件 -----
发件人:"ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
收件人:issues@hbase.apache.org
主题:[jira] [Updated] (HBASE-16643) Reverse scanner heap creation may not allow 
MSLAB closure due to improper ref counting of segments
日期:2016年09月23日 13点25分


     [ 
https://issues.apache.org/jira/browse/HBASE-16643?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]
ramkrishna.s.vasudevan updated HBASE-16643:
-------------------------------------------
    Status: Open  (was: Patch Available)
> Reverse scanner heap creation may not allow MSLAB closure due to improper ref 
> counting of segments
> --------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-16643
>                 URL: https://issues.apache.org/jira/browse/HBASE-16643
>             Project: HBase
>          Issue Type: Bug
>            Reporter: ramkrishna.s.vasudevan
>            Assignee: ramkrishna.s.vasudevan
>            Priority: Critical
>             Fix For: 2.0.0
>
>         Attachments: HBASE-16643.patch, HBASE-16643_1.patch, 
> HBASE-16643_2.patch, HBASE-16643_3.patch, HBASE-16643_4.patch, 
> HBASE-16643_5.patch
>
>
> In the reverse scanner case,
> While doing 'initBackwardHeapIfNeeded' in MemstoreScanner for setting the 
> backward heap, we do a 
> {code}
> if ((backwardHeap == null) && (forwardHeap != null)) {
>         forwardHeap.close();
>         forwardHeap = null;
>         // before building the heap seek for the relevant key on the scanners,
>         // for the heap to be built from the scanners correctly
>         for (KeyValueScanner scan : scanners) {
>           if (toLast) {
>             res |= scan.seekToLastRow();
>           } else {
>             res |= scan.backwardSeek(cell);
>           }
>         }
> {code}
> forwardHeap.close(). This would internally decrement the MSLAB ref counter 
> for the current active segment and snapshot segment.
> When the scan is actually closed again we do close() and that will again 
> decrement the count. Here chances are there that the count would go negative 
> and hence the actual MSLAB closure that checks for refCount==0 will fail. 
> Apart from this, when the refCount becomes 0 after the firstClose if any 
> other thread requests to close the segment, then we will end up in corrupted 
> segment because the segment could be put back to the MSLAB pool. 
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to