fix: std::optional value() build error on older macOS SDK (#11574)

Summary:
`PORTABLE=1 USE_SSE=1 USE_PCLMUL=1 WITH_JEMALLOC_FLAG=1 JEMALLOC=1 make static_lib`  on MacOS

clang --version:

Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin22.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

compile err like this:

util/udt_util.cc:39:39: error: 'value' is unavailable: introduced in macOS 10.14
  if (running_ts_sz != recorded_ts_sz.value()) {
                                      ^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/optional:944:33: note: 'value' has been explicitly marked
      unavailable here
    constexpr value_type const& value() const&
                                ^
util/udt_util.cc:217:62: error: 'value' is unavailable: introduced in macOS 10.14
      *new_key = StripTimestampFromUserKey(key, record_ts_sz.value());
                                                             ^
/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/optional:953:27: note: 'value' has been explicitly marked
      unavailable here
    constexpr value_type& value() &
                          ^
2 errors generated.
make: *** [util/udt_util.o] Error 1

Pull Request resolved: https://github.com/facebook/rocksdb/pull/11574

Reviewed By: ajkr

Differential Revision: D47269519

Pulled By: cbi42

fbshipit-source-id: da49d90cdf00a0af519f91c0cf7d257401eb395f
oxigraph-main
weedge 1 year ago committed by Facebook GitHub Bot
parent f74526341d
commit 1a7c741977
  1. 25
      db/compaction/compaction_job.cc
  2. 8
      db/compaction/compaction_outputs.h
  3. 4
      db/version_set.cc
  4. 4
      util/udt_util.cc

@ -1096,17 +1096,17 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
// GenSubcompactionBoundaries doesn't strip away the timestamp. // GenSubcompactionBoundaries doesn't strip away the timestamp.
size_t ts_sz = cfd->user_comparator()->timestamp_size(); size_t ts_sz = cfd->user_comparator()->timestamp_size();
if (start.has_value()) { if (start.has_value()) {
read_options.iterate_lower_bound = &start.value(); read_options.iterate_lower_bound = &(*start);
if (ts_sz > 0) { if (ts_sz > 0) {
start_without_ts = StripTimestampFromUserKey(start.value(), ts_sz); start_without_ts = StripTimestampFromUserKey(*start, ts_sz);
read_options.iterate_lower_bound = &start_without_ts.value(); read_options.iterate_lower_bound = &(*start_without_ts);
} }
} }
if (end.has_value()) { if (end.has_value()) {
read_options.iterate_upper_bound = &end.value(); read_options.iterate_upper_bound = &(*end);
if (ts_sz > 0) { if (ts_sz > 0) {
end_without_ts = StripTimestampFromUserKey(end.value(), ts_sz); end_without_ts = StripTimestampFromUserKey(*end, ts_sz);
read_options.iterate_upper_bound = &end_without_ts.value(); read_options.iterate_upper_bound = &(*end_without_ts);
} }
} }
@ -1138,8 +1138,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
} }
if (start.has_value()) { if (start.has_value()) {
start_ikey.SetInternalKey(start.value(), kMaxSequenceNumber, start_ikey.SetInternalKey(*start, kMaxSequenceNumber, kValueTypeForSeek);
kValueTypeForSeek);
if (ts_sz > 0) { if (ts_sz > 0) {
start_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek, start_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek,
&ts_slice); &ts_slice);
@ -1148,7 +1147,7 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
start_user_key = start_ikey.GetUserKey(); start_user_key = start_ikey.GetUserKey();
} }
if (end.has_value()) { if (end.has_value()) {
end_ikey.SetInternalKey(end.value(), kMaxSequenceNumber, kValueTypeForSeek); end_ikey.SetInternalKey(*end, kMaxSequenceNumber, kValueTypeForSeek);
if (ts_sz > 0) { if (ts_sz > 0) {
end_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek, end_ikey.UpdateInternalKey(kMaxSequenceNumber, kValueTypeForSeek,
&ts_slice); &ts_slice);
@ -1289,8 +1288,8 @@ void CompactionJob::ProcessKeyValueCompaction(SubcompactionState* sub_compact) {
while (status.ok() && !cfd->IsDropped() && c_iter->Valid()) { while (status.ok() && !cfd->IsDropped() && c_iter->Valid()) {
// Invariant: c_iter.status() is guaranteed to be OK if c_iter->Valid() // Invariant: c_iter.status() is guaranteed to be OK if c_iter->Valid()
// returns true. // returns true.
assert(!end.has_value() || cfd->user_comparator()->Compare( assert(!end.has_value() ||
c_iter->user_key(), end.value()) < 0); cfd->user_comparator()->Compare(c_iter->user_key(), *end) < 0);
if (c_iter_stats.num_input_records % kRecordStatsEvery == if (c_iter_stats.num_input_records % kRecordStatsEvery ==
kRecordStatsEvery - 1) { kRecordStatsEvery - 1) {
@ -1818,10 +1817,10 @@ Status CompactionJob::OpenCompactionOutputFile(SubcompactionState* sub_compact,
uint64_t current_time = static_cast<uint64_t>(temp_current_time); uint64_t current_time = static_cast<uint64_t>(temp_current_time);
InternalKey tmp_start, tmp_end; InternalKey tmp_start, tmp_end;
if (sub_compact->start.has_value()) { if (sub_compact->start.has_value()) {
tmp_start.SetMinPossibleForUserKey(sub_compact->start.value()); tmp_start.SetMinPossibleForUserKey(*(sub_compact->start));
} }
if (sub_compact->end.has_value()) { if (sub_compact->end.has_value()) {
tmp_end.SetMinPossibleForUserKey(sub_compact->end.value()); tmp_end.SetMinPossibleForUserKey(*(sub_compact->end));
} }
uint64_t oldest_ancester_time = uint64_t oldest_ancester_time =
sub_compact->compaction->MinInputFileOldestAncesterTime( sub_compact->compaction->MinInputFileOldestAncesterTime(

@ -206,10 +206,10 @@ class CompactionOutputs {
// We may only split the output when the cursor is in the range. Split // We may only split the output when the cursor is in the range. Split
if ((!end.has_value() || if ((!end.has_value() ||
icmp->user_comparator()->Compare( icmp->user_comparator()->Compare(
ExtractUserKey(output_split_key->Encode()), end.value()) < 0) && ExtractUserKey(output_split_key->Encode()), *end) < 0) &&
(!start.has_value() || icmp->user_comparator()->Compare( (!start.has_value() ||
ExtractUserKey(output_split_key->Encode()), icmp->user_comparator()->Compare(
start.value()) > 0)) { ExtractUserKey(output_split_key->Encode()), *start) > 0)) {
local_output_split_key_ = output_split_key; local_output_split_key_ = output_split_key;
} }
} }

@ -6873,7 +6873,7 @@ InternalIterator* VersionSet::MakeInputIterator(
const FileMetaData& fmd = *flevel->files[i].file_metadata; const FileMetaData& fmd = *flevel->files[i].file_metadata;
if (start.has_value() && if (start.has_value() &&
cfd->user_comparator()->CompareWithoutTimestamp( cfd->user_comparator()->CompareWithoutTimestamp(
start.value(), fmd.largest.user_key()) > 0) { *start, fmd.largest.user_key()) > 0) {
continue; continue;
} }
// We should be able to filter out the case where the end key // We should be able to filter out the case where the end key
@ -6881,7 +6881,7 @@ InternalIterator* VersionSet::MakeInputIterator(
// We try to be extra safe here. // We try to be extra safe here.
if (end.has_value() && if (end.has_value() &&
cfd->user_comparator()->CompareWithoutTimestamp( cfd->user_comparator()->CompareWithoutTimestamp(
end.value(), fmd.smallest.user_key()) < 0) { *end, fmd.smallest.user_key()) < 0) {
continue; continue;
} }
TruncatedRangeDelIterator* range_tombstone_iter = nullptr; TruncatedRangeDelIterator* range_tombstone_iter = nullptr;

@ -36,7 +36,7 @@ RecoveryType GetRecoveryType(const size_t running_ts_sz,
return RecoveryType::kPadTimestamp; return RecoveryType::kPadTimestamp;
} }
if (running_ts_sz != recorded_ts_sz.value()) { if (running_ts_sz != *recorded_ts_sz) {
return RecoveryType::kUnrecoverable; return RecoveryType::kUnrecoverable;
} }
@ -214,7 +214,7 @@ Status TimestampRecoveryHandler::ReconcileTimestampDiscrepancy(
break; break;
case RecoveryType::kStripTimestamp: case RecoveryType::kStripTimestamp:
assert(record_ts_sz.has_value()); assert(record_ts_sz.has_value());
*new_key = StripTimestampFromUserKey(key, record_ts_sz.value()); *new_key = StripTimestampFromUserKey(key, *record_ts_sz);
new_batch_diff_from_orig_batch_ = true; new_batch_diff_from_orig_batch_ = true;
break; break;
case RecoveryType::kPadTimestamp: case RecoveryType::kPadTimestamp:

Loading…
Cancel
Save