All notable changes to this project will be documented in this file.
Updates:
- Allow overriding of job successes
- Move to @github actions - @circleci ended up being slower. Test for Ruby 2.6, 2.7, 3.0 and 3.1. Require a more modern, but still old PG gem.
- Setup some code analysis
Updates:
- Change to only support >= Postgres 9.6. We will be bringing in newer changes and testing on only 9.6+ going forward.
- Change to only support currently supported Ruby versions: 2.4, 2.5 and 2.6.
- Use skip-locked
- Add abilty to count ready and scheduled jobs
Bug fixes:
- Switched project to use CircleCI, as it's way more consistent speed wise
- Automatically retry after a connection reset #294
- Add tests for installing fresh on rails 5.2.3 + running migrations
- Don't recuse Time.now errors
- Use the jsonb type for the args column from now on. If not available, fall back to json or text.
enqueue
,enqueue_at
,enqueue_in
return job hash with id.- Fixed a bug in the offset calculation of
.enqueue_at
.
- Improved signal handling
- Workers can process many queues.
- Update pg dependency to 0.17.0
- Concurrent job processing.
- Update pg dependency to 0.16.0
- Force listen/notify on worker
- Notifications happen inside PostgreSQL trigger
- Add rake task for generating rails migrations
- Fix bug related to listening worker
- Use json from the stdlib in place of MultiJson.
- Use postgresql's json type for the args column if json type is available
- QC::Worker#handle_failure logs the job and the error
- QC.default_queue= to set your own default queue. (can be used in testing to configure a mock queue)
- QC.log now reports time elapsed in milliseconds.
- Update pg dependency to 0.15.1
- Document logging behaviour
- Use MultiJson (Ezekiel Templin: #106)
- Use 64bit ints as default data types in PostgreSQL
- Add process method in worker
- Allow percent-encoded socket paths in DATABASE_URL
- Update pg gem version
- Wrap connection execution in mutex making it thread safe
- Cleanup logging
- Refactor worker class making it more extensible
- Added rdoc style docs for worker class
- Allow term signal to halt the lock_job function
- Provider a connection setter.
- Fix typo :(
- Remove scrolls dependency
- Fix issue with notify not working on non-default queues
- Simpler setup via QC::Setup.create (rake qc:create) & QC::Setup.drop (rake qc:drop)
- Simpler abstractions in implementation
- Better support for instrumentation via log_yield hook in QC module
- Multiple queues use one table with a queue_name column
- Update to latest okjson as the current has bugs
- Using OkJson instead of any sort of rubygem
- Remove html from docs
- Use parameterised queries
- Don't set application name by default
- Injection attack bug fixed in lock_head()
- Notificaiton get sent on seperate chans for disjoint queues
- Removed json gem and relying on ruby 1.9.2's stdlib
- Added better documentation
- Added listen/notify support configured by $QC_LISTENING_WORKER otherwise uses Kernel.sleep()
- Removed debug statement. Mistake!
- Added logging configured by $VERBOSE or $QC_VERBOSE.
- Added a method setup_child that gets called right after a worker forks.
- Removed database helper methods: create_table, drop_table, silence_warnings.
- Removed queue connection helper methods. Status should be discoverd by psql or the likes.
- Removed PUB/SUB
- Added GC after working a job
- Added support for a database_url other than $DATABASE_URL. $QC_DATABASE_URL
- Added exp backoff configured by $QC_MAX_LOCK_ATTEMPTS (default = 5)
- Added option for forking worker configured by $QC_FORK_WORKER (default = false)
- Fixed bug which caused workers to consume 2 connections. Now they only consume 1
- Added a rake file for tests
- Added support for postgres:///db_name DATABASE_URLs
- Added query interface for introspection success
- Moved the locking of jobs into the DB as a PG function. SELECT lock_head()
- Added requirement for DB connection. MUST BE URI i.e. DATABASE_URL=postgres://user:pass@localhost/db_name
- Added rake qc:create_queue. This task will add a new table. Use this for multiple queues.
- Added a bit of randomness to the lock_head() function. Helps you scale to a hilarious number of workers.
- Added support for trapping INT and TERM signals in the worker. ^C to stop after finished and ^C^C to kill.
- Renamed the jobs table to queue_classic_jobs
- Renamed the jobs channel to queue_classic_jobs
- Added support for multiple queues
- Fixed problems with enqueueing a list of parameters.
- Added method for handling errors.
- Added ability to enqueue a Job instance. Makes retrying jobs easier.
- Added delete_all.
- Fixed connection algorithm. 1 connection per process.
- Fixed API for enqueue. Now accepting 1 arg or many args.
- Beta Release
- Added method for handling failed jobs
- Added Benchmarks
- Removed logging
- Moved the Job class into it's own file
- Early release