summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/storage_options.h
blob: 8f7805a368fd206ff75b7191d74edab3538422f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
 *    Copyright (C) 2018-present MongoDB, Inc.
 *
 *    This program is free software: you can redistribute it and/or modify
 *    it under the terms of the Server Side Public License, version 1,
 *    as published by MongoDB, Inc.
 *
 *    This program is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    Server Side Public License for more details.
 *
 *    You should have received a copy of the Server Side Public License
 *    along with this program. If not, see
 *    <http://www.mongodb.com/licensing/server-side-public-license>.
 *
 *    As a special exception, the copyright holders give permission to link the
 *    code of portions of this program with the OpenSSL library under certain
 *    conditions as described in each individual source file and distribute
 *    linked combinations including the program with the OpenSSL library. You
 *    must comply with the Server Side Public License in all respects for
 *    all of the code used other than as permitted herein. If you modify file(s)
 *    with this exception, you may extend this exception to your version of the
 *    file(s), but you are not obligated to do so. If you do not wish to do so,
 *    delete this exception statement from your version. If you delete this
 *    exception statement from all source files in the program, then also delete
 *    it in the license file.
 */

#pragma once

#include <atomic>
#include <string>

#include "mongo/platform/atomic_proxy.h"
#include "mongo/platform/atomic_word.h"

/*
 * This file defines the storage for options that come from the command line related to data file
 * persistence.  Many executables that can access data files directly such as mongod and certain
 * tools use these variables, but each executable may have a different set of command line flags
 * that allow the user to change a different subset of these options.
 */

namespace mongo {

struct StorageGlobalParams {
    StorageGlobalParams();
    void reset();

    // Default data directory for mongod when running in non-config server mode.
    static const char* kDefaultDbPath;

    // Default data directory for mongod when running as the config database of
    // a sharded cluster.
    static const char* kDefaultConfigDbPath;

    // --storageEngine
    // storage engine for this instance of mongod.
    std::string engine;

    // True if --storageEngine was passed on the command line, and false otherwise.
    bool engineSetByUser;

    // The directory where the mongod instance stores its data.
    std::string dbpath;

    // --upgrade
    // Upgrades the on-disk data format of the files specified by the --dbpath to the
    // latest version, if needed.
    bool upgrade;

    // --repair
    // Runs a repair routine on all databases.
    bool repair;

    // --restore
    // This should only be used when restoring from a backup. Mongod will behave differently by
    // handling collections with missing data files, allowing database renames, skipping oplog
    // entries for collections not restored and more.
    bool restore;

    // --magicRestore
    bool magicRestore;

    // Whether the Storage Engine selected should be ephemeral in nature or not.
    bool ephemeral = false;

    // --journalCommitInterval
    // This parameter is both a server parameter and a configuration parameter, and to resolve
    // conflicts between the two the default must be set here.
    static constexpr int kMaxJournalCommitIntervalMs = 500;
    AtomicWord<int> journalCommitIntervalMs{100};

    // --notablescan
    // no table scans allowed
    AtomicWord<bool> noTableScan;

    // --directoryperdb
    // Stores each database’s files in its own folder in the data directory.
    // When applied to an existing system, the directoryPerDB option alters
    // the storage pattern of the data directory.
    bool directoryperdb;

    // --syncdelay
    // Delay in seconds between triggering the next checkpoint after the completion of the previous
    // one. A value of 0 indicates that checkpointing will be skipped.
    // Do not set this value on production systems.
    // In almost every situation, you should use the default setting.
    // This parameter is both a server parameter and a configuration parameter, and to resolve
    // conflicts between the two the default must be set here.
    static constexpr double kMaxSyncdelaySecs = 60 * 60;  // 1hr
    AtomicDouble syncdelay{60.0};                         // seconds between checkpoints

    // --queryableBackupMode
    // Prevents user-originating operations from performing writes to the server. Internally
    // generated writes are still permitted.
    bool queryableBackupMode;

    // --groupCollections
    // Dictate to the storage engine that it should attempt to create new MongoDB collections from
    // an existing underlying MongoDB database level resource if possible. This can improve
    // workloads that rely heavily on creating many collections within a database.
    bool groupCollections;

    // --oplogMinRetentionHours
    // Controls what size the oplog should be in addition to oplogSize. If set, the oplog will only
    // be truncated if it is over the capped size, and if the bucket of oldest oplog entries fall
    // outside of the retention window which is set by this option.
    AtomicWord<double> oplogMinRetentionHours;

    // Controls whether we allow the OplogTruncateMarkers mechanism to delete oplog history on WT.
    bool allowOplogTruncation;

    // Disables lock-free reads. Lock-free reads is incompatible with
    // enableMajorityReadConcern=false.
    bool disableLockFreeReads = false;

    // Test-only option. Disables table logging.
    bool forceDisableTableLogging = false;
};

extern StorageGlobalParams storageGlobalParams;

}  // namespace mongo