Fix the logic of setting read_amp_bytes_per_bit from OPTIONS file (#7680)
Summary: Instead of using `EncodeFixed32` which always serialize a integer to little endian, we should use the local machine's endianness when populating a native data structure during options parsing. Without this fix, `read_amp_bytes_per_bit` may be populated incorrectly on big-endian machines. Pull Request resolved: https://github.com/facebook/rocksdb/pull/7680 Test Plan: make check Reviewed By: pdillinger Differential Revision: D24999166 Pulled By: riversand963 fbshipit-source-id: dc603cff6e17f8fa32479ce6df93b93082e6b0c4
This commit is contained in:
parent
6a23aaf86e
commit
2df3e90028
@ -1,7 +1,8 @@
|
|||||||
# Rocksdb Change Log
|
# Rocksdb Change Log
|
||||||
## 6.13.4 (11/15/2020)
|
## 6.13.4 (11/15/2020)
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
* Fix a bug of encoding and parsing BlockBasedTableOptions::read_amp_bytes_per_bit as a 64-bit integer.
|
* Fixed a bug of encoding and parsing BlockBasedTableOptions::read_amp_bytes_per_bit as a 64-bit integer.
|
||||||
|
* Fixed the logic of populating native data structure for `read_amp_bytes_per_bit` during OPTIONS file parsing on big-endian architecture. Without this fix, original code introduced in PR7659, when running on big-endian machine, can mistakenly store read_amp_bytes_per_bit (an uint32) in little endian format. Future access to `read_amp_bytes_per_bit` will give wrong values. Little endian architecture is not affected.
|
||||||
|
|
||||||
## 6.13.3 (10/14/2020)
|
## 6.13.3 (10/14/2020)
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
@ -345,7 +345,8 @@ static std::unordered_map<std::string, OptionTypeInfo>
|
|||||||
// generated by affected releases before the fix, we need to
|
// generated by affected releases before the fix, we need to
|
||||||
// manually parse read_amp_bytes_per_bit with this special hack.
|
// manually parse read_amp_bytes_per_bit with this special hack.
|
||||||
uint64_t read_amp_bytes_per_bit = ParseUint64(value);
|
uint64_t read_amp_bytes_per_bit = ParseUint64(value);
|
||||||
EncodeFixed32(addr, static_cast<uint32_t>(read_amp_bytes_per_bit));
|
*(reinterpret_cast<uint32_t*>(addr)) =
|
||||||
|
static_cast<uint32_t>(read_amp_bytes_per_bit);
|
||||||
return Status::OK();
|
return Status::OK();
|
||||||
}}},
|
}}},
|
||||||
{"enable_index_compression",
|
{"enable_index_compression",
|
||||||
|
Loading…
Reference in New Issue
Block a user