diff options
Diffstat (limited to 'src/software/openlmi/software/yumdb/jobmanager.py')
-rw-r--r-- | src/software/openlmi/software/yumdb/jobmanager.py | 81 |
1 files changed, 9 insertions, 72 deletions
diff --git a/src/software/openlmi/software/yumdb/jobmanager.py b/src/software/openlmi/software/yumdb/jobmanager.py index 7283d05..977b38f 100644 --- a/src/software/openlmi/software/yumdb/jobmanager.py +++ b/src/software/openlmi/software/yumdb/jobmanager.py @@ -39,8 +39,8 @@ import threading import time import traceback -from openlmi.common import cmpi_logging from openlmi.common.IndicationManager import IndicationManager +from openlmi.common.JobManager import JobManager as JM from openlmi.software.yumdb import errors, jobs from openlmi.software.yumdb.util import trace_function @@ -56,69 +56,6 @@ MINIMUM_TIME_BEFORE_REMOVAL = 10 # replacement for cmpi_logging.logger LOG = None -IND_JOB_PERCENT_UPDATED = "PercentUpdated" -IND_JOB_SUCCEEDED = "Succeeded" -IND_JOB_FAILED = "Failed" -IND_JOB_CHANGED = "Changed" -IND_JOB_CREATED = "Created" - -IND_FILTERS = { - IND_JOB_PERCENT_UPDATED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::PercentComplete <> " - "PreviousInstance.CIM_ConcreteJob::PercentComplete", - "Description" : "Modification of Percentage Complete for a " - "Concrete Job.", - }, - IND_JOB_SUCCEEDED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance ISA LMI_SoftwareInstallationJob AND " - "SourceInstance.CIM_ConcreteJob::JobState = 17", - # symbolic constants not supported by sfcb - #"CIM_ConcreteJob.JobState#'Completed'" - "Description": "Modification of Operational Status for a " - "Concrete Job to 'Complete' and 'OK'.", - }, - IND_JOB_FAILED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::JobState = 10", - # symbolic constants not supported by sfcb - #"CIM_ConcreteJob.JobState#'Exception'", - "Description": "Modification of Operational Status for a " - "Concrete Job to 'Complete' and 'Error'.", - }, - IND_JOB_CHANGED: { - "Query" : "SELECT * FROM CIM_InstModification WHERE " - "SourceInstance ISA %(classname)s AND " - "SourceInstance.CIM_ConcreteJob::JobState <> " - "PreviousInstance.CIM_ConcreteJob::JobState", - "Description": "Modification of Job State for a ConcreteJob.", - }, - IND_JOB_CREATED: { - "Query" : "SELECT * FROM CIM_InstCreation WHERE " - "SourceInstance ISA %(classname)s", - "Description": "Creation of a ConcreteJob.", - }, -} - -@cmpi_logging.trace_function -def register_filters(indication_manager): - """ - This function registers static indication filters at IndicationManager. - It should be called upon provider's initialization. - """ - to_register = {} - for fltr_id, fltr in IND_FILTERS.items(): - if not indication_manager.is_registered(JOB_CLASSNAME, fltr_id): - fltr["Query"] = fltr["Query"] % {"classname" : JOB_CLASSNAME } - to_register[fltr_id] = fltr - if to_register: - indication_manager.add_filters(JOB_CLASSNAME, - to_register, ensure_installed=False) - # ***************************************************************************** # Decorators # ***************************************************************************** @@ -183,7 +120,7 @@ class JobIndicationSender(object): """ def __init__(self, indication_manager, job, - indications=IND_JOB_CHANGED, new=None): + indications=JM.IND_JOB_CHANGED, new=None): """ :param job (``YumJob``) Is job instance, which will be immediately snapshoted as old instance and later as a new one. @@ -258,11 +195,11 @@ class JobIndicationSender(object): "can not send any indication without id") if make_snapshot: self.snapshot() - if ( IND_JOB_CHANGED in self._indications + if ( JM.IND_JOB_CHANGED in self._indications and self._new_instance is None): raise errors.IndicationError("no snapshot made for modified job") for fltr_id in self._indications: - if fltr_id == IND_JOB_CREATED: + if fltr_id == JM.IND_JOB_CREATED: LOG.debug("sending instance creation indication for job %s", self._job) self._indication_manager.send_instcreation( @@ -368,7 +305,7 @@ class JobManager(threading.Thread): LOG.debug('job %s enqued for YumWorker to handle', job) heapq.heappush(self._job_queue, job) if getattr(job, 'async', False) is True: - ind = self._prepare_indication_for(job, IND_JOB_CREATED) + ind = self._prepare_indication_for(job, JM.IND_JOB_CREATED) self._async_jobs[job.jobid] = job ind.send() self._job_enqueued.notify() @@ -557,7 +494,7 @@ class JobManager(threading.Thread): 'can not finish not started job "%s"' % job) if getattr(job, 'async', False): ind = self._prepare_indication_for(job, - (IND_JOB_CHANGED, IND_JOB_PERCENT_UPDATED)) + (JM.IND_JOB_CHANGED, JM.IND_JOB_PERCENT_UPDATED)) job.finish(result, result_data) if getattr(job, 'async', False): if job.delete_on_completion: @@ -566,9 +503,9 @@ class JobManager(threading.Thread): self._schedule_event(schedule_at, job.jobid, self.ACTION_REMOVE) if result == job.RESULT_SUCCESS: - ind.add_indication_ids(IND_JOB_SUCCEEDED) + ind.add_indication_ids(JM.IND_JOB_SUCCEEDED) elif result == job.RESULT_ERROR: - ind.add_indication_ids(IND_JOB_FAILED) + ind.add_indication_ids(JM.IND_JOB_FAILED) ind.send(True) else: LOG.debug("sending reply for %s: (%s, %s)", job, @@ -598,7 +535,7 @@ class JobManager(threading.Thread): if job is not None: if getattr(job, "async", False): ind = self._prepare_indication_for(job, - (IND_JOB_CHANGED, IND_JOB_PERCENT_UPDATED)) + (JM.IND_JOB_CHANGED, JM.IND_JOB_PERCENT_UPDATED)) job.start() ind.send(True) else: |