.. _changelog:
================
Change history
================
This document contains change notes for bugfix releases in
the 4.x series, please see :ref:`whatsnew-4.2` for
an overview of what's new in Celery 4.2.
4.2.1
=====
:release-date: 2018-07-18 11:00 AM IST
:release-by: Omer Katz
- **Result Backend**: Fix deserialization of exceptions that are present in the producer codebase but not in the consumer codebase.
Contributed by **John Arnold**
- **Message Protocol Compatibility**: Fix error caused by an invalid (None) timelimit value in the message headers when migrating messages from 3.x to 4.x.
Contributed by **Robert Kopaczewski**
- **Result Backend**: Fix serialization of exception arguments when exception arguments are not JSON serializable by default.
Contributed by **Tom Booth**
- **Worker**: Fixed multiple issues with rate limited tasks
Maintain scheduling order.
Fix possible scheduling of a :class:`celery.worker.request.Request` with the wrong :class:`kombu.utils.limits.TokenBucket` which could cause tasks' rate limit to behave incorrectly.
Fix possible duplicated execution of tasks that were rate limited or if ETA/Countdown was provided for them.
Contributed by :github_user:`ideascf`
- **Worker**: Defensively handle invalid timelimit header values in requests.
Contributed by **Omer Katz**
Documentation fixes:
- **Matt Wiens**
- **Seunghun Lee**
- **Lewis M. Kabui**
- **Prathamesh Salunkhe**
4.2.0
=====
:release-date: 2018-06-10 21:30 PM IST
:release-by: Omer Katz
- **Task**: Add ``ignore_result`` as task execution option (#4709, #3834)
Contributed by **Andrii Kostenko** and **George Psarakis**.
- **Redis Result Backend**: Do not create PubSub subscriptions when results are ignored (#4709, #3834)
Contributed by **Andrii Kostenko** and **George Psarakis**.
- **Redis Result Backend**: Result consumer always unsubscribes when task state is ready (#4666)
Contributed by **George Psarakis**.
- **Development/Testing**: Add docker-compose and base Dockerfile for development (#4482)
Contributed by **Chris Mitchell**.
- **Documentation/Sphinx**: Teach autodoc to document tasks if undoc-members is not set (#4588)
Contributed by **Leo Singer**.
- **Documentation/Sphinx**: Put back undoc-members option in sphinx test (#4586)
Contributed by **Leo Singer**.
- **Documentation/Sphinx**: Sphinx autodoc picks up tasks automatically only if `undoc-members` is set (#4584)
Contributed by **Leo Singer**.
- **Task**: Fix shadow_name issue when using previous version Task class (#4572)
Contributed by :github_user:`pachewise`.
- **Task**: Add support for bound tasks as `link_error` parameter (Fixes #3723) (#4545)
Contributed by :github_user:`brabiega`.
- **Deployment**: Add a command line option for setting the Result Backend URL (#4549)
Contributed by :github_user:`y0ngdi`.
- **CI**: Enable pip cache in appveyor build (#4546)
Contributed by **Thijs Triemstra**.
- **Concurrency/Asynpool**: Fix errno property name shadowing.
Contributed by **Omer Katz**.
- **DynamoDB Backend**: Configurable endpoint URL (#4532)
Contributed by **Bohdan Rybak**.
- **Timezones**: Correctly detect UTC timezone and timezone from settings (Fixes #4517) (#4519)
Contributed by :github_user:`last-partizan`.
- **Control**: Cleanup the mailbox's producer pool after forking (#4472)
Contributed by **Nick Eaket**.
- **Documentation**: Start Celery and Celery Beat on Azure WebJob (#4484)
Contributed by **PauloPeres**.
- **Celery Beat**: Schedule due tasks on startup, after Beat restart has occurred (#4493)
Contributed by **Igor Kasianov**.
- **Worker**: Use absolute time when task is accepted by worker pool (#3684)
Contributed by **Régis Behmo**.
- **Canvas**: Propagate arguments to chains inside groups (#4481)
Contributed by **Chris Mitchell**.
- **Canvas**: Fix `Task.replace` behavior in nested chords (fixes #4368) (#4369)
Contributed by **Denis Shirokov** & **Alex Hill**.
- **Installation**: Pass python_requires argument to setuptools (#4479)
Contributed by **Jon Dufresne**.
- **Message Protocol Compatibility**: Handle "hybrid" messages that have moved between Celery versions (#4358) (Issue #4356)
Contributed by **Russell Keith-Magee**.
- **Canvas**: request on_timeout now ignores soft time limit exception (fixes #4412) (#4473)
Contributed by **Alex Garel**.
- **Redis Result Backend**: Integration test to verify PubSub unsubscriptions (#4468)
Contributed by **George Psarakis**.
- **Message Protocol Properties**: Allow the shadow keyword argument and the shadow_name method to set shadow properly (#4381)
Contributed by :github_user:`hclihn`.
- **Canvas**: Run chord_unlock on same queue as chord body (#4448) (Issue #4337)
Contributed by **Alex Hill**.
- **Canvas**: Support chords with empty header group (#4443)
Contributed by **Alex Hill**.
- **Timezones**: make astimezone call in localize more safe (#4324)
Contributed by **Matt Davis**.
- **Canvas**: Fix length-1 and nested chords (#4437) (Issues #4393, #4055, #3885, #3597, #3574, #3323, #4301)
Contributed by **Alex Hill**.
- **CI**: Run `Openstack Bandit `_ in Travis CI in order to detect security issues.
Contributed by **Omer Katz**.
- **CI**: Run `isort `_ in Travis CI in order to lint Python **import** statements.
Contributed by **Omer Katz**.
- **Canvas**: Resolve TypeError on `.get` from nested groups (#4432) (Issue #4274)
Contributed by **Misha Wolfson**.
- **CouchDB Backend**: Correct CouchDB key string type for Python 2/3 compatibility (#4166)
Contributed by :github_user:`fmind` && **Omer Katz**.
- **Group Result**: Fix current_app fallback in GroupResult.restore() (#4431)
Contributed by **Alex Hill**.
- **Consul Backend**: Correct key string type for Python 2/3 compatibility (#4416)
Contributed by **Wido den Hollander**.
- **Group Result**: Correctly restore an empty GroupResult (#2202) (#4427)
Contributed by **Alex Hill** & **Omer Katz**.
- **Result**: Disable synchronous waiting for sub-tasks on eager mode(#4322)
Contributed by **Denis Podlesniy**.
- **Celery Beat**: Detect timezone or Daylight Saving Time changes (#1604) (#4403)
Contributed by **Vincent Barbaresi**.
- **Canvas**: Fix append to an empty chain. Fixes #4047. (#4402)
Contributed by **Omer Katz**.
- **Task**: Allow shadow to override task name in trace and logging messages. (#4379)
Contributed by :github_user:`hclihn`.
- **Documentation/Sphinx**: Fix getfullargspec Python 2.x compatibility in contrib/sphinx.py (#4399)
Contributed by **Javier Martin Montull**.
- **Documentation**: Updated installation instructions for SQS broker (#4382)
Contributed by **Sergio Fernandez**.
- **Celery Beat**: Better equality comparison for ScheduleEntry instances (#4312)
Contributed by :github_user:`mariia-zelenova`.
- **Task**: Adding 'shadow' property to as_task_v2 (#4350)
Contributed by **Marcelo Da Cruz Pinto**.
- Try to import directly, do not use deprecated imp method (#4216)
Contributed by **Tobias Kunze**.
- **Task**: Enable `kwargsrepr` and `argsrepr` override for modifying task argument representation (#4260)
Contributed by **James M. Allen**.
- **Result Backend**: Add Redis Sentinel backend (#4144)
Contributed by **Geoffrey Bauduin**.
- Use unique time values for Collections/LimitedSet (#3879 and #3891) (#3892)
Contributed by :github_user:`lead2gold`.
- **CI**: Report coverage for all result backends.
Contributed by **Omer Katz**.
- **Django**: Use Django DB max age connection setting (fixes #4116) (#4292)
Contributed by **Marco Schweighauser**.
- **Canvas**: Properly take into account chain tasks link_error (#4240)
Contributed by :github_user:`agladkov`.
- **Canvas**: Allow to create group with single task (fixes issue #4255) (#4280)
Contributed by :github_user:`agladkov`.
- **Canvas**: Copy dictionary parameter in chord.from_dict before modifying (fixes issue #4223) (#4278)
Contributed by :github_user:`agladkov`.
- **Results Backend**: Add Cassandra options (#4224)
Contributed by **Scott Cooper**.
- **Worker**: Apply rate limiting for tasks with ETA (#4251)
Contributed by :github_user:`arpanshah29`.
- **Celery Beat**: support scheduler entries without a schedule (#4235)
Contributed by **Markus Kaiserswerth**.
- **SQS Broker**: Updated SQS requirements file with correct boto3 version (#4231)
Contributed by **Alejandro Varas**.
- Remove unused code from _create_app contextmanager (#4204)
Contributed by **Ryan P Kilby**.
- **Group Result**: Modify GroupResult.as_tuple() to include parent (fixes #4106) (#4205)
Contributed by :github_user:`pachewise`.
- **Beat**: Set default scheduler class in beat command. (#4189)
Contributed by :github_user:`Kxrr`.
- **Worker**: Retry signal receiver after raised exception (#4192)
Contributed by **David Davis**.
- **Task**: Allow custom Request class for tasks (#3977)
Contributed by **Manuel Vázquez Acosta**.
- **Django**: Django fixup should close all cache backends (#4187)
Contributed by **Raphaël Riel**.
- **Deployment**: Adds stopasgroup to the supervisor scripts (#4200)
Contributed by :github_user:`martialp`.
- Using Exception.args to serialize/deserialize exceptions (#4085)
Contributed by **Alexander Ovechkin**.
- **Timezones**: Correct calculation of application current time with timezone (#4173)
Contributed by **George Psarakis**.
- **Remote Debugger**: Set the SO_REUSEADDR option on the socket (#3969)
Contributed by **Theodore Dubois**.
- **Django**: Celery ignores exceptions raised during `django.setup()` (#4146)
Contributed by **Kevin Gu**.
- Use heartbeat setting from application configuration for Broker connection (#4148)
Contributed by :github_user:`mperice`.
- **Celery Beat**: Fixed exception caused by next_transit receiving an unexpected argument. (#4103)
Contributed by **DDevine**.
- **Task** Introduce exponential backoff with Task auto-retry (#4101)
Contributed by **David Baumgold**.
- **AsyncResult**: Remove weak-references to bound methods in AsyncResult promises. (#4131)
Contributed by **Vinod Chandru**.
- **Development/Testing**: Allow eager application of canvas structures (#4576)
Contributed by **Nicholas Pilon**.
- **Command Line**: Flush stderr before exiting with error code 1.
Contributed by **Antonin Delpeuch**.
- **Task**: Escapes single quotes in kwargsrepr strings.
Contributed by **Kareem Zidane**
- **AsyncResult**: Restore ability to join over ResultSet after fixing celery/#3818.
Contributed by **Derek Harland**
- **Redis Results Backend**: Unsubscribe on message success.
Previously Celery would leak channels, filling the memory of the Redis instance.
Contributed by **George Psarakis**
- **Task**: Only convert eta to isoformat when it is not already a string.
Contributed by **Omer Katz**
- **Redis Results Backend**: The result_backend setting now supports rediss:// URIs
Contributed by **James Remeika**
- **Canvas** Keyword arguments are passed to tasks in chain as expected.
Contributed by :github_user:`tothegump`
- **Django** Fix a regression casuing Celery to crash when using Django.
Contributed by **Jonas Haag**
- **Canvas** Chain with one task now runs as expected.
Contributed by :github_user:`tothegump`
- **Kombu** Celery 4.2 now requires Kombu 4.2 or better.
Contributed by **Omer Katz & Asif Saifuddin Auvi**
- `GreenletExit` is not in `__all__` in greenlet.py which can not be imported by Python 3.6.
The import was adjusted to work on Python 3.6 as well.
Contributed by **Hsiaoming Yang**
- Fixed a regression that occured during the development of Celery 4.2 which caused `celery report` to crash when Django is installed.
Contributed by **Josue Balandrano Coronel**
- Matched the behavior of `GroupResult.as_tuple()` to that of `AsyncResult.as_tuple()`.
The group's parent is now serialized correctly.
Contributed by **Josue Balandrano Coronel**
- Use Redis coercion mechanism for converting URI query parameters.
Contributed by **Justin Patrin**
- Fixed the representation of `GroupResult`.
The dependency graph is now presented correctly.
Contributed by **Josue Balandrano Coronel**
Documentation, CI, Installation and Tests fixes:
- **Sammie S. Taunton**
- **Dan Wilson**
- :github_user:`pachewise`
- **Sergi Almacellas Abellana**
- **Omer Katz**
- **Alex Zaitsev**
- **Leo Singer**
- **Rachel Johnson**
- **Jon Dufresne**
- **Samuel Dion-Girardeau**
- **Ryan Guest**
- **Huang Huang**
- **Geoffrey Bauduin**
- **Andrew Wong**
- **Mads Jensen**
- **Jackie Leng**
- **Harry Moreno**
- :github_user:`michael-k`
- **Nicolas Mota**
- **Armenak Baburyan**
- **Patrick Zhang**
- :github_user:`anentropic`
- :github_user:`jairojair`
- **Ben Welsh**
- **Michael Peake**
- **Fengyuan Chen**
- :github_user:`arpanshah29`
- **Xavier Hardy**
- **Shitikanth**
- **Igor Kasianov**
- **John Arnold**
- :github_user:`dmollerm`
- **Robert Knight**
- **Asif Saifuddin Auvi**
- **Eduardo Ramírez**
- **Kamil Breguła**
- **Juan Gutierrez**