code: protected void failure(final Throwable thrwbl, final Job job, final String curQueue) {
          // The job may have taken a long time; make an effort to ensure the connection is OK
          JedisUtils.ensureJedisConnection(this.jedis);
          try {
              this.jedis.incr(key(STAT, FAILED));
              this.jedis.incr(key(STAT, FAILED, this.name));
              final FailQueueStrategy strategy = this.failQueueStrategyRef.get();
              final String failQueueKey = strategy.getFailQueueKey(thrwbl, job, curQueue);
              if (failQueueKey != null) {
                  final int failQueueMaxItems = strategy.getFailQueueMaxItems(curQueue);
                  if (failQueueMaxItems > 0) {
                      Long currentItems = this.jedis.llen(failQueueKey);
                      if (currentItems >= failQueueMaxItems) {
                          Transaction tx = this.jedis.multi();
                          tx.ltrim(failQueueKey, 1, -1);
                          tx.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                          tx.exec();
                      } else {
                          this.jedis.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                      }
                  } else {
                      this.jedis.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                  }
              }
          } catch (JedisException je) {
              LOG.warn("Error updating failure stats for throwable=" + thrwbl + " job=" + job, je);
          } catch (IOException ioe) {
              LOG.warn("Error serializing failure payload for throwable=" + thrwbl + " job=" + job, ioe);
          }
          this.listenerDelegate.fireEvent(JOB_FAILURE, this, curQueue, job, null, null, thrwbl);
      }
docs: Update the status in Redis on failure.
  
  @param thrwbl the Throwable that occurred
  @param job the Job that failed
  @param curQueue the queue the Job came from