-
-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
until_and_while_executing with separate server and client lock_args broken since 8.0.8 #846
Comments
We seem to have been running into same issues since upgrade but with |
@reneklacan do you also use custom lock args? |
@mhenrixon no |
we are getting a similar issue |
As mentioned above; This appears to be an issue related to class BrokenJob
include Sidekiq::Job
sidekiq_options lock: :until_and_while_executing, on_conflict: :reschedule
def perform = sleep(10)
end
BrokenJob.perform_async
#=> "job_id"
BrokenJob.perform_async
# SystemStackError: stack level too deep For From what I can tell; If the job is enqueued it fails to get the lock (until). While rescheduling, it checks this lock again and... since its locked, tries to reschedule... What I think should happen here is if the job is being rescheduled (or.. scheduled in the future in general?), it should ignore checking the lock? As an asside; Interestingly, sometimes I can get this to actually run two jobs at the same time, and some times the second invocation returns |
That is not great if the lock is racey as the whole point of the lock is to prevent race condition |
To extend... I tried updating this to remove the lock while
|
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
A [bug in version 8.0.8](mhenrixon/sidekiq-unique-jobs#846) means jobs never get processed when using `until_and_while_executing` lock type. Therefore pinning to use an earlier version that does not have this issue.
Describe the bug
After upgrading from 8.0.7 to 8.0.10, jobs with
until_and_while_executing
that pass a customlock_args_method
which behaves differently on the server and the client (as shown in the README) no longer work. Based on bisection, this appears to have been broken by 63e9431 (the parent commit, 7d5e40a, still works).Expected behavior
Given a worker as shown below, run the following client code:
We expect to see exactly six invocations.
Current behavior
Since 63e9431, we end up seeing at most two invocations (and sometimes only 1, which is even more worrying). It appears that the lock digest is being reused between the until and while executing phases.
For some reason, the conflicted jobs also aren't getting rescheduled; they just get dropped on the floor.
worse yet, we end up creating and leaking uniquejobs: locks with the correct digest, so after downgrading to 8.0.7, the jobs are locked out until the lock TTL expires.
Worker class
Additional context
Add any other context about the problem here.
The text was updated successfully, but these errors were encountered: