On Thu, Jul 08, 2010 at 12:41:21AM +0200, Steffen Hoffmann wrote:
> Don't let this be your last word on this topic.

With John kindly proposing his time, maybe it's not! Time will tell if me
and him have enough common interest to do the world any good. I will contact
you off-list in the coming weeks, John, thanks for your support.

> That said I like your idea about bringing Trac's database to a (more)
> relational structure. Even if I'm not remotely trained to do i/o related
> programming with Python, I wouldn't mind lending a helping hand for testing.

That's great news, thank you for offering :)

> Let me add a strong BUT now, since the initial post was not that strong
> about the foreseeable migration path. I wouldn't even think about any
> new Trac version that I couldn't upgrade to as I did by now. And I guess
> there is a considerable number of Trac application that do as I do:

I think you would reconsider this if the competing branch was on the market, 
and a viable migration path was possible. That's not true for all users, 
granted, but again the key is to serve for the *majority* long-term (who 
are not here), and not the minority (who are by definition quite happy 
with what they have already).

> stick with default SQLite database since the upgrade to next Trac
> version is guaranteed to work like a charm, so no need to become a real
> DB admin just to handle Trac. The automatic upgrade should be a
> must-have for any change and I urge you to not underestimate that point.

I would not underestimate that point in a million years, but in order to 
acheive this feat you must defy all sorts of universal laws. The core issue 
with the current codebase is a fatal design flaw, that has been present for 
a long time. Each and every single line of core and plugin code, is placed 
exactly where it is, and written exactly as it is, partly to compensate 
for that fact. The system is *HIGHLY* complex, and since there is no actual 
underlying data model, we *cannot* know what exists in the deployments in 
the field (that we are upgrading from).

Thus we have stumbled on one of the very, very few cases where a major 
rewrite is historically favoured over an iterative approach (see wizard 
post for philosophical details..).

Envision the current Trac system as a house, database is the basement, 
front-end (webui) on the top (middleware between).

These layers are *highly* interrelated, due to the fact that the ground 
in the basement is quicksand and not solid, all sorts of reinforcements 
have been built along the way, to compensate for the useless foundation. 
Every single stairway, window, duct, wirepath and reinforcement in the 
house have been put there, incrementally, throughout the products lifetime, 
partly because of the quicksand.

When you model a new house, built on solid ground, you handle the vast 
majority of such problems up-front to the actual building, so you don't 
have to restructure the house several times during the development process 
to keep it standing.

Now the key point, is to envision these systems as finished products, 
standing side by side. The furniture in the basement is the sum of data 
in an installation, the contents of sqlite.

In order to find a migration path, via code, between these systems, that 
retain compatibility throughout the process, you will need several million 
incremental commits (a huge patch-queue between houses, that *must* happen 
in the *EXACTLY* right order for the system to work as a whole at each 
transitional stage along the way). 

The old things that were invented because of the quicksand, have no direct 
counterpart whatsoever in the new system, and thus an incremental move 
between them is highly difficult.

Even if you had the finished new system to look at, you are still trying to 
move all the sand on a beach by picking up one microscopic grain at a time 
instead of using power tools.

To show the point in a different way - the new system has full multi-project 
support. In an upgrade process from old to new, where does this information 
come from? It is several existing *environments* in the old system, that will 
be represented as several *projects* in the new. 

Can anyone demonstrate prior art of a project that successfully acheived such 
a feat with an incremental approach?

Rewrite is the only cost-effective way, in terms of reaching the stated 
final goals of the project. If you are not doing the rewrite, you must 
change the goals (or knowingly spend your time with very low ROI).

I dispute your case that this functionality is realistically present today at 
all. Please show 20 different lists, each containing a combo of 5 or more 
plugins from trac-hacks or elsewhere, that will work as flawlessly as you 
describe in a move from 0.11 to 0.12 in a production environment today ;-)


Terje

-- 
You received this message because you are subscribed to the Google Groups "Trac 
Development" group.
To post to this group, send email to trac-...@googlegroups.com.
To unsubscribe from this group, send email to 
trac-dev+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/trac-dev?hl=en.

Reply via email to