diff --git a/db/db_impl.h b/db/db_impl.h index c571617ed..c316b6ad4 100644 --- a/db/db_impl.h +++ b/db/db_impl.h @@ -185,7 +185,9 @@ class DBImpl : public DB { ColumnFamilyHandle* column_family, const std::vector& input_file_names, const int output_level, - const int output_path_id = -1) override; + const int output_path_id = -1, + std::vector* const output_file_names + = nullptr) override; virtual Status PauseBackgroundWork() override; virtual Status ContinueBackgroundWork() override; @@ -881,6 +883,7 @@ class DBImpl : public DB { Status CompactFilesImpl(const CompactionOptions& compact_options, ColumnFamilyData* cfd, Version* version, const std::vector& input_file_names, + std::vector* const output_file_names, const int output_level, int output_path_id, JobContext* job_context, LogBuffer* log_buffer); diff --git a/db/db_impl_compaction_flush.cc b/db/db_impl_compaction_flush.cc index 16b0f12c6..c1faccb29 100644 --- a/db/db_impl_compaction_flush.cc +++ b/db/db_impl_compaction_flush.cc @@ -461,7 +461,8 @@ Status DBImpl::CompactFiles( const CompactionOptions& compact_options, ColumnFamilyHandle* column_family, const std::vector& input_file_names, - const int output_level, const int output_path_id) { + const int output_level, const int output_path_id, + std::vector* const output_file_names) { #ifdef ROCKSDB_LITE // not supported in lite version return Status::NotSupported("Not supported in ROCKSDB LITE"); @@ -488,7 +489,7 @@ Status DBImpl::CompactFiles( WaitForIngestFile(); s = CompactFilesImpl(compact_options, cfd, sv->current, - input_file_names, output_level, + input_file_names, output_file_names, output_level, output_path_id, &job_context, &log_buffer); } if (sv->Unref()) { @@ -532,6 +533,7 @@ Status DBImpl::CompactFiles( Status DBImpl::CompactFilesImpl( const CompactionOptions& compact_options, ColumnFamilyData* cfd, Version* version, const std::vector& input_file_names, + std::vector* const output_file_names, const int output_level, int output_path_id, JobContext* job_context, LogBuffer* log_buffer) { mutex_.AssertHeld(); @@ -680,6 +682,14 @@ Status DBImpl::CompactFilesImpl( } } + if (output_file_names != nullptr) { + for (const auto newf : c->edit()->GetNewFiles()) { + (*output_file_names).push_back(TableFileName( + immutable_db_options_.db_paths, newf.second.fd.GetNumber(), + newf.second.fd.GetPathId()) ); + } + } + c.reset(); bg_compaction_scheduled_--; diff --git a/db/db_impl_readonly.h b/db/db_impl_readonly.h index 35f2d1c85..6ebe1bce7 100644 --- a/db/db_impl_readonly.h +++ b/db/db_impl_readonly.h @@ -76,7 +76,9 @@ class DBImplReadOnly : public DBImpl { const CompactionOptions& /*compact_options*/, ColumnFamilyHandle* /*column_family*/, const std::vector& /*input_file_names*/, - const int /*output_level*/, const int /*output_path_id*/ = -1) override { + const int /*output_level*/, const int /*output_path_id*/ = -1, + std::vector* const /*output_file_names*/ = nullptr + ) override { return Status::NotSupported("Not supported operation in read only mode."); } diff --git a/db/db_test.cc b/db/db_test.cc index dc0238c41..9ee5f54db 100644 --- a/db/db_test.cc +++ b/db/db_test.cc @@ -2411,7 +2411,9 @@ class ModelDB : public DB { const CompactionOptions& /*compact_options*/, ColumnFamilyHandle* /*column_family*/, const std::vector& /*input_file_names*/, - const int /*output_level*/, const int /*output_path_id*/ = -1) override { + const int /*output_level*/, const int /*output_path_id*/ = -1, + std::vector* const /*output_file_names*/ = nullptr + ) override { return Status::NotSupported("Not supported operation."); } diff --git a/include/rocksdb/db.h b/include/rocksdb/db.h index 8a8fd9aa0..dc74398c3 100644 --- a/include/rocksdb/db.h +++ b/include/rocksdb/db.h @@ -814,14 +814,17 @@ class DB { const CompactionOptions& compact_options, ColumnFamilyHandle* column_family, const std::vector& input_file_names, - const int output_level, const int output_path_id = -1) = 0; + const int output_level, const int output_path_id = -1, + std::vector* const output_file_names = nullptr) = 0; virtual Status CompactFiles( const CompactionOptions& compact_options, const std::vector& input_file_names, - const int output_level, const int output_path_id = -1) { + const int output_level, const int output_path_id = -1, + std::vector* const output_file_names = nullptr) { return CompactFiles(compact_options, DefaultColumnFamily(), - input_file_names, output_level, output_path_id); + input_file_names, output_level, output_path_id, + output_file_names); } // This function will wait until all currently running background processes diff --git a/include/rocksdb/utilities/stackable_db.h b/include/rocksdb/utilities/stackable_db.h index b84c6341e..721203f7c 100644 --- a/include/rocksdb/utilities/stackable_db.h +++ b/include/rocksdb/utilities/stackable_db.h @@ -219,10 +219,11 @@ class StackableDB : public DB { const CompactionOptions& compact_options, ColumnFamilyHandle* column_family, const std::vector& input_file_names, - const int output_level, const int output_path_id = -1) override { + const int output_level, const int output_path_id = -1, + std::vector* const output_file_names = nullptr) override { return db_->CompactFiles( compact_options, column_family, input_file_names, - output_level, output_path_id); + output_level, output_path_id, output_file_names); } virtual Status PauseBackgroundWork() override {