sunhelly commented on a change in pull request #3553:
URL: https://github.com/apache/hbase/pull/3553#discussion_r684342153
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionScannerImpl.java
##########
@@ -768,7 +768,7 @@ public synchronized boolean reseek(byte[] row) throws
IOException {
}
@Override
- public void shipped() throws IOException {
+ public synchronized void shipped() throws IOException {
Review comment:
Because in the StoreScanner, the` prevCell` will be copied to heap
before ship(), but it may be null even after the close() of the store scanner.
As a result, when there are concurrent close() and ship() of a scanner, and
heap cleared before ship, the `prevCell` block will be released before copy the
cell.
In RPC handlers, suppose a situation, two scan() RPCs use the same scanner,
and one got partial results, one found that no more results, then in the RPC
callback, there is no guarantee for the close callback happens before the ship
callback, then when ship() copy `prevCell`, the close may have already released
previous blocks...
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]