backend/satellite_tools/satsync.py | 8 +++++---
backend/server/importlib/backend.py | 16 ++++++++++++++--
backend/server/importlib/errataImport.py | 2 +-
backend/server/importlib/importLib.py | 9 +++++----
backend/server/importlib/packageImport.py | 2 +-
5 files changed, 26 insertions(+), 11 deletions(-)
New commits:
commit c191fcfb95e730a13666921c52ba6860669d89ac
Author: Justin Sherrill <jsherril(a)redhat.com>
Date: Wed May 19 10:59:33 2010 -0400
improving performance of linking packages during satellite-sync, and fixing issue
where packages that are already imported, but not in the channel would not be linked
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index 5f9fb35..28f479f 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -1070,7 +1070,7 @@ Please contact your RHN representative""" %
(generation, sat_cert.generation))
# First, determine what has to be downloaded
short_package_collection = sync_handlers.ShortPackageCollection()
package_collection = sync_handlers.PackageCollection()
- for channel, pids in self._missing_channel_packages.items():
+ for channel, pids in self._channel_packages.items():
missing_packages[channel] = mp = []
if not pids:
@@ -1764,10 +1764,12 @@ Please contact your RHN representative""" %
(generation, sat_cert.generation))
short_package_collection = sync_handlers.ShortPackageCollection()
package_collection = sync_handlers.PackageCollection()
uq_packages = {}
- for chn, package_ids in self._missing_channel_packages.items():
+ for chn, package_ids in self._channel_packages.items():
for pid in package_ids:
timestamp = short_package_collection.get_package_timestamp(pid)
- package = package_collection.get_package(pid, timestamp)
+ package = short_package_collection.get_package(pid, timestamp)
+ if not package:
+ continue
assert package is not None
channel_obj = {'label' : chn}
if uq_packages.has_key(pid):
diff --git a/backend/server/importlib/backend.py b/backend/server/importlib/backend.py
index ce874ee..68b213d 100644
--- a/backend/server/importlib/backend.py
+++ b/backend/server/importlib/backend.py
@@ -500,14 +500,26 @@ class Backend:
def lookupPackageGroups(self, hash):
self.__processHash('rhnPackageGroup', 'name', hash)
- def lookupPackages(self, packages, ignore_missing = 0):
+ def lookupPackages(self, packages, checksums, ignore_missing = 0):
# If nevra is enabled use checksum as primary key
self.validate_pks()
for package in packages:
if not isinstance(package, IncompletePackage):
raise TypeError("Expected an IncompletePackage instance, found
%s" % \
str(type(package)))
- self.__lookupObjectCollection(packages, 'rhnPackage', ignore_missing)
+ for package in packages:
+ exception = None
+ for type, chksum in package['checksums'].iteritems():
+ package['checksum_id'] = checksums[(type, chksum)]
+ try:
+ self.__lookupObjectCollection([package], 'rhnPackage',
ignore_missing)
+ exception = None
+ break
+ except InvalidPackageError, e:
+ exception = e
+ if exception:
+ raise exception
+
def lookupSolarisPackages(self, packages, ignore_missing=0):
for pkg in packages:
diff --git a/backend/server/importlib/errataImport.py
b/backend/server/importlib/errataImport.py
index 08a023b..9eaf993 100644
--- a/backend/server/importlib/errataImport.py
+++ b/backend/server/importlib/errataImport.py
@@ -125,7 +125,7 @@ class ErrataImport(GenericPackageImport):
#fix oval info to populate the relevant dbtables
self._fix_erratum_oval_info(erratum)
- self.backend.lookupPackages(self.packages.values(), self.ignoreMissing)
+ self.backend.lookupPackages(self.packages.values(), self.checksums,
self.ignoreMissing)
for erratum in self.batch:
self._fix_erratum_packages(erratum)
self._fix_erratum_file_channels(erratum)
diff --git a/backend/server/importlib/importLib.py
b/backend/server/importlib/importLib.py
index 4d2601e..b439c06 100644
--- a/backend/server/importlib/importLib.py
+++ b/backend/server/importlib/importLib.py
@@ -695,10 +695,11 @@ class GenericPackageImport(Import):
if not self.package_arches.has_key(package.arch):
self.package_arches[package.arch] = None
-
- checksumTuple = (package['checksum_type'], package['checksum'])
- if not self.checksums.has_key(checksumTuple):
- self.checksums[checksumTuple] = None
+
+ for type, chksum in package['checksums'].iteritems():
+ checksumTuple = (type, chksum)
+ if not checksumTuple in self.checksums:
+ self.checksums[checksumTuple] = None
def _postprocessPackageNEVRA(self, package):
arch = self.package_arches[package.arch]
diff --git a/backend/server/importlib/packageImport.py
b/backend/server/importlib/packageImport.py
index 38e1a17..8d0d1c4 100644
--- a/backend/server/importlib/packageImport.py
+++ b/backend/server/importlib/packageImport.py
@@ -113,7 +113,7 @@ class ChannelPackageSubscription(GenericPackageImport):
pass
def submit(self):
- self.backend.lookupPackages(self.batch)
+ self.backend.lookupPackages(self.batch, self.checksums)
try:
affected_channels = self.backend.subscribeToChannels(self.batch,
strict=self._strict_subscription)