rpm-5.4.10-22.i686 loops forever when installing ntpd-4.2.6p5-5.i686.rpm
Jeffrey Johnson
n3npq at me.com
Sat Dec 1 16:55:14 CET 2012
On Dec 1, 2012, at 6:23 AM, Jeffrey Johnson <n3npq at me.com> wrote:
>>
>> Both permutations are wrong, $1 and $2 should be 1 in both cases.
>>
>> [root at sith RPMS]# rpm -Uvh test-0.1-0.1.noarch.rpm
>> Preparing... ########################################### [100%]
>> 1:test ########################################### [100%]
>> [root at sith RPMS]# rpm -Uvh test-target-0.1-0.1.noarch.rpm
>> Preparing... ########################################### [100%]
>> 1:test-target ########################################### [100%]
>> triggerin:test-0.1-0.1
>> #: 2
>> 1: 1
>> 2: 0
>>
>> [root at sith RPMS]# rpm -Uvh test-target-0.1-0.1.noarch.rpm
>> Preparing... ########################################### [100%]
>> 1:test-target ########################################### [100%]
>> [root at sith RPMS]# rpm -Uvh test-0.1-0.1.noarch.rpm
>> Preparing... ########################################### [100%]
>> 1:test ########################################### [100%]
>> triggerin:test-0.1-0.1
>> #: 2
>> 1: 0
>> 2: 1
>>
>
> OK I will look this weekend.
>
(aside)
Good: The behavior is symmetric when permuted.
The documentation states that $1/$2 are the number of pkg instances
after the script is run. This isn't precise enough a definition
when there is an ACID transaction with a 2phase commit/discard
(as in rpm5).
The definition of "installed" is the same (in rpm-5.4.10) as
Is the database transaction committed?
The commit depends on whether scripts/triggers
(with the $1/$2 counts) succeed. In addition,
the status of all scripts run during install
is added to the header before being saved in an
rpmdb.
This leads to a chicken <=> egg behavior, where the
header cannot be committed until the scripts are run
and the script arguments can't be computed until the
header is committed in the rpmdb.
(aside)
There is the further issue of what degree of isolation
(and visibility) of concurrent transactions. The code
as written has full degree 2 isolation; if the header
is added to the rpmdb sooner, and pending/uncommitted
data is made visible, then the counts would be as you expect.
Until saved (and the ACID transaction is committed), the
0 being seen above is consistent with interpreting
installed == header registered/committed
(see the PSM_POST case in lib/psm.c,
where the rpmtxnCommit() call is done as part of PSM_RPMDB_ADD).
I'm inclined atm to prefer the above actual behavior to "fudging" an
extra +1 for "legacy compatible" behavior; I'm sure we disagree here.
Short answer: patch in an extra +1 (there will be two code paths in need
of patching, check for symmetry as above) if you wish "legacy compatible" behavior.
hth
73 de Jeff
More information about the pld-devel-en
mailing list