]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | #pragma once |
2 | #include <string> | |
3 | #include <unordered_set> | |
4 | #include <vector> | |
5 | ||
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" | |
16 | ||
17 | namespace ROCKSDB_NAMESPACE { | |
18 | ||
19 | // Imports a set of sst files as is into a new column family. Logic is similar | |
20 | // to ExternalSstFileIngestionJob. | |
21 | class ImportColumnFamilyJob { | |
22 | public: | |
23 | ImportColumnFamilyJob(Env* env, VersionSet* versions, ColumnFamilyData* cfd, | |
24 | const ImmutableDBOptions& db_options, | |
25 | const EnvOptions& env_options, | |
26 | const ImportColumnFamilyOptions& import_options, | |
20effc67 TL |
27 | const std::vector<LiveFileMetaData>& metadata, |
28 | const std::shared_ptr<IOTracer>& io_tracer) | |
f67539c2 TL |
29 | : env_(env), |
30 | versions_(versions), | |
31 | cfd_(cfd), | |
32 | db_options_(db_options), | |
20effc67 | 33 | fs_(db_options_.fs, io_tracer), |
f67539c2 TL |
34 | env_options_(env_options), |
35 | import_options_(import_options), | |
20effc67 TL |
36 | metadata_(metadata), |
37 | io_tracer_(io_tracer) {} | |
f67539c2 TL |
38 | |
39 | // Prepare the job by copying external files into the DB. | |
40 | Status Prepare(uint64_t next_file_number, SuperVersion* sv); | |
41 | ||
42 | // Will execute the import job and prepare edit() to be applied. | |
43 | // REQUIRES: Mutex held | |
44 | Status Run(); | |
45 | ||
46 | // Cleanup after successful/failed job | |
47 | void Cleanup(const Status& status); | |
48 | ||
49 | VersionEdit* edit() { return &edit_; } | |
50 | ||
51 | const autovector<IngestedFileInfo>& files_to_import() const { | |
52 | return files_to_import_; | |
53 | } | |
54 | ||
55 | private: | |
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, | |
60 | SuperVersion* sv); | |
61 | ||
62 | Env* env_; | |
63 | VersionSet* versions_; | |
64 | ColumnFamilyData* cfd_; | |
65 | const ImmutableDBOptions& db_options_; | |
20effc67 | 66 | const FileSystemPtr fs_; |
f67539c2 TL |
67 | const EnvOptions& env_options_; |
68 | autovector<IngestedFileInfo> files_to_import_; | |
69 | VersionEdit edit_; | |
70 | const ImportColumnFamilyOptions& import_options_; | |
71 | std::vector<LiveFileMetaData> metadata_; | |
20effc67 | 72 | const std::shared_ptr<IOTracer> io_tracer_; |
f67539c2 TL |
73 | }; |
74 | ||
75 | } // namespace ROCKSDB_NAMESPACE |