Browse Source

whatsnew: Adds upgrade instructions

Ask Solem 8 years ago
parent
commit
d4e8e30186
1 changed files with 82 additions and 0 deletions
  1. 82 0
      docs/whatsnew-4.0.rst

+ 82 - 0
docs/whatsnew-4.0.rst

@@ -90,6 +90,48 @@ Zoran Pavlovic, 許邱翔, :github_user:`allenling`, :github_user:`bee-keeper`,
 :github_user:`orlo666`, :github_user:`raducc`, :github_user:`wanglei`,
 :github_user:`orlo666`, :github_user:`raducc`, :github_user:`wanglei`,
 :github_user:`worldexception`.
 :github_user:`worldexception`.
 
 
+.. _v400-upgrading:
+
+Upgrading from Celery 3.1
+=========================
+
+Step 1: Upgrade to Celery 3.1.25
+--------------------------------
+
+If you haven't already, the first step is to upgrade to Celery 3.1.25.
+
+This version adds foreward compatibility to the new message protocol,
+so that you can incrementally upgrade from 3.1 to 4.0.
+
+Deploy the workers first by upgrading to 3.1.25, this means these
+workers can process messages sent by clients using both 3.1 and 4.0.
+
+After the workers are upgraded you can upgrade the clients (e.g. web servers).
+
+Step 2: Update your configuration with the new setting names
+------------------------------------------------------------
+
+This version radically changes the configuration setting names,
+to be more consistent.
+
+The changes are fully backwards compatible, so you have the option to wait
+until the old setting names are deprecated, but to ease the transition
+we have included a command-line utility that rewrites your settings
+automatically.
+
+See :ref:`v400-upgrade-settings` for more information.
+
+Step 3: Read the important notes in this document
+-------------------------------------------------
+
+Make sure you are not affected by any of the important upgrade notes
+mentioned in the following section.
+
+Step 4: Upgrade to Celery 4.0
+-----------------------------
+
+At this point you can upgrade your workers and clients with the new version.
+
 .. _v400-important:
 .. _v400-important:
 
 
 Important Notes
 Important Notes
@@ -241,6 +283,8 @@ the protocol version number used:
 Read more about the features available in the new protocol in the news
 Read more about the features available in the new protocol in the news
 section found later in this document.
 section found later in this document.
 
 
+.. _v400-upgrade-settings:
+
 Lowercase setting names
 Lowercase setting names
 -----------------------
 -----------------------
 
 
@@ -657,6 +701,44 @@ executing the task.  As a result logging utilities,
 like Sentry can get full information about tasks, including
 like Sentry can get full information about tasks, including
 variables in the traceback stack.
 variables in the traceback stack.
 
 
+Prefork: ``-Ofair`` is now the default scheduling strategy
+----------------------------------------------------------
+
+To re-enable the default behavior in 3.1 use the ``-Ofast`` command-line
+option.
+
+There's been lots of confusion about what the ``-Ofair`` command-line option
+does, and using the term "prefetch" in explanations have probably not helped
+given how confusing this terminology is in AMQP.
+
+When a Celery worker using the prefork pool receives a task, it needs to
+delegate that task to a child process for execution.
+
+The prefork pool has a configurable number of child processes
+(``--concurrency``) that can be used to execute tasks, and each child process
+uses pipes/sockets to communicate with the parent process:
+
+- inqueue (pipe/socket): parent sends task to the child process
+- outqueue (pipe/socket): child sends result/return value to the parent.
+
+In Celery 3.1 the default scheduling mechanism was simply to send
+the task to the first ``inqueue`` that was writable, with some heuristics
+to make sure we round-robin between them to ensure each child process
+would receive the same amount of tasks.
+
+This means that in the default scheduling strategy, a worker may send
+tasks to the same child process that is already executing a task.  If that
+task is long running, it may block the waiting task for a long time.  Even
+worse, hundreds of short-running tasks may be stuck behind a long running task
+even when there are child processes free to do work.
+
+The ``-Ofair`` scheduling strategy was added to avoid this situation,
+and when enabled it adds the rule that no task should be sent to the a child
+process that is already executing a task.
+
+The fair scheduling strategy may perform slightly worse if you have only
+short running tasks.
+
 Prefork: One log-file per child process
 Prefork: One log-file per child process
 ---------------------------------------
 ---------------------------------------