diff --git a/table/sst_file_writer.cc b/table/sst_file_writer.cc index e556a7f81..e9da4a35c 100644 --- a/table/sst_file_writer.cc +++ b/table/sst_file_writer.cc @@ -72,6 +72,7 @@ struct SstFileWriter::Rep { } if (sst_support_auto_sort) { + #if 0 // now we use GetBoundaryUserKey after Finish assert(internal_comparator.IsBytewise()); // now auto sort just support bytewise comparator // we use Slice default compare to omit comparator virtual call @@ -85,6 +86,7 @@ struct SstFileWriter::Rep { else if (user_key < file_info.smallest_key) file_info.smallest_key.assign(user_key.data(), user_key.size()); } + #endif } else if (file_info.num_entries == 0) { file_info.smallest_key.assign(user_key.data(), user_key.size()); @@ -388,6 +390,12 @@ Status SstFileWriter::Finish(ExternalSstFileInfo* file_info) { s = r->file_writer->Close(); } } + if (s.ok() && rep_->sst_support_auto_sort) { + // this reduced comparing user keys with smallest_key & largest_key. + auto& fi = r->file_info; + s = r->builder->GetBoundaryUserKey(&fi.smallest_key, &fi.largest_key); + ROCKSDB_VERIFY_F(s.ok(), "GetBoundaryUserKey = %s", s.ToString().c_str()); + } if (s.ok()) { r->file_info.file_checksum = r->file_writer->GetFileChecksum(); r->file_info.file_checksum_func_name = diff --git a/table/table_builder.h b/table/table_builder.h index 37b3e8e9a..0ccfaa7da 100644 --- a/table/table_builder.h +++ b/table/table_builder.h @@ -221,6 +221,10 @@ class TableBuilder { // Returns table properties virtual TableProperties GetTableProperties() const = 0; + virtual Status GetBoundaryUserKey(std::string*, std::string*) const { + return Status::NotSupported("Only supported by auto sort sst"); + } + // Return file checksum virtual std::string GetFileChecksum() const = 0;