8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-02 10:00:38 +01:00

Change error by warning in the case when isc_dpb_parallel_workers value is not at valid range.

gbak's restore now shows warnings after create database.
This commit is contained in:
Vlad Khorsun 2023-04-03 16:37:42 +03:00
parent 24d5c85a93
commit 333be4bfd4
4 changed files with 27 additions and 9 deletions

View File

@ -1054,6 +1054,11 @@ void create_database(BurpGlobals* tdgbl, Firebird::IProvider* provider, const TE
// msg 33 failed to create database %s
}
if (status_vector->getState() & Firebird::IStatus::STATE_WARNINGS)
{
BURP_print_warning(&status_vector);
}
// get remote protocol version
ProtocolVersion pv(&tdgbl->gbl_network_protocol);
Firebird::UtilInterfacePtr()->getFbVersion(&status_vector, DB, &pv);

View File

@ -964,3 +964,4 @@ FB_IMPL_MSG(JRD, 962, wrong_proc_plan, -281, "HY", "000", "Procedures cannot spe
FB_IMPL_MSG(JRD, 963, invalid_blob_util_handle, -402, "42", "000", "Invalid RDB$BLOB_UTIL handle")
FB_IMPL_MSG(JRD, 964, bad_temp_blob_id, -402, "42", "000", "Invalid temporary BLOB ID")
FB_IMPL_MSG(JRD, 965, ods_upgrade_err, -901, "HY", "000", "ODS upgrade failed while adding new system %s")
FB_IMPL_MSG(JRD, 966, bad_par_workers, -924, "HY", "000", "Wrong parallel workers value @1, valid range are from 1 to @2")

View File

@ -325,6 +325,7 @@ namespace Jrd {
{
if (flags & CRYPT_HDR_INIT)
{
ThreadStatusGuard guard(tdbb);
if (LCK_lock(tdbb, stateLock, CRYPT_INIT, LCK_NO_WAIT))
{
LCK_write_data(tdbb, stateLock, 1);
@ -341,6 +342,7 @@ namespace Jrd {
}
else
{
ThreadStatusGuard guard(tdbb);
if (!LCK_convert(tdbb, stateLock, CRYPT_NORMAL,
(flags & CRYPT_HDR_NOWAIT) ? LCK_NO_WAIT : LCK_WAIT))
{
@ -351,7 +353,6 @@ namespace Jrd {
else
slowIO = 0;
}
tdbb->tdbb_status_vector->init();
PhysHdr hdr(tdbb);
crypt = hdr->hdr_flags & Ods::hdr_encrypted;

View File

@ -1740,7 +1740,9 @@ JAttachment* JProvider::internalAttach(CheckStatusWrapper* user_status, const ch
guardDbInit.leave();
}
EngineContextHolder tdbb(user_status, jAtt, FB_FUNCTION, AttachmentHolder::ATT_DONT_LOCK);
// Don't pass user_status into ctor to keep warnings
EngineContextHolder tdbb(nullptr, jAtt, FB_FUNCTION, AttachmentHolder::ATT_DONT_LOCK);
tdbb->tdbb_status_vector = user_status;
attachment->att_crypt_callback = getDefCryptCallback(cryptCallback);
attachment->att_client_charset = attachment->att_charset = options.dpb_interp;
@ -2909,7 +2911,9 @@ JAttachment* JProvider::createDatabase(CheckStatusWrapper* user_status, const ch
Sync dbbGuard(&dbb->dbb_sync, "createDatabase");
dbbGuard.lock(SYNC_EXCLUSIVE);
EngineContextHolder tdbb(user_status, jAtt, FB_FUNCTION, AttachmentHolder::ATT_DONT_LOCK);
// Don't pass user_status into ctor to keep warnings
EngineContextHolder tdbb(nullptr, jAtt, FB_FUNCTION, AttachmentHolder::ATT_DONT_LOCK);
tdbb->tdbb_status_vector = user_status;
attachment->att_crypt_callback = getDefCryptCallback(cryptCallback);
@ -7240,13 +7244,20 @@ void DatabaseOptions::get(const UCHAR* dpb, USHORT dpb_length, bool& invalid_cli
case isc_dpb_parallel_workers:
dpb_parallel_workers = (SSHORT) rdr.getInt();
if (dpb_parallel_workers > Config::getMaxParallelWorkers() ||
dpb_parallel_workers < 0)
{
string str;
str.printf("Wrong parallel workers value %i, valid range are from 1 to %i",
dpb_parallel_workers, Config::getMaxParallelWorkers());
ERR_post(Arg::Gds(isc_bad_dpb_content) << Arg::Gds(isc_random) << Arg::Str(str));
const auto maxWorkers = Config::getMaxParallelWorkers();
if (dpb_parallel_workers > maxWorkers || dpb_parallel_workers < 0)
{
// "Wrong parallel workers value @1, valid range are from 1 to @2"
ERR_post_warning(Arg::Warning(isc_bad_par_workers) <<
Arg::Num(dpb_parallel_workers) <<
Arg::Num(maxWorkers));
if (dpb_parallel_workers < 0)
dpb_parallel_workers = 1;
else
dpb_parallel_workers = maxWorkers;
}
}
break;