@@ -1603,7 +1603,7 @@ function QlessQueue:put(now, worker, jid, klass, raw_data, delay, ...)
16031603 }
16041604 if options [' backoff' ] then
16051605 table.insert (job_fields , ' backoff' )
1606- table.insert (job_fields , cjson . encode ( options [' backoff' ]) )
1606+ table.insert (job_fields , options [' backoff' ])
16071607 end
16081608 redis .call (' hmset' , QlessJob .ns .. jid , unpack (job_fields ))
16091609
@@ -1963,7 +1963,7 @@ function QlessQueue:invalidate_locks(now, count)
19631963 redis .call (' zadd' , ' ql:failed-jobs-list' , now , jid )
19641964 clearOldFailedJobs (now )
19651965 else
1966- local backoff_json = redis .call (' hget' , Qless .ns .. jid , ' backoff' )
1966+ local backoff_json = redis .call (' hget' , QlessJob .ns .. jid , ' backoff' )
19671967 local backoff_config = {}
19681968 if backoff_json then
19691969 backoff_config = cjson .decode (backoff_json )
@@ -1980,12 +1980,11 @@ function QlessQueue:invalidate_locks(now, count)
19801980 if initial_delay == 0 then
19811981 table.insert (jids , jid )
19821982 else
1983- local job = Qless .job (jid )
1984- local job_history = job :history ()
1985- local retry_count = # job_history - 1
1986- if retry_count < 0 then retry_count = 0 end
1983+ local total_retries = tonumber (redis .call (' hget' , QlessJob .ns .. jid , ' retries' ) or 5 )
1984+ local retries_left = tonumber (redis .call (' hget' , QlessJob .ns .. jid , ' remaining' ) or total_retries )
19871985
1988- local delay = initial_delay * (backoff_factor ^ retry_count )
1986+ local attempt_index = total_retries - retries_left
1987+ local delay = initial_delay * (backoff_factor ^ attempt_index )
19891988
19901989 self .locks .remove (jid )
19911990 self .scheduled .add (now + delay , jid )
0 commit comments