Revision 9f7b4967

b/lib/jqueue.py
1031 1031

  
1032 1032
    return job
1033 1033

  
1034
  def _GetJobsUnlocked(self, job_ids):
1035
    """Return a list of jobs based on their IDs.
1036

  
1037
    @type job_ids: list
1038
    @param job_ids: either an empty list (meaning all jobs),
1039
        or a list of job IDs
1040
    @rtype: list
1041
    @return: the list of job objects
1042

  
1043
    """
1044
    if not job_ids:
1045
      job_ids = self._GetJobIDsUnlocked()
1046

  
1047
    return [self._LoadJobUnlocked(job_id) for job_id in job_ids]
1048

  
1049 1034
  def SafeLoadJobFromDisk(self, job_id):
1050 1035
    """Load the given job file from disk.
1051 1036

  
......
1426 1411

  
1427 1412
    return (archived_count, len(all_job_ids) - last_touched)
1428 1413

  
1429
  @utils.LockedMethod
1430
  @_RequireOpenQueue
1431 1414
  def QueryJobs(self, job_ids, fields):
1432 1415
    """Returns a list of jobs in queue.
1433 1416

  
1434
    This is a wrapper of L{_GetJobsUnlocked}, which actually does the
1435
    processing for each job.
1436

  
1437 1417
    @type job_ids: list
1438 1418
    @param job_ids: sequence of job identifiers or None for all
1439 1419
    @type fields: list
......
1444 1424

  
1445 1425
    """
1446 1426
    jobs = []
1427
    list_all = False
1428
    if not job_ids:
1429
      # Since files are added to/removed from the queue atomically, there's no
1430
      # risk of getting the job ids in an inconsistent state.
1431
      job_ids = self._GetJobIDsUnlocked()
1432
      list_all = True
1447 1433

  
1448
    for job in self._GetJobsUnlocked(job_ids):
1449
      if job is None:
1450
        jobs.append(None)
1451
      else:
1434
    for job_id in job_ids:
1435
      job = self.SafeLoadJobFromDisk(job_id)
1436
      if job is not None:
1452 1437
        jobs.append(job.GetInfo(fields))
1438
      elif not list_all:
1439
        jobs.append(None)
1453 1440

  
1454 1441
    return jobs
1455 1442

  

Also available in: Unified diff