@@ -35,76 +35,77 @@ 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- builder->insertTag (&statusWrapper, isc_action_svc_properties);
39- builder->insertString (&statusWrapper, isc_spb_dbname, options.getDatabase ().c_str ());
40-
41- if (const auto replicaMode = options.getReplicaMode ())
42- {
43- std::uint8_t modeVal = 0 ;
44- switch (*replicaMode)
45- {
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 ;
58- }
59- builder->insertBytes (&statusWrapper, isc_spb_prp_replica_mode, &modeVal, 1u );
60- }
6138
62- const auto buffer = builder->getBuffer (&statusWrapper);
63- const auto length = builder->getBufferLength (&statusWrapper);
64-
65- startAction (std::vector<std::uint8_t >(buffer, buffer + length));
66- waitForCompletion ();
67- }
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 ();
6842
43+ if (isRepair)
44+ builder->insertTag (&statusWrapper, isc_action_svc_repair);
45+ else
46+ builder->insertTag (&statusWrapper, isc_action_svc_properties);
6947
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);
7748 builder->insertString (&statusWrapper, isc_spb_dbname, options.getDatabase ().c_str ());
7849
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;
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;
9871
99- if (optionsVal != 0 )
100- builder->insertInt (&statusWrapper, isc_spb_options, optionsVal);
72+ if (optionsVal != 0 )
73+ builder->insertInt (&statusWrapper, isc_spb_options, optionsVal);
10174
102- if (const auto parallelWorkers = options.getParallelWorkers ())
103- builder->insertInt (&statusWrapper, isc_spb_rpr_par_workers, static_cast <int >(*parallelWorkers));
75+ if (const auto parallelWorkers = options.getParallelWorkers ())
76+ builder->insertInt (&statusWrapper, isc_spb_rpr_par_workers, static_cast <int >(*parallelWorkers));
77+ }
78+ else
79+ {
80+ if (const auto replicaMode = options.getReplicaMode ())
81+ {
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 );
99+ }
100+ }
104101
105102 const auto buffer = builder->getBuffer (&statusWrapper);
106103 const auto length = builder->getBufferLength (&statusWrapper);
107104
108105 startAction (std::vector<std::uint8_t >(buffer, buffer + length));
109- waitForCompletion (options.getVerboseOutput ());
106+
107+ if (isRepair)
108+ waitForCompletion (options.getVerboseOutput ());
109+ else
110+ waitForCompletion ();
110111}
0 commit comments