Ver código fonte

Updated Changelog

Ask Solem 14 anos atrás
pai
commit
bee309f039
1 arquivos alterados com 213 adições e 0 exclusões
  1. 213 0
      Changelog

+ 213 - 0
Changelog

@@ -5,6 +5,219 @@
 .. contents::
     :local:
 
+2.1.0
+=====
+:release-date: TBA
+:status: In development.
+:roadmap: http://wiki.github.com/ask/celery/roadmap
+
+Important notes
+---------------
+
+* Celery is now following the versioning semantics defined by `semver`_.
+
+This means we are no longer allowed to use odd/even versioning semantics
+(see http://github.com/mojombo/semver.org/issues#issue/8).
+By our previous versioning scheme this stable release should have
+been version 2.2.
+
+The document describing the our release cycle and versioning scheme
+can be found at `Wiki: Release Cycle`_.
+
+
+.. _`semver`: http://semver.org
+.. _`Wiki: Release Cycle`: http://wiki.github.com/ask/celery/release-cycle.
+
+News
+----
+
+* celeryev: Event Snapshots
+
+    If enabled, celeryd can send messages every time something
+    happens in the worker. These messages are called "events".
+    The events are used by real-time monitors to show what the
+    cluster is doing, but they are not very useful for monitoring
+    over time. That's where the snapshots comes in. Snapshots
+    lets you take "pictures" of the clusters state at regular intervals.
+    These can then be stored in the database to generate statistics
+    with, or even monitoring.
+
+    Django-celery now comes with a Celery monitor for the Django
+    Admin interface. To use this you need to run the django-celery
+    snapshot camera, which stores snapshots to the database at configurable
+    intervals.
+
+    To use the Django admin monitor you need to do the following:
+
+    1. Create the new database tables.
+
+        $ python manage.py syncdb
+
+    2. Start the django-celery snapshot camera::
+
+        $ python manage.py celerycam
+
+    3. Open up the django admin to monitor your cluster.
+
+    The admin interface shows tasks, worker nodes, and even
+    lets you perform some actions, like revoking and rate limiting tasks,
+    and shutting down worker nodes.
+
+    There's also a Debian init.d script for ``celeryev`` available,
+    see :doc:`cookbook/daemonizing` for more information.
+
+    New command line argments to celeryev:
+
+        * ``-c|--camera``: Snapshot camera class to use.
+        * ``--logfile|-f``: Logfile
+        * ``--loglevel|-l``: Loglevel
+        * ``--maxrate|-r``: Shutter rate limit.
+        * ``--freq|-F``: Shutter frequency
+
+    The ``--camera`` argument is the name of a class used to take
+    snapshots with. It must support the interface defined by
+    :class:`celery.events.snapshot.Polaroid`.
+
+    Shutter frequency controls how often the camera thread wakes up,
+    while the rate limit controls how often it will actually take
+    a snapshot.
+    The rate limit can be an integer (snapshots/s), or a rate limit string
+    which has the same syntax as the task rate limit strings (``"200/m"``,
+    ``"10/s"``, ``"1/h",`` etc).
+
+    For the Django camera case, this rate limit can be used to control
+    how often the snapshots are written to the database, and the frequency
+    used to control how often the thread wakes up too check if there's
+    anything new.
+
+    The rate limit is off by default, which means it will take a snapshot
+    for every ``--frequency`` seconds.
+
+    The django-celery camera also automatically deletes old events.
+    It deletes successful tasks after 1 day, failed tasks after 3 days,
+    and tasks in other states after 5 days.
+
+* Added the ability to set an expiry date and time for tasks.
+
+    Example::
+
+        >>> # Task expires after one minute from now.
+        >>> task.apply_async(args, kwargs, expires=60)
+        >>> # Also supports datetime
+        >>> task.apply_async(args, kwargs,
+        ...                  expires=datetime.now() + timedelta(days=1)
+
+    When a worker receives a task that has been expired it will mark
+    the task as revoked (:exc:`celery.exceptions.TaskRevokedError`).
+
+* Changed the way logging is configured.
+
+    We now configure the root logger instead of only configuring
+    our custom logger. In addition we don't hijack
+    the multiprocessing logger anymore, but instead use a custom logger name
+    (celeryd uses "celery", celerybeat uses "celery.beat", celeryev uses
+    "celery.ev").
+
+    This means that the ``loglevel`` and ``logfile`` arguments will
+    affect all registered loggers (even those from 3rd party libraries).
+    That is unless you configure the loggers manually as show below.
+
+    Users can choose to configure logging by subscribing to the
+    :data:`~celery.signals.setup_logging` signal:
+
+    .. code-block:: python
+
+        from logging.config import fileConfig
+        from celery import signals
+
+        def setup_logging(**kwargs):
+            fileConfig("logging.conf")
+        signals.setup_logging.connect(setup_logging)
+
+    If there are no receivers for this signal, the logging subsystem
+    will be configured using the ``--loglevel/--logfile argument``,
+    this will be used for *all defined loggers*.
+
+    Remember that celeryd also redirects stdout and stderr 
+    to the celery logger, if you want to manually configure logging
+    ands redirect stdouts, you need to enable this manually:
+
+    .. code-block:: python
+
+        from logging.config import fileConfig
+        from celery import log
+
+       def setup_logging(**kwargs):
+            import logging
+            fileConfig("logging.conf")
+            stdouts = logging.getLogger("mystdoutslogger")
+            log.redirect_stdouts_to_logger(stdouts, loglevel=logging.WARNING)
+
+* celeryd: Task results shown in logs are now truncated to 46 chars.
+
+* ``Task.__name__`` is now an alias to ``self.__class__.__name__``.
+   This way it introspects more like a regular function.
+
+* ``Task.retry``: Now raises :exc:`TypeError` if kwargs argument is empty.
+
+    See http://github.com/ask/celery/issues/issue/164
+
+* timedelta_seconds: Use ``timedelta.total_seconds`` if running on Python 2.7
+
+* :class:`~celery.datastructures.TokenBucket`: Generic Token Bucket algorithm
+
+* :class:`celery.events.state.State`: Recording of cluster state can now
+  be paused.
+
+    * ``State.freeze(buffer=True)``
+
+    Pauses recording of the stream. If buffer is true, then events received
+    while being frozen will be kept, so it can be replayed later.
+
+    * ``State.thaw(replay=True)``
+
+    Resumes recording of the stream. If replay is true, then the buffer
+    will be applied.
+
+    * ``State.freeze_while(fun)``
+
+    Apply function. Freezes the stream before the function,
+    and replays the buffer when the function returns.
+
+* :meth:`EventReceiver.capture <celery.events.EventReceiver.capture>`
+  Now supports a timeout keyword argument.
+
+Fixes
+-----
+
+* Redis result backend: Redis doesn't have database names,
+  database numbers. The default database is now 0.
+
+* :class:`~celery.task.control.inspect`:
+  Was requesting an invalid command because of a typo.
+
+    See http://github.com/ask/celery/issues/issue/170
+
+* Worker crashed if the value of CELERY_TASK_ERROR_WHITELIST was
+  not iterable
+
+* Compat ``LoggerAdapter`` implementation: Now works for Python 2.4.
+
+    Also added support for several new methods:
+    ``fatal``, ``makeRecord``, ``_log``, ``log``, ``isEnabledFor``,
+    ``addHandler``, ``removeHandler``.
+
+* :func:`~celery.execute.apply`: Make sure ``kwargs["task_id"]`` is
+  always set.
+
+Documentation
+-------------
+
+* Tasks Userguide: Added section on database transactions.
+
+* tutorials/external moved to new section: "community"
+
+
 2.0.2
 =====
 :release-date: 2010-07-22 11:31 A.M CEST