Revision 78d12585 lib/jqueue.py

b/lib/jqueue.py
1123 1123
      self.UpdateJobUnlocked(job)
1124 1124

  
1125 1125
  @_RequireOpenQueue
1126
  def _ArchiveJobUnlocked(self, job_id):
1126
  def _ArchiveJobUnlocked(self, job):
1127 1127
    """Archives a job.
1128 1128

  
1129
    @type job_id: string
1130
    @param job_id: the ID of job to be archived
1129
    @type job: L{_QueuedJob}
1130
    @param job: Job object
1131
    @rtype bool
1132
    @return Whether job was archived
1131 1133

  
1132 1134
    """
1133
    logging.info("Archiving job %s", job_id)
1134

  
1135
    job = self._LoadJobUnlocked(job_id)
1136
    if not job:
1137
      logging.debug("Job %s not found", job_id)
1138
      return
1139

  
1140 1135
    if job.CalcStatus() not in (constants.JOB_STATUS_CANCELED,
1141 1136
                                constants.JOB_STATUS_SUCCESS,
1142 1137
                                constants.JOB_STATUS_ERROR):
1143 1138
      logging.debug("Job %s is not yet done", job.id)
1144
      return
1139
      return False
1145 1140

  
1146 1141
    old = self._GetJobPath(job.id)
1147 1142
    new = self._GetArchivedJobPath(job.id)
......
1150 1145

  
1151 1146
    logging.debug("Successfully archived job %s", job.id)
1152 1147

  
1148
    return True
1149

  
1153 1150
  @utils.LockedMethod
1154 1151
  @_RequireOpenQueue
1155 1152
  def ArchiveJob(self, job_id):
......
1159 1156

  
1160 1157
    @type job_id: string
1161 1158
    @param job_id: Job ID of job to be archived.
1159
    @rtype: bool
1160
    @return: Whether job was archived
1162 1161

  
1163 1162
    """
1164
    return self._ArchiveJobUnlocked(job_id)
1163
    logging.info("Archiving job %s", job_id)
1164

  
1165
    job = self._LoadJobUnlocked(job_id)
1166
    if not job:
1167
      logging.debug("Job %s not found", job_id)
1168
      return False
1169

  
1170
    return self._ArchiveJobUnlocked(job)
1165 1171

  
1166 1172
  @utils.LockedMethod
1167 1173
  @_RequireOpenQueue
......
1180 1186
    logging.info("Archiving jobs with age more than %s seconds", age)
1181 1187

  
1182 1188
    now = time.time()
1183
    for jid in self._GetJobIDsUnlocked(archived=False):
1184
      job = self._LoadJobUnlocked(jid)
1185
      if job.CalcStatus() not in (constants.OP_STATUS_SUCCESS,
1186
                                  constants.OP_STATUS_ERROR,
1187
                                  constants.OP_STATUS_CANCELED):
1189
    for job_id in self._GetJobIDsUnlocked(archived=False):
1190
      # Returns None if the job failed to load
1191
      job = self._LoadJobUnlocked(job_id)
1192
      if not job:
1188 1193
        continue
1194

  
1189 1195
      if job.end_timestamp is None:
1190 1196
        if job.start_timestamp is None:
1191 1197
          job_age = job.received_timestamp
......
1195 1201
        job_age = job.end_timestamp
1196 1202

  
1197 1203
      if age == -1 or now - job_age[0] > age:
1198
        self._ArchiveJobUnlocked(jid)
1204
        self._ArchiveJobUnlocked(job)
1199 1205

  
1200 1206
  def _GetJobInfoUnlocked(self, job, fields):
1201 1207
    """Returns information about a job.

Also available in: Unified diff