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
