On Tue, 21 Apr 2009, Panu Matilainen wrote:
On Tue, 21 Apr 2009, Richard Hughes wrote:
On Tue, 2009-04-21 at 08:35 -0400, Seth Vidal wrote:
Safe how? It's likely the package won't be rebuilt properly but it shouldn't damage anything other than the pkg it is trying to rebuild.
Cool, that's what I wanted to know. PackageKit allows the user to cancel the transaction when the package is being rebuilt, and I wondered if this could cause the rpmdb corruption people are seeing. I guess this isn't the case.
Well... that all depends whether the rpmdb is open when the packages are getting rebuilt or not.
Or actually more to the point: sending SIGINT or SIGTERM is fine, rpm blocks that when the db is open. But sending a SIGKILL (like PK does if the backend doesn't terminate quickly) is just Russian roulette - sometimes you get away with it, sometimes you dont.
If SIGKILL happens while rpm is running inside db4 code, with current rpm + db4 combination you'll get one of these:
rpmdb: Thread/process 16507/3086059200 failed: Thread died in Berkeley DB library error: db4 error(-30975) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
Previously (eg in F9) you'd just have a dead rpm which hangs when you try to access it.
- Panu -