On Oct 14, 2009, at 10:12 PM, Tobias Gerschner wrote:

Triggers will fire whenever the trigger condition is met. That may or may
not
be only once on upgrade. Just make sure the trigger body is prepared
to create symlinks iff the symlink does not already exist. Running a
trigger isn't particularly expensive, and the trigger condition should be tuned (by adding version comparison) to limit the trigger condition.

hth

73 de Jeff


Did you mean to say, that running triggers is an expensive operation ?
Why else would you tune to limit it's occurrence ?


Mostly just muttering about rpm devel on HEAD out loud ...

Triggers are potentially very costly because all added packages
get crossed against all installed packages 4 times while installing.

But the overhead is basically a database lookup, which almost always
finds nothing to do.

About a year ago, I generalized triggers to fire not just on package Name,
but also Provides, and directories and files and using glob patterns.

That _STILL_ is a tolerable overhead, looking up a key in a database
just isn't that expensive, and there just aren't that many triggers
in use.

The overhead of the new trigger implementation has been checked with callgrind.
The effects are visible, but tolerable.

However, watching the spewage from triggers hitting 4 indices 4 times for all files directories and trigger tokens in packages is starting to drive me batty.

The short term fix will be to add a Bloom filter on the indices to avoid hitting an rpmdb unnecessarily. Basically that avoids the debugging spewage, and saves my tired old eyes.

But the eventual fix will be to redesign the access to optimize away the overhead entirely. But that will require larger changes, including a rpmdb schema change, as well as consolidating the 4 rpmdb hits into a single pass operation to
pull out just those triggers that need to be run ...

None of the above has anything to do with the rpm that you are using,
nor is there significant performance degradation in rpm-5.1.7 and later
with the new trigger implementation.

The ability to trigger on not only package Name: but also
Provides: and directories and files and with patterns is a useful generalization, has recently appeared on the OpenSUSE RPM summit roadmap (but is already implemented @rpm5.org).

But what I was really trying to point out to you is that triggers fire
when the trigger condition is met. If you write the trigger condition too loosely, the triggers may fire where you are not expecting. You did say you expected triggers
to fire only once during upgrade ...

hth

73 de Jeff

______________________________________________________________________
RPM Package Manager                                    http://rpm5.org
User Communication List                             rpm-users@rpm5.org

Reply via email to