@ -1717,7 +1717,8 @@ void BlockBasedTable::RetrieveMultipleBlocks(
FSReadRequest & req = read_reqs [ req_idx ] ;
FSReadRequest & req = read_reqs [ req_idx ] ;
Status s = req . status ;
Status s = req . status ;
if ( s . ok ( ) ) {
if ( s . ok ( ) ) {
if ( req . result . size ( ) ! = req . len ) {
if ( ( req . result . size ( ) ! = req . len ) | |
( req_offset + block_size ( handle ) > req . result . size ( ) ) ) {
s = Status : : Corruption (
s = Status : : Corruption (
" truncated block read from " + rep_ - > file - > file_name ( ) +
" truncated block read from " + rep_ - > file - > file_name ( ) +
" offset " + ToString ( handle . offset ( ) ) + " , expected " +
" offset " + ToString ( handle . offset ( ) ) + " , expected " +
@ -1726,15 +1727,6 @@ void BlockBasedTable::RetrieveMultipleBlocks(
}
}
BlockContents raw_block_contents ;
BlockContents raw_block_contents ;
size_t cur_read_end = req_offset + block_size ( handle ) ;
if ( cur_read_end > req . result . size ( ) ) {
s = Status : : Corruption (
" truncated block read from " + rep_ - > file - > file_name ( ) + " offset " +
ToString ( handle . offset ( ) ) + " , expected " + ToString ( req . len ) +
" bytes, got " + ToString ( req . result . size ( ) ) ) ;
}
if ( s . ok ( ) ) {
if ( ! use_shared_buffer ) {
if ( ! use_shared_buffer ) {
// We allocated a buffer for this block. Give ownership of it to
// We allocated a buffer for this block. Give ownership of it to
// BlockContents so it can free the memory
// BlockContents so it can free the memory
@ -1750,11 +1742,11 @@ void BlockBasedTable::RetrieveMultipleBlocks(
raw_block_contents =
raw_block_contents =
BlockContents ( Slice ( req . result . data ( ) + req_offset , handle . size ( ) ) ) ;
BlockContents ( Slice ( req . result . data ( ) + req_offset , handle . size ( ) ) ) ;
}
}
# ifndef NDEBUG
# ifndef NDEBUG
raw_block_contents . is_raw_block = true ;
raw_block_contents . is_raw_block = true ;
# endif
# endif
if ( options . verify_checksums ) {
if ( s . ok ( ) & & options . verify_checksums ) {
PERF_TIMER_GUARD ( block_checksum_time ) ;
PERF_TIMER_GUARD ( block_checksum_time ) ;
const char * data = req . result . data ( ) ;
const char * data = req . result . data ( ) ;
uint32_t expected =
uint32_t expected =
@ -1769,7 +1761,6 @@ void BlockBasedTable::RetrieveMultipleBlocks(
handle . size ( ) + 1 , expected ) ;
handle . size ( ) + 1 , expected ) ;
TEST_SYNC_POINT_CALLBACK ( " RetrieveMultipleBlocks:VerifyChecksum " , & s ) ;
TEST_SYNC_POINT_CALLBACK ( " RetrieveMultipleBlocks:VerifyChecksum " , & s ) ;
}
}
}
if ( s . ok ( ) ) {
if ( s . ok ( ) ) {
// When the blocks share the same underlying buffer (scratch or direct io
// When the blocks share the same underlying buffer (scratch or direct io