Skip to content

Commit 7ed1a35

Browse files
committed
Revert "Merge MaintenanceOptions into DatabaseManagerOptions and keep single execute method"
This reverts commit 2face88.
1 parent 2face88 commit 7ed1a35

3 files changed

Lines changed: 112 additions & 82 deletions

File tree

src/fb-cpp/DatabaseManager.cpp

Lines changed: 60 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -35,77 +35,76 @@ void DatabaseManager::execute(const DatabaseManagerOptions& options)
3535
StatusWrapper statusWrapper{getClient()};
3636
auto builder =
3737
fbUnique(getClient().getUtil()->getXpbBuilder(&statusWrapper, fb::IXpbBuilder::SPB_START, nullptr, 0));
38-
39-
const bool isRepair = options.getSweep() || options.getValidate() || options.getMend() ||
40-
options.getIgnoreChecksum() || options.getKillShadows() || options.getFull() || options.getCheckDb() ||
41-
options.getIcu() || options.getUpgradeDb() || options.getParallelWorkers().has_value();
42-
43-
if (isRepair)
44-
builder->insertTag(&statusWrapper, isc_action_svc_repair);
45-
else
46-
builder->insertTag(&statusWrapper, isc_action_svc_properties);
47-
38+
builder->insertTag(&statusWrapper, isc_action_svc_properties);
4839
builder->insertString(&statusWrapper, isc_spb_dbname, options.getDatabase().c_str());
4940

50-
if (isRepair)
51-
{
52-
int optionsVal = 0;
53-
if (options.getSweep())
54-
optionsVal |= isc_spb_rpr_sweep_db;
55-
if (options.getValidate())
56-
optionsVal |= isc_spb_rpr_validate_db;
57-
if (options.getMend())
58-
optionsVal |= isc_spb_rpr_mend_db;
59-
if (options.getIgnoreChecksum())
60-
optionsVal |= isc_spb_rpr_ignore_checksum;
61-
if (options.getKillShadows())
62-
optionsVal |= isc_spb_rpr_kill_shadows;
63-
if (options.getFull())
64-
optionsVal |= isc_spb_rpr_full;
65-
if (options.getCheckDb())
66-
optionsVal |= isc_spb_rpr_check_db;
67-
if (options.getIcu())
68-
optionsVal |= isc_spb_rpr_icu;
69-
if (options.getUpgradeDb())
70-
optionsVal |= isc_spb_rpr_upgrade_db;
71-
72-
if (optionsVal != 0)
73-
builder->insertInt(&statusWrapper, isc_spb_options, optionsVal);
74-
75-
if (const auto parallelWorkers = options.getParallelWorkers())
76-
builder->insertInt(&statusWrapper, isc_spb_rpr_par_workers, static_cast<int>(*parallelWorkers));
77-
}
78-
else
41+
if (const auto replicaMode = options.getReplicaMode())
7942
{
80-
if (const auto replicaMode = options.getReplicaMode())
43+
std::uint8_t modeVal = 0;
44+
switch (*replicaMode)
8145
{
82-
std::uint8_t modeVal = 0;
83-
switch (*replicaMode)
84-
{
85-
case ReplicaMode::NONE:
86-
modeVal = isc_spb_prp_rm_none;
87-
break;
88-
case ReplicaMode::READ_ONLY:
89-
modeVal = isc_spb_prp_rm_readonly;
90-
break;
91-
case ReplicaMode::READ_WRITE:
92-
modeVal = isc_spb_prp_rm_readwrite;
93-
break;
94-
default:
95-
assert(false);
96-
break;
97-
}
98-
builder->insertBytes(&statusWrapper, isc_spb_prp_replica_mode, &modeVal, 1u);
46+
case ReplicaMode::NONE:
47+
modeVal = isc_spb_prp_rm_none;
48+
break;
49+
case ReplicaMode::READ_ONLY:
50+
modeVal = isc_spb_prp_rm_readonly;
51+
break;
52+
case ReplicaMode::READ_WRITE:
53+
modeVal = isc_spb_prp_rm_readwrite;
54+
break;
55+
default:
56+
assert(false);
57+
break;
9958
}
59+
builder->insertBytes(&statusWrapper, isc_spb_prp_replica_mode, &modeVal, 1u);
10060
}
10161

10262
const auto buffer = builder->getBuffer(&statusWrapper);
10363
const auto length = builder->getBufferLength(&statusWrapper);
10464

10565
startAction(std::vector<std::uint8_t>(buffer, buffer + length));
66+
waitForCompletion();
67+
}
68+
10669

107-
if (isRepair)
108-
waitForCompletion(options.getVerboseOutput());
109-
else
110-
waitForCompletion();
70+
void DatabaseManager::execute(const MaintenanceOptions& options)
71+
{
72+
StatusWrapper statusWrapper{getClient()};
73+
auto builder =
74+
fbUnique(getClient().getUtil()->getXpbBuilder(&statusWrapper, fb::IXpbBuilder::SPB_START, nullptr, 0));
75+
76+
builder->insertTag(&statusWrapper, isc_action_svc_repair);
77+
builder->insertString(&statusWrapper, isc_spb_dbname, options.getDatabase().c_str());
78+
79+
int optionsVal = 0;
80+
if (options.getSweep())
81+
optionsVal |= isc_spb_rpr_sweep_db;
82+
if (options.getValidate())
83+
optionsVal |= isc_spb_rpr_validate_db;
84+
if (options.getMend())
85+
optionsVal |= isc_spb_rpr_mend_db;
86+
if (options.getIgnoreChecksum())
87+
optionsVal |= isc_spb_rpr_ignore_checksum;
88+
if (options.getKillShadows())
89+
optionsVal |= isc_spb_rpr_kill_shadows;
90+
if (options.getFull())
91+
optionsVal |= isc_spb_rpr_full;
92+
if (options.getCheckDb())
93+
optionsVal |= isc_spb_rpr_check_db;
94+
if (options.getIcu())
95+
optionsVal |= isc_spb_rpr_icu;
96+
if (options.getUpgradeDb())
97+
optionsVal |= isc_spb_rpr_upgrade_db;
98+
99+
if (optionsVal != 0)
100+
builder->insertInt(&statusWrapper, isc_spb_options, optionsVal);
101+
102+
if (const auto parallelWorkers = options.getParallelWorkers())
103+
builder->insertInt(&statusWrapper, isc_spb_rpr_par_workers, static_cast<int>(*parallelWorkers));
104+
105+
const auto buffer = builder->getBuffer(&statusWrapper);
106+
const auto length = builder->getBufferLength(&statusWrapper);
107+
108+
startAction(std::vector<std::uint8_t>(buffer, buffer + length));
109+
waitForCompletion(options.getVerboseOutput());
111110
}

src/fb-cpp/DatabaseManager.h

Lines changed: 48 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,22 +37,21 @@
3737
namespace fbcpp
3838
{
3939
///
40-
/// Represents options used to configure database properties or run maintenance operations through the service
41-
/// manager.
40+
/// Represents options used to configure database properties through the service manager.
4241
///
4342
class DatabaseManagerOptions final
4443
{
4544
public:
4645
///
47-
/// Returns the database path to be configured or maintained.
46+
/// Returns the database path to be configured.
4847
///
4948
const std::string& getDatabase() const
5049
{
5150
return database;
5251
}
5352

5453
///
55-
/// Sets the database path to be configured or maintained.
54+
/// Sets the database path to be configured.
5655
///
5756
DatabaseManagerOptions& setDatabase(const std::string& value)
5857
{
@@ -77,6 +76,34 @@ namespace fbcpp
7776
return *this;
7877
}
7978

79+
private:
80+
std::string database;
81+
std::optional<ReplicaMode> replicaMode;
82+
};
83+
84+
///
85+
/// Represents options used to run a database maintenance operation through the service manager.
86+
///
87+
class MaintenanceOptions final
88+
{
89+
public:
90+
///
91+
/// Returns the database path to be maintained.
92+
///
93+
const std::string& getDatabase() const
94+
{
95+
return database;
96+
}
97+
98+
///
99+
/// Sets the database path to be maintained.
100+
///
101+
MaintenanceOptions& setDatabase(const std::string& value)
102+
{
103+
database = value;
104+
return *this;
105+
}
106+
80107
///
81108
/// Returns the verbose output callback.
82109
///
@@ -88,7 +115,7 @@ namespace fbcpp
88115
///
89116
/// Sets the verbose output callback.
90117
///
91-
DatabaseManagerOptions& setVerboseOutput(ServiceManager::VerboseOutput value)
118+
MaintenanceOptions& setVerboseOutput(ServiceManager::VerboseOutput value)
92119
{
93120
verboseOutput = std::move(value);
94121
return *this;
@@ -105,7 +132,7 @@ namespace fbcpp
105132
///
106133
/// Sets the requested number of parallel workers.
107134
///
108-
DatabaseManagerOptions& setParallelWorkers(std::uint32_t value)
135+
MaintenanceOptions& setParallelWorkers(std::uint32_t value)
109136
{
110137
parallelWorkers = value;
111138
return *this;
@@ -122,7 +149,7 @@ namespace fbcpp
122149
///
123150
/// Sets whether database sweep is enabled.
124151
///
125-
DatabaseManagerOptions& setSweep(bool value)
152+
MaintenanceOptions& setSweep(bool value)
126153
{
127154
sweep = value;
128155
return *this;
@@ -139,7 +166,7 @@ namespace fbcpp
139166
///
140167
/// Sets whether database validation is enabled.
141168
///
142-
DatabaseManagerOptions& setValidate(bool value)
169+
MaintenanceOptions& setValidate(bool value)
143170
{
144171
validate = value;
145172
return *this;
@@ -156,7 +183,7 @@ namespace fbcpp
156183
///
157184
/// Sets whether database mending is enabled.
158185
///
159-
DatabaseManagerOptions& setMend(bool value)
186+
MaintenanceOptions& setMend(bool value)
160187
{
161188
mend = value;
162189
return *this;
@@ -173,7 +200,7 @@ namespace fbcpp
173200
///
174201
/// Sets whether checksum verification is ignored.
175202
///
176-
DatabaseManagerOptions& setIgnoreChecksum(bool value)
203+
MaintenanceOptions& setIgnoreChecksum(bool value)
177204
{
178205
ignoreChecksum = value;
179206
return *this;
@@ -190,7 +217,7 @@ namespace fbcpp
190217
///
191218
/// Sets whether killing database shadows is enabled.
192219
///
193-
DatabaseManagerOptions& setKillShadows(bool value)
220+
MaintenanceOptions& setKillShadows(bool value)
194221
{
195222
killShadows = value;
196223
return *this;
@@ -207,7 +234,7 @@ namespace fbcpp
207234
///
208235
/// Sets whether full validation is enabled.
209236
///
210-
DatabaseManagerOptions& setFull(bool value)
237+
MaintenanceOptions& setFull(bool value)
211238
{
212239
full = value;
213240
return *this;
@@ -224,7 +251,7 @@ namespace fbcpp
224251
///
225252
/// Sets whether checking only metadata/structure is enabled.
226253
///
227-
DatabaseManagerOptions& setCheckDb(bool value)
254+
MaintenanceOptions& setCheckDb(bool value)
228255
{
229256
checkDb = value;
230257
return *this;
@@ -241,7 +268,7 @@ namespace fbcpp
241268
///
242269
/// Sets whether recreating ICU indexes is enabled.
243270
///
244-
DatabaseManagerOptions& setIcu(bool value)
271+
MaintenanceOptions& setIcu(bool value)
245272
{
246273
icu = value;
247274
return *this;
@@ -258,15 +285,14 @@ namespace fbcpp
258285
///
259286
/// Sets whether database upgrade is enabled.
260287
///
261-
DatabaseManagerOptions& setUpgradeDb(bool value)
288+
MaintenanceOptions& setUpgradeDb(bool value)
262289
{
263290
upgradeDb = value;
264291
return *this;
265292
}
266293

267294
private:
268295
std::string database;
269-
std::optional<ReplicaMode> replicaMode;
270296
ServiceManager::VerboseOutput verboseOutput;
271297
std::optional<std::uint32_t> parallelWorkers;
272298
bool sweep = false;
@@ -290,9 +316,14 @@ namespace fbcpp
290316

291317
public:
292318
///
293-
/// Configures or maintains database using the provided options.
319+
/// Configures database properties using the provided options.
294320
///
295321
void execute(const DatabaseManagerOptions& options);
322+
323+
///
324+
/// Runs a maintenance or repair operation using the provided options.
325+
///
326+
void execute(const MaintenanceOptions& options);
296327
};
297328
} // namespace fbcpp
298329

src/test/DatabaseManager.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -177,18 +177,18 @@ BOOST_AUTO_TEST_CASE(databaseSweepAndValidate)
177177
DatabaseManager manager{CLIENT, makeServiceManagerOptions()};
178178

179179
// 1. Run database sweep
180-
BOOST_CHECK_NO_THROW(manager.execute(DatabaseManagerOptions().setDatabase(databasePath).setSweep(true)));
180+
BOOST_CHECK_NO_THROW(manager.execute(MaintenanceOptions().setDatabase(databasePath).setSweep(true)));
181181

182182
// 2. Run multi-threaded database sweep
183183
BOOST_CHECK_NO_THROW(
184-
manager.execute(DatabaseManagerOptions().setDatabase(databasePath).setSweep(true).setParallelWorkers(4)));
184+
manager.execute(MaintenanceOptions().setDatabase(databasePath).setSweep(true).setParallelWorkers(4)));
185185

186186
// 3. Run database validation
187187
BOOST_CHECK_NO_THROW(
188-
manager.execute(DatabaseManagerOptions().setDatabase(databasePath).setValidate(true).setFull(true)));
188+
manager.execute(MaintenanceOptions().setDatabase(databasePath).setValidate(true).setFull(true)));
189189

190190
// 4. Run database upgrade (minor ODS upgrade)
191-
BOOST_CHECK_NO_THROW(manager.execute(DatabaseManagerOptions().setDatabase(databasePath).setUpgradeDb(true)));
191+
BOOST_CHECK_NO_THROW(manager.execute(MaintenanceOptions().setDatabase(databasePath).setUpgradeDb(true)));
192192

193193
Attachment cleanup{CLIENT, databaseUri, attachmentOptions};
194194
cleanup.dropDatabase();

0 commit comments

Comments
 (0)