Skip to content
This repository was archived by the owner on Sep 27, 2019. It is now read-only.

Commit c4b06a1

Browse files
authored
Merge pull request #1102 from pranavk/settings_gh
Allow setting number of GC threads from command line
2 parents 4416b8e + 07bcba9 commit c4b06a1

File tree

8 files changed

+105
-43
lines changed

8 files changed

+105
-43
lines changed

src/common/init.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ void PelotonInit::Initialize() {
5656
concurrency::EpochManagerFactory::GetInstance().StartEpoch();
5757

5858
// start GC.
59+
gc::GCManagerFactory::Configure(settings::SettingsManager::GetInt(settings::SettingId::gc_num_threads));
5960
gc::GCManagerFactory::GetInstance().StartGC();
6061

6162
// start index tuner

src/include/common/exception.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ class Exception : public std::runtime_error {
7676
"\nMessage :: " + message;
7777
}
7878

79+
std::string GetMessage() {
80+
return exception_message_;
81+
}
82+
7983
std::string ExceptionTypeToString(ExceptionType type) {
8084
switch (type) {
8185
case ExceptionType::INVALID:

src/include/settings/settings.h

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,21 @@
2121
SETTING_int(port,
2222
"Peloton port (default: 15721)",
2323
15721,
24+
1024, 65535,
2425
false, false)
2526

2627
// Maximum number of connections
2728
SETTING_int(max_connections,
2829
"Maximum number of connections (default: 64)",
2930
64,
31+
1, 512,
3032
true, true)
3133

3234
SETTING_int(rpc_port,
3335
"Peloton rpc port (default: 15445)",
34-
15445,
35-
false, false)
36+
15445,
37+
1024, 65535,
38+
false, false)
3639

3740
// TODO(tianyu): Remove when we change to a different rpc framework
3841
// This is here only because capnp cannot exit gracefully and thus causes
@@ -82,24 +85,36 @@ SETTING_string(root_cert_file,
8285
SETTING_double(bnlj_buffer_size,
8386
"The default buffer size to use for blockwise nested loop joins (default: 1 MB)",
8487
1.0 * 1024.0 * 1024.0,
88+
1.0 * 1024,
89+
1.0 * 1024.0 * 1024.0 * 1024,
8590
true, true)
8691

8792
// Size of the MonoQueue task queue
8893
SETTING_int(monoqueue_task_queue_size,
8994
"MonoQueue Task Queue Size (default: 32)",
90-
32,
95+
32,
96+
8, 128,
9197
false, false)
9298

9399
// Size of the MonoQueue worker pool
94100
SETTING_int(monoqueue_worker_pool_size,
95101
"MonoQueue Worker Pool Size (default: 4)",
96-
4,
102+
4,
103+
1, 32,
97104
false, false)
98105

99106
// Number of connection threads used by peloton
100107
SETTING_int(connection_thread_count,
101108
"Number of connection threads (default: std::hardware_concurrency())",
102-
std::thread::hardware_concurrency(), false, false)
109+
std::thread::hardware_concurrency(),
110+
1, 64,
111+
false, false)
112+
113+
SETTING_int(gc_num_threads,
114+
"The number of Garbage collection threads to run",
115+
1,
116+
1, 128,
117+
true, true)
103118

104119
//===----------------------------------------------------------------------===//
105120
// WRITE AHEAD LOG
@@ -127,6 +142,7 @@ SETTING_bool(display_settings,
127142
SETTING_int(stats_mode,
128143
"Enable statistics collection (default: 0)",
129144
static_cast<int>(peloton::StatsType::INVALID),
145+
0, 16,
130146
true, true)
131147

132148
//===----------------------------------------------------------------------===//
@@ -164,12 +180,14 @@ SETTING_string(peloton_address,
164180
SETTING_int(brain_task_queue_size,
165181
"Brain Task Queue Size (default: 32)",
166182
32,
183+
1, 128,
167184
false, false)
168185

169186
// Size of the brain worker pool
170187
SETTING_int(brain_worker_pool_size,
171188
"Brain Worker Pool Size (default: 1)",
172189
1,
190+
1, 16,
173191
false, false)
174192

175193
//===----------------------------------------------------------------------===//
@@ -199,7 +217,9 @@ SETTING_int(task_execution_timeout,
199217
"Maximum allowed length of time (in ms) for task "
200218
"execution step of optimizer, "
201219
"assuming one plan has been found (default 5000)",
202-
5000, true, true)
220+
5000,
221+
1000, 60000,
222+
true, true)
203223

204224
//===----------------------------------------------------------------------===//
205225
// GENERAL

src/include/settings/settings_macro.h

Lines changed: 40 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,16 @@
3333
#ifdef SETTING_string
3434
#undef SETTING_string
3535
#endif
36-
#define SETTING_int(name, description, default_value, is_mutable, is_persistent) \
36+
#define SETTING_int(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
3737
DEFINE_int32(name, default_value, description);
3838

39-
#define SETTING_double(name, description, default_value, is_mutable, is_persistent) \
39+
#define SETTING_double(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
4040
DEFINE_double(name, default_value, description);
4141

42-
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
42+
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
4343
DEFINE_bool(name, default_value, description);
4444

45-
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
45+
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
4646
DEFINE_string(name, default_value, description);
4747
#endif
4848

@@ -59,16 +59,16 @@
5959
#ifdef SETTING_string
6060
#undef SETTING_string
6161
#endif
62-
#define SETTING_int(name, description, default_value, is_mutable, is_persistent) \
62+
#define SETTING_int(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
6363
DECLARE_int32(name);
6464

65-
#define SETTING_double(name, description, default_value, is_mutable, is_persistent) \
65+
#define SETTING_double(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
6666
DECLARE_double(name);
6767

68-
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
68+
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
6969
DECLARE_bool(name);
7070

71-
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
71+
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
7272
DECLARE_string(name);
7373
#endif
7474

@@ -85,32 +85,40 @@
8585
#ifdef SETTING_string
8686
#undef SETTING_string
8787
#endif
88-
#define SETTING_int(name, description, default_value, is_mutable, is_persistent) \
89-
DefineSetting( \
90-
peloton::settings::SettingId::name, \
91-
#name, type::ValueFactory::GetIntegerValue(FLAGS_##name), \
92-
description, type::ValueFactory::GetIntegerValue(default_value), \
88+
#define SETTING_int(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
89+
DefineSetting( \
90+
peloton::settings::SettingId::name, \
91+
#name, type::ValueFactory::GetIntegerValue(FLAGS_##name), \
92+
description, type::ValueFactory::GetIntegerValue(default_value), \
93+
type::ValueFactory::GetIntegerValue(min_value), \
94+
type::ValueFactory::GetIntegerValue(max_value), \
9395
is_mutable, is_persistent);
9496

95-
#define SETTING_double(name, description, default_value, is_mutable, is_persistent) \
96-
DefineSetting( \
97-
peloton::settings::SettingId::name, \
98-
#name, type::ValueFactory::GetDecimalValue(FLAGS_##name), \
99-
description, type::ValueFactory::GetDecimalValue(default_value), \
97+
#define SETTING_double(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
98+
DefineSetting( \
99+
peloton::settings::SettingId::name, \
100+
#name, type::ValueFactory::GetDecimalValue(FLAGS_##name), \
101+
description, type::ValueFactory::GetDecimalValue(default_value), \
102+
type::ValueFactory::GetDecimalValue(min_value), \
103+
type::ValueFactory::GetDecimalValue(max_value), \
100104
is_mutable, is_persistent);
101105

102-
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
103-
DefineSetting( \
104-
peloton::settings::SettingId::name, \
105-
#name, type::ValueFactory::GetBooleanValue(FLAGS_##name), \
106-
description, type::ValueFactory::GetBooleanValue(default_value), \
106+
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
107+
DefineSetting( \
108+
peloton::settings::SettingId::name, \
109+
#name, type::ValueFactory::GetBooleanValue(FLAGS_##name), \
110+
description, type::ValueFactory::GetBooleanValue(default_value), \
111+
type::ValueFactory::GetBooleanValue(default_value), \
112+
type::ValueFactory::GetBooleanValue(default_value), \
107113
is_mutable, is_persistent);
108114

109-
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
110-
DefineSetting( \
111-
peloton::settings::SettingId::name, \
112-
#name, type::ValueFactory::GetVarcharValue(FLAGS_##name), \
113-
description, type::ValueFactory::GetVarcharValue(default_value), \
115+
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
116+
DefineSetting( \
117+
peloton::settings::SettingId::name, \
118+
#name, type::ValueFactory::GetVarcharValue(FLAGS_##name), \
119+
description, type::ValueFactory::GetVarcharValue(default_value), \
120+
type::ValueFactory::GetVarcharValue(default_value), \
121+
type::ValueFactory::GetVarcharValue(default_value), \
114122
is_mutable, is_persistent);
115123
#endif
116124

@@ -127,15 +135,15 @@
127135
#ifdef SETTING_string
128136
#undef SETTING_string
129137
#endif
130-
#define SETTING_int(name, description, default_value, is_mutable, is_persistent) \
138+
#define SETTING_int(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
131139
name,
132140

133-
#define SETTING_double(name, description, default_value, is_mutable, is_persistent) \
141+
#define SETTING_double(name, description, default_value, min_value, max_value, is_mutable, is_persistent) \
134142
name,
135143

136-
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
144+
#define SETTING_bool(name, description, default_value, is_mutable, is_persistent) \
137145
name,
138146

139-
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
147+
#define SETTING_string(name, description, default_value, is_mutable, is_persistent) \
140148
name,
141149
#endif

src/include/settings/settings_manager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ class SettingsManager : public Printable {
8282
const type::Value &value,
8383
const std::string &description,
8484
const type::Value &default_value,
85+
const type::Value &min_value,
86+
const type::Value &max_value,
8587
bool is_mutable, bool is_persistent);
8688

8789
type::Value GetValue(SettingId id);

src/include/type/value.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ class Value : public Printable {
129129
inline CmpBool CompareGreaterThanEquals(const Value &o) const {
130130
return Type::GetInstance(type_id_)->CompareGreaterThanEquals(*this, o);
131131
}
132+
inline bool CompareBetweenInclusive(const Value &a, const Value &b) const {
133+
return Type::GetInstance(type_id_)->CompareGreaterThanEquals(*this, a) == CmpBool::CmpTrue &&
134+
Type::GetInstance(type_id_)->CompareLessThanEquals(*this, b) == CmpBool::CmpTrue;
135+
}
132136

133137
// Other mathematical functions
134138
inline Value Add(const Value &o) const {

src/main/peloton/peloton.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,16 @@ int main(int argc, char *argv[]) {
7575
::google::HandleCommandLineHelpFlags();
7676
}
7777

78-
// Print settings
79-
if (peloton::settings::SettingsManager::GetBool(
80-
peloton::settings::SettingId::display_settings)) {
81-
auto &settings = peloton::settings::SettingsManager::GetInstance();
82-
settings.ShowInfo();
78+
try {
79+
// Print settings
80+
if (peloton::settings::SettingsManager::GetBool(
81+
peloton::settings::SettingId::display_settings)) {
82+
auto &settings = peloton::settings::SettingsManager::GetInstance();
83+
settings.ShowInfo();
84+
}
85+
} catch (peloton::SettingsException &exception) {
86+
peloton::LOG_ERROR("Cannot load settings. Failed with %s\n", exception.GetMessage().c_str());
87+
return 0; // TODO: Use an enum with exit error codes
8388
}
8489

8590
if (peloton::settings::SettingsManager::GetBool(

src/settings/settings_manager.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
#include <gflags/gflags.h>
1414

15+
#include "type/type_id.h"
1516
#include "catalog/settings_catalog.h"
1617
#include "common/exception.h"
1718
#include "concurrency/transaction_manager_factory.h"
@@ -116,6 +117,8 @@ const std::string SettingsManager::GetInfo() const {
116117
GetBool(SettingId::codegen) ? "enabled" : "disabled"));
117118
info.append(StringUtil::Format("%28s: %-28i\n", "Optimization Timeout",
118119
GetInt(SettingId::task_execution_timeout)));
120+
info.append(StringUtil::Format("%28s: %-28i\n", "Number of GC threads",
121+
GetInt(SettingId::gc_num_threads)));
119122
return StringBoxUtil::Box(info);
120123
}
121124

@@ -125,10 +128,25 @@ void SettingsManager::DefineSetting(SettingId id, const std::string &name,
125128
const type::Value &value,
126129
const std::string &description,
127130
const type::Value &default_value,
131+
const type::Value &min_value,
132+
const type::Value &max_value,
128133
bool is_mutable, bool is_persistent) {
129134
if (settings_.find(id) != settings_.end()) {
130135
throw SettingsException("settings " + name + " already exists");
131136
}
137+
138+
// Only below types support min-max bound checking
139+
if (value.GetTypeId() == type::TypeId::INTEGER ||
140+
value.GetTypeId() == type::TypeId::SMALLINT ||
141+
value.GetTypeId() == type::TypeId::TINYINT ||
142+
value.GetTypeId() == type::TypeId::DECIMAL) {
143+
if (!value.CompareBetweenInclusive(min_value, max_value))
144+
throw SettingsException("Value given for \"" + name +
145+
"\" is not in its min-max bounds (" +
146+
min_value.ToString() + "-" +
147+
max_value.ToString() + ")");
148+
}
149+
132150
settings_.emplace(id, Param(name, value, description, default_value,
133151
is_mutable, is_persistent));
134152
}

0 commit comments

Comments
 (0)