Comments (7)
@adsteel the uniqueness is based on arguments you configure in the unique_args method or we will create a unique hash from all the arguments the .perform_async
method receives. With no args provided to a job the job will be unique until just before or just after it has been performed depending on configuration.
My best suggestion for figuring it out is to check the test suite. It should cover the basics but you raise a valid point. Maybe we need more of an examples directory with all the various ways to configure uniqueness.
from sidekiq-unique-jobs.
@mhenrixon Thanks. I think I misspoke. I said 'what does that mean?', but I meant 'how is that implemented'? More specifically, what happens if I put two different jobs in the queue that each match the uniqueness constraint? Does the first job block until the second performs? Is the second never performed?
from sidekiq-unique-jobs.
@mhenrixon @adsteel's question is a good one - I'm equally confused about this very same thing.
Also what does this mean (https://github.com/mperham/sidekiq/wiki/Related-Projects) in relation to this project?
@mperham's note: job uniqueness or locking is impossible to implement safely and efficiently in a distributed system. I recommend using optimistic or pessimistic locking with database transactions instead of using these projects.
from sidekiq-unique-jobs.
Alright, by looking at the specs it seems that the job is just discarded - not the correct behaviour for my use-case - ah well.
from sidekiq-unique-jobs.
Agreed. Documentation is unclear. Is this gem for unique queues or unique workers?
The former means (job type, *args) can only exist once per queue, e.g. the queue acts as an ordered set.
Ex: https://github.com/resque/resque-loner
The latter means (job type, *args) can only be worked on by one worker at a time.
Ex: https://github.com/wallace/resque-lonely_job
Which does this gem do?
from sidekiq-unique-jobs.
@cjbottaro both!
You can make a job unique in a specific queue or across all queues. You can also decide when the uniqueness is enforced within that restriction like if the job should only be considered unique while it is running or if the uniqueness should be until before or after it is processed.
from sidekiq-unique-jobs.
Documentation has been improved and so has test suites, naming etc.
from sidekiq-unique-jobs.
Related Issues (20)
- Large retry queue causes reaper to run too slow HOT 3
- 8.0.1 Time on locks & changelog UI is incorrect/wrong HOT 5
- Jobs queued during existing job inherit lock digest HOT 1
- My configuration is correct or not. Because uniq job not remove all job process in sidekiq ?
- Redis server v6.0 compatibility HOT 4
- `while_executing` with `on_conflict: :reschedule` reschedules job when unlock fails HOT 7
- Problems with reaper and long running jobs HOT 11
- Migrate away from deprecated Redis commands HOT 2
- `unlocked` reflection is never called
- Logging::Middleware.context can include empty string as key when lock is not set in job hash HOT 1
- PRIMED key grows indefinitely when job re-queues itself in `after_unlock` callback HOT 1
- until_and_while_executing and lock_ttl: jobs silently dropped HOT 3
- incompatibility with sidekiq-failures HOT 4
- Deprecation Warning: Use of rpoplpush command in Redis HOT 1
- Redis has deprecated the `rpoplpush`command
- Release new gem version with "fix replace deprecated rpoplpush w/lmove" HOT 3
- `while_executing` with `on_conflict: :reschedule` Reschedule job after job execution HOT 7
- Reaper manager registration is subject to race conditions HOT 1
- Should client middleware also be added to the Sidekiq server config? HOT 2
- After sidekiq shutdown (with running job) lock digest is not pushned back HOT 8
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from sidekiq-unique-jobs.