Subject Re: [Firebird-Architect] Metadata cache
Author Alex Peshkov
On Sunday 10 August 2008 07:44, Alexandre Benson Smith wrote:
> Hi !
>
> Please, at first excuse my ignorance...
>
> I think in the ideal world any kind of metadata changes should be
> allowed no matter if the objects is in use or not. And I think this is
> the desired goal (and wich I like it to be).
>
> When I read "versoined metadata" I think something exactly as
> transaction isolation as one would get from "normal" records.
>
> Lets suppose:
>
> T1: Create Procedure P1
> T1 Commit
> T2: Starts
> T2 Execute Procedure P1
> T3 Starts
> T3 alter procedure P1
> T3 Commit
> T2 execute procedure P1 (version created by T1)
> T2 Commit
> T4 starts
> T4 execute prcoedure P1 (version created by T3)
>
> This would be the normal behaviour if the BLR would be read from system
> tables every time (in a non read commited transaction), so the problem
> lies on how to handle it on Metadata Cache.

Alexandre, this is certainly ideal and correct behavior for RepeatableRead
(concurrency) transaction. There may be some special modes (like stop and
rollback any transaction, using old copy of a modified object), but IMO
_normal_ behavior should be like you say. No matter what object do we work
with - procedure, table, generator or UDF.

But I'm afraid we do not have enough resources to rework (and debug) cache so
much in 3.0, where we need to make it thread-safe and try to avoid most
bad 'features'.

Hopefully sometimes later it will be implemented.