On 12/24/2014 12:35 PM, Dimitry Sibiryakov wrote:
> No, an older engine can't know what has changed, so there is no way it
> can access a more recent minor ODS.
>     AFAIU, minor changes are minor because they don't need any special 
> treatment, they can
> be just ignored by older engines.
>     For example, I'm developing a new engine with replication inside, so I 
> add new field
> RDB$REPLICATED into RDB$RELATIONS. My new engine needs this field, it cannot 
> work without
> it, so I raise ODS version and refuse to work with old databases. But older 
> engines cannot
> replicate, they can work with all databases as usual, no matter if the field 
> is there or
> not. That's why this change is a minor one.
>     IMHO.

That just isn't correct.  The minor version is bumped when a change is 
made to the ODS that the engine must be aware of.  For example, if a new 
index encoding is added, a new engine must be able to handle both the 
old and new formats, but an old engine can't possibly understand the new 
format.  So the minor version is bumped to prevent an older engine from 
bugchecking or corrupting the database.

>
>> By definition, an engine must be able to understand all earlier minor
>> versions of the same major version.  It new system fields aren't there,
>> the engine must be able to work around that.
>     Workarounding mean checks in the code. Previous Firebird versions used to 
> workaround
> major ODS changes. That was ugly and hard to maintenance.

It well might mean version checks in the code.  That's the cost of 
forward compatibility.

No engine should ever attempt to handle two major versions.  If it was 
done it past, it was a mistake.  If a single engine can handle an ODS 
change, then it is by definition a minor change.  If it is not feasible 
for a single engine to handle both the new and the old formats, then, 
and only then, should be major version be bumped.

The fact that this has been misunderstood in the past doesn't make it 
correct.

Historically, Firebird has had more major version changes that have been 
strictly required.  Many have been forced by changes to system tables 
that could otherwise be handled as minor versions. Rethinking the start 
up strategy to allow extensions to system tables as updates in place 
would go a long way to enabling a greater degree of upwards compatibility.

>


------------------------------------------------------------------------------
Dive into the World of Parallel Programming! The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to