3 #include <unordered_set>
6 #include "db/column_family.h"
7 #include "db/dbformat.h"
8 #include "db/external_sst_file_ingestion_job.h"
9 #include "db/snapshot_impl.h"
10 #include "options/db_options.h"
11 #include "rocksdb/db.h"
12 #include "rocksdb/env.h"
13 #include "rocksdb/metadata.h"
14 #include "rocksdb/sst_file_writer.h"
15 #include "util/autovector.h"
17 namespace ROCKSDB_NAMESPACE
{
19 // Imports a set of sst files as is into a new column family. Logic is similar
20 // to ExternalSstFileIngestionJob.
21 class ImportColumnFamilyJob
{
23 ImportColumnFamilyJob(Env
* env
, VersionSet
* versions
, ColumnFamilyData
* cfd
,
24 const ImmutableDBOptions
& db_options
,
25 const EnvOptions
& env_options
,
26 const ImportColumnFamilyOptions
& import_options
,
27 const std::vector
<LiveFileMetaData
>& metadata
,
28 const std::shared_ptr
<IOTracer
>& io_tracer
)
32 db_options_(db_options
),
33 fs_(db_options_
.fs
, io_tracer
),
34 env_options_(env_options
),
35 import_options_(import_options
),
37 io_tracer_(io_tracer
) {}
39 // Prepare the job by copying external files into the DB.
40 Status
Prepare(uint64_t next_file_number
, SuperVersion
* sv
);
42 // Will execute the import job and prepare edit() to be applied.
43 // REQUIRES: Mutex held
46 // Cleanup after successful/failed job
47 void Cleanup(const Status
& status
);
49 VersionEdit
* edit() { return &edit_
; }
51 const autovector
<IngestedFileInfo
>& files_to_import() const {
52 return files_to_import_
;
56 // Open the external file and populate `file_to_import` with all the
57 // external information we need to import this file.
58 Status
GetIngestedFileInfo(const std::string
& external_file
,
59 IngestedFileInfo
* file_to_import
,
63 VersionSet
* versions_
;
64 ColumnFamilyData
* cfd_
;
65 const ImmutableDBOptions
& db_options_
;
66 const FileSystemPtr fs_
;
67 const EnvOptions
& env_options_
;
68 autovector
<IngestedFileInfo
> files_to_import_
;
70 const ImportColumnFamilyOptions
& import_options_
;
71 std::vector
<LiveFileMetaData
> metadata_
;
72 const std::shared_ptr
<IOTracer
> io_tracer_
;
75 } // namespace ROCKSDB_NAMESPACE