-
Notifications
You must be signed in to change notification settings - Fork 6.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Skip building remote compaction output file when not OK #13183
Skip building remote compaction output file when not OK #13183
Conversation
@jaykorean has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
f3879eb
to
81ec80a
Compare
@jaykorean has updated the pull request. You must reimport the pull request before landing. |
@jaykorean has imported this pull request. If you are a Meta employee, you can view this diff on Phabricator. |
@jaykorean merged this pull request in d46d1fa. |
Summary: During `FinishCompactionOutputFile()` if there's an IOError, we may end up having the output in memory, but table properties are not populated, because `outputs.UpdateTableProperties();` is called only when `s.ok()` is true. However, during remote compaction result serialization, we always try to access the `table_properties` which may be null. This was causing a segfault. We can skip building the output files in the result completely if the status is not ok. # Unit Test New test added ``` ./compaction_service_test --gtest_filter="*CompactionOutputFileIOError*" ``` Before the fix ``` Received signal 11 (Segmentation fault) Invoking GDB for stack trace... #4 0x00000000004708ed in rocksdb::TableProperties::TableProperties (this=0x7fae070fb4e8) at ./include/rocksdb/table_properties.h:212 212 struct TableProperties { #5 0x00007fae0b195b9e in rocksdb::CompactionServiceOutputFile::CompactionServiceOutputFile (this=0x7fae070fb400, name=..., smallest=0, largest=0, _smallest_internal_key=..., _largest_internal_key=..., _oldest_ancester_time=1733335023, _file_creation_time=1733335026, _epoch_number=1, _file_checksum=..., _file_checksum_func_name=..., _paranoid_hash=0, _marked_for_compaction=false, _unique_id=..., _table_properties=...) at ./db/compaction/compaction_job.h:450 450 table_properties(_table_properties) {} ``` After the fix ``` [ RUN ] CompactionServiceTest.CompactionOutputFileIOError [ OK ] CompactionServiceTest.CompactionOutputFileIOError (4499 ms) [----------] 1 test from CompactionServiceTest (4499 ms total) [----------] Global test environment tear-down [==========] 1 test from 1 test case ran. (4499 ms total) [ PASSED ] 1 test. ``` Pull Request resolved: #13183 Reviewed By: anand1976 Differential Revision: D66770876 Pulled By: jaykorean fbshipit-source-id: 63df7c2786ce0353f38a93e493ae4e7b591f4ed9
Summary
During
FinishCompactionOutputFile()
if there's an IOError, we may end up having the output in memory, but table properties are not populated, becauseoutputs.UpdateTableProperties();
is called only whens.ok()
is true.However, during remote compaction result serialization, we always try to access the
table_properties
which may be null. This was causing a segfault.We can skip building the output files in the result completely if the status is not ok.
Unit Test
New test added
Before the fix
After the fix