Hi Terje,

>> 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).

Besides that trac definitely needs an ORM (something of which Christian is
strongly against), I do not think that the design is flawed.

As to complexity, yes, but given a few day's hours, one can easily
understand the request processing model inherent to trac.

And, as far as my understanding goes, it is rather straight forward,
compared to for example Java based JEE servers.

And, besides that, database upgrades are actually handled very well. This,
however, is only for the most generic case, e.g. trac using
sqlite/mysql/postgresql. If you have an installation that uses a different
dbms backend, or you have a highly patched version of trac, then it is up
to you to either publish your patches so that the community can benefit,
else you will have to redo your patches over and over again with every new
trac release that requires changes to the data model.

> 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..).

Major rewrite is out of question with the current main developer base, as
there are only two and both of them have a RL.

> 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.

Hm, I do not think that the data model is that flawed, otherwise I would
not have taken the track of adopting trac for my personal needs. Having
reviewed many code based prior to sticking to one particular system has
led me to trac, since its inherent architecture is easy to grasp and to
extend upon. Except for the binding towards the data model not being based
on an ORM of some sort, but this is only of low priority to me, as long as
the data model does not feature any redundancies or is overly complex. And
both is not the case with trac's datamodel.

> 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.

This is not common in software architectures, as you know. Even Eclipse,
with its plugin/extension point based architecture is subject to
degeneration, unless the developers keep everything up to date, even more
so the plugin developers.

Software systems are always evolving and are never built on top of solid
ground, to put up your phrase. The same holds true for data models and
schemas deployed to a given dbms.

As for trac's core component based, extensible architecture, it was even
adopted by a different group lately. And, for my part, I must say that it
is very well done, easy to understand once you get into python meta
classes,
and also very easy to extend upon.

> 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.

Ah now, I begin to understand your rambling more clearly.
Afaik, this is already the case with trac, and if it is not it can be
implemented very easily. Bitten also features or rather will feature such
an atomic upgrade mechanism.

For my own plugins, which have not been released yet, I have implemented a
very similar mechanism that will update the data model and the schema
deployed in the database and the data therein incrementally.
And, hopefully, even on failure, it will be able to continue upgrading the
system from where it last failed.
Basically, this is just an attribute in the system table, which gets
incrementally updated, for each upgrade available.

If interest exists, I would be glad sharing this with the developers of
trac a/o bitten, but since it is based on the original trac upgrade
mechanism, it would be rather simple for you to also figure it out :D

> 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.

Now you are talking in riddles. What power tools are you talking about? ORM?
Ask Christian about ORM and his opinion on this. I for my part would
definitely favour the move towards an ORM, be it SQLAlchemy or a self
developed ORM hosted on edgewall.org.

However, introducing an ORM means extra complexity for plugin developers.
As of now, trac has been really easy to grasp by even newbies in python,
so they could develop their own extensions, or adopt existing extensions
for their purpose.

> 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.

This is old talks. And many before you have talked about the subject and
failed contributing working code.

Given, the current system only supports a single project per IP, or
multiple projects per IP which are all different instances of trac.

So, perhaps, trac needs a new uberproject view/browser/community site
solution that would integrate existing projects into a single uber
project?

Perhaps you ask osimons on #trac for more information on how to do it.
For granted, they are using a heavily patched version of trac.

And as far as my reckoning goes, this might be one reason for trac
evolving so slow into a more multi project solution.

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

sourceforge?

> 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).

Hey, we are talking about a community hosted and developed OSS project
here, we do not talk finance nor ROI. It is all done in the people's spare
time, since the original developer, the company once called edgewall, has
gone. In case you missed that point, I'd like to make it clear to you.

As for a complete rewrite, I would be in for this, if you can spare a hand
or two joining the effort.

> 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 ;-)

As was previously stated, even for the major IDEs today, adopted by most
companies in the world, namely either Eclipse or NetBeans, plugin
developers must adopt to changes as soon as they come or they will become
incompatible with the new release.

This is the way software goes, even more so with integrated environments
or platforms thereof.

As a side note: What trac needs is active developers and of course
developers that can be architects, or architects that are also active
developers. Sort of, eat your own dog food - even providing working
prototypes of your supposedly new architecture would help. Even UML
diagrams or text based proposals of the new architecture would help in
stirring a conversation on of moving towards the next gen trac
architecture.

I for my part could join your effort, having done research in this field
for a couple of years now.

Merely speaking in riddles and general rambling will not help, though.

Of course, you are just like me. Before adopting an idea, I will rant on
it, curse upon its deficiencies (not so with Windows though, as it is
always a decificiency). But once I get into it, and especially more so if
the code base is clean, I accept it.

See also http://www.chinapage.com/gnl.html#01 for a more philosophical
aspect on the flow of things and the way things are (Lao Tze, Tao Te
Ching).

-- Carsten


-- 
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