From: <asf...@us...> - 2010-06-12 19:22:30
|
Revision: 51245 http://firebird.svn.sourceforge.net/firebird/?rev=51245&view=rev Author: asfernandes Date: 2010-06-12 19:22:24 +0000 (Sat, 12 Jun 2010) Log Message: ----------- Backported fix for CORE-2985 - The new 2.5 feature to alter COMPUTED columns doesn't handle dependencies well. Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2010-06-12 16:49:39 UTC (rev 51244) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2010-06-12 19:22:24 UTC (rev 51245) @@ -4143,11 +4143,14 @@ break; } - // Look to see if an object of the desired type is being deleted. + // Look to see if an object of the desired type is being deleted or modified. + // For an object being modified we verify dependencies separately when we parse its BLR. for (const DeferredWork* work = transaction->tra_deferred_job->work; work; work = work->getNext()) { if ((work->dfw_type == dfw_type || - (work->dfw_type == dfw_modify_procedure && dfw_type == dfw_delete_procedure)) && + (work->dfw_type == dfw_modify_procedure && dfw_type == dfw_delete_procedure) || + (work->dfw_type == dfw_modify_field && dfw_type == dfw_delete_global) || + (work->dfw_type == dfw_modify_trigger && dfw_type == dfw_delete_trigger)) && work->dfw_name == object_name && (!rel_id || rel_id == work->dfw_id)) { if (work->dfw_type == dfw_modify_procedure) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2010-07-26 11:05:20
|
Revision: 51370 http://firebird.svn.sourceforge.net/firebird/?rev=51370&view=rev Author: hvlad Date: 2010-07-26 11:05:14 +0000 (Mon, 26 Jul 2010) Log Message: ----------- Backport fix for bug CORE-3079 : Strong slowing down inserts with EVENT-s in a single transaction Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2010-07-26 10:51:00 UTC (rev 51369) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2010-07-26 11:05:14 UTC (rev 51370) @@ -620,15 +620,20 @@ oldSp->hash.remove(*work); // After ++itr work->dfw_sav_number = new_sav_number; - if (!newSp->hash.lookup(*work)) + DeferredWork* foundWork = newSp->hash.lookup(*work); + if (!foundWork) { newSp->hash.add(work); } else { + foundWork->dfw_count += work->dfw_count; delete work; } } + + job->hash.remove(old_sav_number); + delete oldSp; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2011-01-31 10:32:23
|
Revision: 52235 http://firebird.svn.sourceforge.net/firebird/?rev=52235&view=rev Author: hvlad Date: 2011-01-31 10:32:17 +0000 (Mon, 31 Jan 2011) Log Message: ----------- Fixed bug CORE-3095 : Client receive event's with count equal to 1 despite of how many times EVENT was POSTed in same transaction Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2011-01-31 00:13:15 UTC (rev 52234) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2011-01-31 10:32:17 UTC (rev 52235) @@ -890,6 +890,7 @@ DeferredWork* work = sp->hash.lookup(tmp); if (work) { + work->dfw_count++; return work; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <hv...@us...> - 2011-07-17 09:38:28
|
Revision: 53327 http://firebird.svn.sourceforge.net/firebird/?rev=53327&view=rev Author: hvlad Date: 2011-07-17 09:38:21 +0000 (Sun, 17 Jul 2011) Log Message: ----------- Fixed bug CORE-3549 : Database corruption after end of session : page xxx is of wrong type expected 4 found 7 Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2011-07-17 03:31:24 UTC (rev 53326) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2011-07-17 09:38:21 UTC (rev 53327) @@ -1975,14 +1975,15 @@ FOR(REQUEST_HANDLE request) IDX IN RDB$INDICES CROSS REL IN RDB$RELATIONS OVER RDB$RELATION_NAME WITH - IDX.RDB$INDEX_NAME EQ work->dfw_name.c_str() + IDX.RDB$INDEX_NAME EQ work->dfw_name.c_str() AND + REL.RDB$RELATION_ID NOT MISSING gtt_preserve = (REL.RDB$RELATION_TYPE == rel_global_temp_preserve); - relation = MET_lookup_relation(tdbb, REL.RDB$RELATION_NAME); + relation = MET_lookup_relation_id(tdbb, REL.RDB$RELATION_ID, false); END_FOR; CMP_release(tdbb, request); } - else + else if (work->dfw_id > 0) { relation = MET_lookup_relation_id(tdbb, work->dfw_id, false); gtt_preserve = (relation) && (relation->rel_flags & REL_temp_conn); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2014-04-05 18:08:44
|
Revision: 59369 http://sourceforge.net/p/firebird/code/59369 Author: dimitr Date: 2014-04-05 18:08:41 +0000 (Sat, 05 Apr 2014) Log Message: ----------- Simplest solution for CORE-4386: Report more details for "object in use" errors. Also, I've removed the database filename from the error message for security reasons. v3 is going to get a more complete solution. Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2014-04-05 09:18:41 UTC (rev 59368) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2014-04-05 18:08:41 UTC (rev 59369) @@ -402,6 +402,28 @@ static void check_partners(thread_db*, const USHORT); static string get_string(const dsc* desc); +static void raiseDbInUseError(bool timeout) +{ + if (timeout) + { + ERR_post(Arg::Gds(isc_no_meta_update) << + Arg::Gds(isc_lock_timeout) << + Arg::Gds(isc_obj_in_use) << Arg::Str("DATABASE")); + } + + ERR_post(Arg::Gds(isc_no_meta_update) << + Arg::Gds(isc_obj_in_use) << Arg::Str("DATABASE")); +} + +static void raiseObjInUseError(const string& obj_type, const string& obj_name) +{ + string name; + name.printf("%s \"%s\"", obj_type.c_str(), obj_name.c_str()); + + ERR_post(Arg::Gds(isc_no_meta_update) << + Arg::Gds(isc_obj_in_use) << Arg::Str(name)); +} + static const UCHAR nonnull_validation_blr[] = { blr_version5, @@ -1049,14 +1071,10 @@ return true; case 3: - if (CCH_exclusive(tdbb, LCK_EX, WAIT_PERIOD)) - return true; + if (!CCH_exclusive(tdbb, LCK_EX, WAIT_PERIOD)) + raiseDbInUseError(true); + return true; - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_lock_timeout) << - Arg::Gds(isc_obj_in_use) << Arg::Str(dbb->dbb_filename)); - return false; - case 4: CCH_flush(tdbb, FLUSH_FINI, 0L); max = PageSpace::maxAlloc(dbb) + 1; @@ -1231,8 +1249,7 @@ /* We cannot add a file to a shadow that is still * in the process of being created. */ - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(dbb->dbb_filename)); + raiseDbInUseError(false); } break; } @@ -3400,8 +3417,7 @@ index->idl_count++; } - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str("INDEX")); + raiseObjInUseError("INDEX", arg->dfw_name); } index->idl_count++; } @@ -3589,10 +3605,7 @@ if (procedure->prc_existence_lock) { if (!LCK_convert(tdbb, procedure->prc_existence_lock, LCK_EX, transaction->getLockWait())) - { - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); - } + raiseObjInUseError("PROCEDURE", work->dfw_name); } /* If we are in a multi-client server, someone else may have marked @@ -3614,8 +3627,7 @@ if (procedure->prc_use_count && MET_procedure_in_use(tdbb, procedure)) { /* - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); + raiseObjInUseError("PROCEDURE", work->dfw_name); */ gds__log("Deleting procedure %s which is currently in use by active user requests", work->dfw_name.c_str()); @@ -3635,8 +3647,7 @@ if (CMP_clone_is_active(procedure->prc_request)) { procedure->prc_flags = old_flags; - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); + raiseObjInUseError("PROCEDURE", work->dfw_name); } MET_release_procedure_request(tdbb, procedure); @@ -3765,11 +3776,11 @@ if (relation->rel_use_count || (relation->rel_existence_lock && !LCK_convert(tdbb, relation->rel_existence_lock, LCK_EX, transaction->getLockWait()))) { - if (adjusted) { + if (adjusted) ++relation->rel_use_count; - } - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); + + const string obj_type = relation->isView() ? "VIEW" : "TABLE"; + raiseObjInUseError(obj_type, work->dfw_name); } fb_assert(!relation->rel_use_count); @@ -3812,10 +3823,7 @@ } if (relation->rel_sweep_count) - { - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); - } + raiseObjInUseError("TABLE", work->dfw_name); #ifdef GARBAGE_THREAD // Free any memory associated with the relation's garbage collection bitmap @@ -5022,10 +5030,7 @@ /* Let procedure be deleted if only this transaction is using it */ if (!LCK_convert(tdbb, procedure->prc_existence_lock, LCK_EX, transaction->getLockWait())) - { - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); - } + raiseObjInUseError("PROCEDURE", work->dfw_name); } /* If we are in a multi-client server, someone else may have marked @@ -5047,8 +5052,7 @@ if (procedure->prc_use_count && MET_procedure_in_use(tdbb, procedure)) { /* - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); + raiseObjInUseError("PROCEDURE", work->dfw_name); */ gds__log("Modifying procedure %s which is currently in use by active user requests", work->dfw_name.c_str()); @@ -5079,8 +5083,7 @@ if (procedure->prc_request) { if (CMP_clone_is_active(procedure->prc_request)) - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(work->dfw_name)); + raiseObjInUseError("PROCEDURE", work->dfw_name); /* release the request */ @@ -5378,10 +5381,8 @@ } } - if (inUse ) { - ERR_post(Arg::Gds(isc_no_meta_update) << - Arg::Gds(isc_obj_in_use) << Arg::Str(relation->rel_name)); - } + if (inUse) + raiseObjInUseError("TABLE", relation->rel_name.c_str()); return relLock; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2015-12-17 19:14:47
|
Revision: 62690 http://sourceforge.net/p/firebird/code/62690 Author: roman-simakov Date: 2015-12-17 19:14:44 +0000 (Thu, 17 Dec 2015) Log Message: ----------- Fixed request leakage due modify indecies Modified Paths: -------------- firebird/branches/B2_5_Release/src/jrd/dfw.epp Modified: firebird/branches/B2_5_Release/src/jrd/dfw.epp =================================================================== --- firebird/branches/B2_5_Release/src/jrd/dfw.epp 2015-12-17 15:54:16 UTC (rev 62689) +++ firebird/branches/B2_5_Release/src/jrd/dfw.epp 2015-12-17 19:14:44 UTC (rev 62690) @@ -2179,9 +2179,8 @@ const USHORT id = IDX.RDB$INDEX_ID - 1; IDX_statistics(tdbb, relation, id, selectivity); DFW_update_index(work->dfw_name.c_str(), id, selectivity, transaction); - - EXE_unwind(tdbb, request); } + EXE_unwind(tdbb, request); return false; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |