1 //  Copyright (c) 2011-present, Facebook, Inc.  All rights reserved.
2 //  This source code is licensed under both the GPLv2 (found in the
3 //  COPYING file in the root directory) and Apache 2.0 License
4 //  (found in the LICENSE.Apache file in the root directory).
5 // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
6 // Use of this source code is governed by a BSD-style license that can be
7 // found in the LICENSE file. See the AUTHORS file for names of contributors.
8 #pragma once
9 #include <string>
10 #include <utility>
11 #include <vector>
12 #include "db/range_tombstone_fragmenter.h"
13 #include "db/table_properties_collector.h"
14 #include "logging/event_logger.h"
15 #include "options/cf_options.h"
16 #include "rocksdb/comparator.h"
17 #include "rocksdb/env.h"
18 #include "rocksdb/listener.h"
19 #include "rocksdb/options.h"
20 #include "rocksdb/status.h"
21 #include "rocksdb/table_properties.h"
22 #include "rocksdb/types.h"
23 #include "table/scoped_arena_iterator.h"
24 
25 namespace ROCKSDB_NAMESPACE {
26 
27 struct Options;
28 struct FileMetaData;
29 
30 class Env;
31 struct EnvOptions;
32 class Iterator;
33 class SnapshotChecker;
34 class TableCache;
35 class VersionEdit;
36 class TableBuilder;
37 class WritableFileWriter;
38 class InternalStats;
39 
40 // @param column_family_name Name of the column family that is also identified
41 //    by column_family_id, or empty string if unknown. It must outlive the
42 //    TableBuilder returned by this function.
43 TableBuilder* NewTableBuilder(
44     const ImmutableCFOptions& options, const MutableCFOptions& moptions,
45     const InternalKeyComparator& internal_comparator,
46     const std::vector<std::unique_ptr<IntTblPropCollectorFactory>>*
47         int_tbl_prop_collector_factories,
48     uint32_t column_family_id, const std::string& column_family_name,
49     WritableFileWriter* file, const CompressionType compression_type,
50     const uint64_t sample_for_compression,
51     const CompressionOptions& compression_opts, int level,
52     const bool skip_filters = false, const uint64_t creation_time = 0,
53     const uint64_t oldest_key_time = 0, const uint64_t target_file_size = 0,
54     const uint64_t file_creation_time = 0);
55 
56 // Build a Table file from the contents of *iter.  The generated file
57 // will be named according to number specified in meta. On success, the rest of
58 // *meta will be filled with metadata about the generated table.
59 // If no data is present in *iter, meta->file_size will be set to
60 // zero, and no Table file will be produced.
61 //
62 // @param column_family_name Name of the column family that is also identified
63 //    by column_family_id, or empty string if unknown.
64 extern Status BuildTable(
65     const std::string& dbname, Env* env, FileSystem* fs,
66     const ImmutableCFOptions& options,
67     const MutableCFOptions& mutable_cf_options, const FileOptions& file_options,
68     TableCache* table_cache, InternalIterator* iter,
69     std::vector<std::unique_ptr<FragmentedRangeTombstoneIterator>>
70         range_del_iters,
71     FileMetaData* meta, const InternalKeyComparator& internal_comparator,
72     const std::vector<std::unique_ptr<IntTblPropCollectorFactory>>*
73         int_tbl_prop_collector_factories,
74     uint32_t column_family_id, const std::string& column_family_name,
75     std::vector<SequenceNumber> snapshots,
76     SequenceNumber earliest_write_conflict_snapshot,
77     SnapshotChecker* snapshot_checker, const CompressionType compression,
78     const uint64_t sample_for_compression,
79     const CompressionOptions& compression_opts, bool paranoid_file_checks,
80     InternalStats* internal_stats, TableFileCreationReason reason,
81     IOStatus* io_status, EventLogger* event_logger = nullptr, int job_id = 0,
82     const Env::IOPriority io_priority = Env::IO_HIGH,
83     TableProperties* table_properties = nullptr, int level = -1,
84     const uint64_t creation_time = 0, const uint64_t oldest_key_time = 0,
85     Env::WriteLifeTimeHint write_hint = Env::WLTH_NOT_SET,
86     const uint64_t file_creation_time = 0);
87 
88 }  // namespace ROCKSDB_NAMESPACE
89