[Yum-devel] [PATCH] Disable the rpmtrans chroot workaround. Use exclusive locking in history.

James Antill james at and.org
Tue Jun 28 19:17:13 UTC 2011


 The only downside here appears to be that we get .sqlite-journal files
in /var/lib/yum/history ... which is probably fine.
---
 yum/history.py  |    6 +++++-
 yum/rpmtrans.py |    5 +++--
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/yum/history.py b/yum/history.py
index 26d6ee2..e40c2b0 100644
--- a/yum/history.py
+++ b/yum/history.py
@@ -627,6 +627,8 @@ class YumHistory:
                 self.conf.readable = False
                 return None
 
+            executeSQL(self._conn.cursor(), "pragma locking_mode = EXCLUSIVE")
+
         return self._conn.cursor()
     def _commit(self):
         return self._conn.commit()
@@ -747,7 +749,6 @@ class YumHistory:
                          WHERE tid = ? AND pkgtupid = ? AND state = ?
                          """, ('TRUE', self._tid, pid, state))
         self._commit()
-        return cur.lastrowid
 
     def _trans_rpmdb_problem(self, problem):
         if not hasattr(self, '_tid'):
@@ -1310,6 +1311,9 @@ class YumHistory:
                                     'sqlite')
         if self._db_file == _db_file:
             os.rename(_db_file, _db_file + '.old')
+            # Just in case ... move the journal file too.
+            if os.path.exists(_db_file + '-journal'):
+                os.rename(_db_file  + '-journal', _db_file + '-journal.old')
         self._db_file = _db_file
         
         if self.conf.writable and not os.path.exists(self._db_file):
diff --git a/yum/rpmtrans.py b/yum/rpmtrans.py
index 6e31512..9b265f9 100644
--- a/yum/rpmtrans.py
+++ b/yum/rpmtrans.py
@@ -554,12 +554,13 @@ class RPMTransaction:
             #  Note that we are currently inside the chroot, which makes
             # sqlite panic when it tries to open it's journal file.
             # So let's have some "fun" and workaround that:
-            if self.base.conf.installroot != '/':
+            _do_chroot = False
+            if _do_chroot and self.base.conf.installroot != '/':
                 os.chroot(".")
             pid   = self.base.history.pkg2pid(txmbr.po)
             state = self.base.history.txmbr2state(txmbr)
             self.base.history.trans_data_pid_end(pid, state)
-            if self.base.conf.installroot != '/':
+            if _do_chroot and self.base.conf.installroot != '/':
                 os.chroot(self.base.conf.installroot)
 
             self.ts_done(txmbr.po, txmbr.output_state)
-- 
1.7.5.4



More information about the Yum-devel mailing list