protected void failure(final Throwable thrwbl, final Job job, final String curQueue) {
        try {
            PoolUtils.doWorkInPool(this.jedisPool, new PoolWork<Jedis, Void>() {
                /**
                 * {@inheritDoc}
                 */
                @Override
                public Void doWork(final Jedis jedis) throws IOException {
                    jedis.incr(key(STAT, FAILED));
                    jedis.incr(key(STAT, FAILED, name));
                    final FailQueueStrategy strategy = failQueueStrategyRef.get();
                    final String failQueueKey = strategy.getFailQueueKey(thrwbl, job, curQueue);
                    if (failQueueKey != null) {
                        final int failQueueMaxItems = strategy.getFailQueueMaxItems(curQueue);
                        if (failQueueMaxItems > 0) {
                            Long currentItems = jedis.llen(failQueueKey);
                            if (currentItems >= failQueueMaxItems) {
                                Transaction tx = jedis.multi();
                                tx.ltrim(failQueueKey, 1, -1);
                                tx.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                                tx.exec();
                            } else {
                                jedis.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                            }
                        } else {
                            jedis.rpush(failQueueKey, failMsg(thrwbl, curQueue, job));
                        }
                    }
                    return null;
                }
            });
        } 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);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        this.listenerDelegate.fireEvent(JOB_FAILURE, this, curQueue, job, null, null, thrwbl);
    }
protected void failure ( final Throwable thrwbl , final Job job , final String curQueue ) { try { PoolUtils . doWorkInPool ( this . jedisPool , new PoolWork < Jedis , Void > ( ) { @ Override public Void doWork ( final Jedis jedis ) throws IOException { jedis . incr ( key ( STAT , FAILED ) ) ; jedis . incr ( key ( STAT , FAILED , name ) ) ; final FailQueueStrategy strategy = failQueueStrategyRef . get ( ) ; final String failQueueKey = strategy . getFailQueueKey ( thrwbl , job , curQueue ) ; if ( failQueueKey != null ) { final int failQueueMaxItems = strategy . getFailQueueMaxItems ( curQueue ) ; if ( failQueueMaxItems > 0 ) { Long currentItems = jedis . llen ( failQueueKey ) ; if ( currentItems >= failQueueMaxItems ) { Transaction tx = jedis . multi ( ) ; tx . ltrim ( failQueueKey , 1 , - 1 ) ; tx . rpush ( failQueueKey , failMsg ( thrwbl , curQueue , job ) ) ; tx . exec ( ) ; } else { jedis . rpush ( failQueueKey , failMsg ( thrwbl , curQueue , job ) ) ; } } else { jedis . rpush ( failQueueKey , failMsg ( thrwbl , curQueue , job ) ) ; } } return null ; } } ) ; } 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 ) ; } catch ( Exception e ) { throw new RuntimeException ( e ) ; } this . listenerDelegate . fireEvent ( JOB_FAILURE , this , curQueue , job , null , null , thrwbl ) ; }
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