コード例 #1
0
ファイル: YumInfo.py プロジェクト: jwmatthews/grinder
 def setUp(self):
     yum_metadata_obj = YumMetadataObj(
         repo_label=self.repo_label, repo_url=self.repo_url,
         mirrorlist=self.mirrors,
         cacert=self.sslcacert, clicert=self.sslclientcert, 
         clikey=self.sslclientkey,
         proxy_url=self.proxy_url, proxy_port=self.proxy_port,
         proxy_user=self.proxy_user, proxy_pass=self.proxy_pass,
         sslverify=self.sslverify, tmp_path=self.tmp_path,
         filter=self.filter, num_retries=self.num_retries, retry_delay=self.retry_delay)
     yumAO = None
     try:
         yumAO = ActiveObject(yum_metadata_obj)
         download_items = yumAO.getDownloadItems(repo_dir=self.repo_dir,
                                                 packages_location=self.pkgpath,
                                                 newest=self.newest,
                                                 remove_old=self.remove_old,
                                                 numOldPackages=self.numOldPackages,
                                                 skip=self.skip)
         if download_items.has_key("rpms"):
             if download_items["rpms"]:
                 self.rpms.extend(download_items["rpms"])
         if download_items.has_key("drpms"):
             if download_items["drpms"]:
                 self.drpms.extend(download_items["drpms"])
     finally:
         # Force __del__ to be called on ActiveObject
         del yumAO
コード例 #2
0
 def setUp(self):
     yum_metadata_obj = YumMetadataObj(repo_label=self.repo_label,
                                       repo_url=self.repo_url,
                                       mirrorlist=self.mirrors,
                                       cacert=self.sslcacert,
                                       clicert=self.sslclientcert,
                                       clikey=self.sslclientkey,
                                       proxy_url=self.proxy_url,
                                       proxy_port=self.proxy_port,
                                       proxy_user=self.proxy_user,
                                       proxy_pass=self.proxy_pass,
                                       sslverify=self.sslverify,
                                       tmp_path=self.tmp_path,
                                       filter=self.filter,
                                       num_retries=self.num_retries,
                                       retry_delay=self.retry_delay)
     yumAO = None
     try:
         yumAO = ActiveObject(yum_metadata_obj)
         download_items = yumAO.getDownloadItems(
             repo_dir=self.repo_dir,
             packages_location=self.pkgpath,
             newest=self.newest,
             remove_old=self.remove_old,
             numOldPackages=self.numOldPackages,
             skip=self.skip)
         if download_items.has_key("rpms"):
             if download_items["rpms"]:
                 self.rpms.extend(download_items["rpms"])
         if download_items.has_key("drpms"):
             if download_items["drpms"]:
                 self.drpms.extend(download_items["drpms"])
     finally:
         # Force __del__ to be called on ActiveObject
         del yumAO
コード例 #3
0
 def __init__(self, pFetch, fetcher):
     """
     pFetch - reference to ParallelFetch instance
     fetcher - reference to a class instantiating BaseFetch
     """
     Thread.__init__(self)
     self.pFetch = pFetch
     self.fetcher = ActiveObject(fetcher, "update_bytes_transferred", "reset_bytes_transferred")
     self._stop = threading.Event()
     self.fetcher_lock = Lock()
コード例 #4
0
ファイル: DistroInfo.py プロジェクト: pombredanne/grinder-1
 def prepareTrees(self, fetcher):
     fetcherAO = ActiveObject(fetcher)
     try:
         LOG.info("Checking if distribution info exists in repository: %s" %
                  (self.repo_url))
         tree_manifest = self.get_tree_manifest(fetcherAO)
         if not tree_manifest:
             LOG.info("No distribution tree manifest found.")
             return []
         return self.__prepareTrees(tree_manifest)
     finally:
         #Note: We want to explicitly kill the child activeobject
         # so will use abort() on activeobject's Method class
         fetcherAO.dummy_method.abort()
         # We were seeing the invocation of __del__() on activeobject
         # being delayed, hence child processes weren't dying when they should.
         # therefore we added the explicit abort()
         del fetcherAO
         fetchAO = None
コード例 #5
0
class WorkerThread(Thread):

    def __init__(self, pFetch, fetcher):
        """
        pFetch - reference to ParallelFetch instance
        fetcher - reference to a class instantiating BaseFetch
        """
        Thread.__init__(self)
        self.pFetch = pFetch
        self.fetcher = ActiveObject(fetcher, "update_bytes_transferred", "reset_bytes_transferred")
        self._stop = threading.Event()
        self.fetcher_lock = Lock()

    def stop(self):
        self._stop.set()
        LOG.info("stop() invoked")
        self.fetcher_lock.acquire()
        try:
            try:
                if hasattr(self, "fetcher"):
                    self.fetcher.fetchItem.abort()
            except Exception, e:
                LOG.error("%s" % (traceback.format_exc()))
        finally:
            self.fetcher_lock.release()
        LOG.info("stop() completed")

    def run(self):
        LOG.debug("Run has started")
        while not self._stop.isSet():
            try:
                itemInfo = self.pFetch.getWorkItem()
            except Queue.Empty:
                LOG.debug("Queue is empty, thread will end")
                break
            if itemInfo is None:
                break
            try:
                result = self.fetcher.fetchItem(itemInfo)
                if result:
                    status, msg = result
                    self.pFetch.markStatus(itemInfo, status, msg)
                    if status == BaseFetch.STATUS_REQUEUE:
                        time.sleep(2)
            except Exception, e:
                LOG.error("%s" % (traceback.format_exc()))
                LOG.error(e)
                errorInfo = {}
                exctype, value = sys.exc_info()[:2]
                errorInfo["error_type"] = str(exctype)
                errorInfo["value"] = str(value)
                # Keeping "error" for backward compatibility with Pulp v1
                errorInfo["error"] = str(value)
                errorInfo["traceback"] = traceback.format_exc().splitlines()
                errorInfo["exception"] = e
                self.pFetch.markStatus(itemInfo, BaseFetch.STATUS_ERROR, errorInfo)

        LOG.info("WorkerThread deleting ActiveObject")
        self.fetcher_lock.acquire()
        try:
            try:
                #Note: We want to explicitly kill the child activeobject
                # so will use abort() on activeobject's Method class
                self.fetcher.dummy_method.abort()
                # We were seeing the invocation of __del__() on activeobject
                # being delayed, hence child processes weren't dying when they should.
                # therefore we added the explicit abort()
                del self.fetcher
            except Exception, e:
                LOG.error("%s" % (traceback.format_exc()))
        finally:
            self.fetcher_lock.release()
        LOG.info("Thread ending")