backend/server/importlib/backend.py | 43 +++--------------------------------- 1 file changed, 4 insertions(+), 39 deletions(-)
New commits: commit b61d9c9137668adf767229dd14ec01b46acea496 Author: Michael Mraka michael.mraka@redhat.com Date: Tue Sep 24 15:33:24 2013 +0200
923338 - replace application code with database lookup to prevent conflicting inserts
addressing Traceback (most recent call last): ... File "/usr/share/rhn/upload_server/handlers/package_push/package_push.py", line 125, in handler relative_path=self.rel_package_path, org_id=self.org_id) File "/usr/lib/python2.6/site-packages/spacewalk/server/rhnPackageUpload.py", line 144, in push_package importer.run() File "/usr/lib/python2.6/site-packages/spacewalk/server/importlib/importLib.py", line 646, in run self.fix() File "/usr/lib/python2.6/site-packages/spacewalk/server/importlib/packageImport.py", line 289, in fix self.backend.processCapabilities(self.capabilities) File "/usr/lib/python2.6/site-packages/spacewalk/server/importlib/backend.py", line 128, in processCapabilities h.executemany(id=toinsert[0], name=toinsert[1], version=toinsert[2]) File "/usr/lib/python2.6/site-packages/spacewalk/server/rhnSQL/sql_base.py", line 172, in executemany return apply(self._execute_wrapper, (self._executemany, ) + p, kw) File "/usr/lib/python2.6/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py", line 108, in _execute_wrapper retval = apply(function, p, kw) File "/usr/lib/python2.6/site-packages/spacewalk/server/rhnSQL/driver_cx_Oracle.py", line 208, in _executemany self._real_cursor.executemany(None, arr) SQLError: (1, 'ORA-00001: unique constraint (SAT56STAGE.RHN_PKG_CAP_NAME_VERSION_UQ) violated\n', 'insert into rhnPackageCapability (id, name, version) values (:id, :name, :version)')
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py index 2ade497..f907794 100644 --- a/backend/server/importlib/backend.py +++ b/backend/server/importlib/backend.py @@ -83,49 +83,14 @@ class Backend: sth.execute()
def processCapabilities(self, capabilityHash): - # First figure out which capabilities are already inserted - templ = """ - select /*+index(rhnPackageCapability rhn_pkg_cap_name_version_uq)*/ id - from rhnPackageCapability - where name = :name - and version %s""" - sqlNonNull = templ % "= :version" - sqlNull = templ % "is null" - nullStatement = None - nonnullStatement = None - toinsert = [[], [], []] + h = self.dbmodule.prepare("select lookup_package_capability(:name, :version) as id from dual") for name, version in capabilityHash.keys(): ver = version if version is None or version == '': ver = None - if not nullStatement: - nullStatement = self.dbmodule.prepare(sqlNull) - nullStatement.execute(name=name) - row = nullStatement.fetchone_dict() - else: - if not nonnullStatement: - nonnullStatement = self.dbmodule.prepare(sqlNonNull) - nonnullStatement.execute(name=name, version=version) - row = nonnullStatement.fetchone_dict() - if row: - capabilityHash[(name, version)] = row['id'] - continue - # Generate an id - id = self.sequences['rhnPackageCapability'].next() - capabilityHash[(name, version)] = id - toinsert[0].append(id) - toinsert[1].append(name) - toinsert[2].append(ver) - if not toinsert[0]: - # Nothing to do - return - sql = """ - insert into rhnPackageCapability - (id, name, version) values - (:id, :name, :version) - """ - h = self.dbmodule.prepare(sql) - h.executemany(id=toinsert[0], name=toinsert[1], version=toinsert[2]) + h.execute(name = name, version = ver) + row = h.fetchone_dict() + capabilityHash[(name, version)] = row['id']
def processChangeLog(self, changelogHash): sql = "select id from rhnPackageChangeLogData where name = :name and time = :time and text = :text"
spacewalk-commits@lists.fedorahosted.org