# -*- coding: utf-8 -*-
# vim: tabstop=4 shiftwidth=4 softtabstop=4
#
# Copyright (C) 2010-2017 GEM Foundation
#
# OpenQuake is free software: you can redistribute it and/or modify it
# under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# OpenQuake is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with OpenQuake. If not, see <http://www.gnu.org/licenses/>.


"""
Config for all installed OpenQuake binaries and modules.
Should be installed by setup.py into /etc/openquake
eventually.
"""

import os
import sys
try:
    import celery
except ImportError:
    pass
else:
    if '--with-doctest' in sys.argv:  # horrible hack for nosetests
        pass  # don't set OQ_DISTRIBUTE
    else:
        os.environ["OQ_DISTRIBUTE"] = "celery"

    # just in the case that are you using oq-engine from sources
    # with the rest of oq libraries installed into the system (or a
    # virtual environment) you must set this environment variable
    if os.environ.get("OQ_ENGINE_USE_SRCDIR"):
        sys.modules['openquake'].__dict__["__path__"].insert(
            0, os.path.join(os.path.dirname(__file__), "openquake"))

    from openquake.commonlib import config

    config.abort_if_no_config_available()

    amqp = config.get_section("amqp")

    # RabbitMQ broker (default)
    BROKER_URL = 'amqp://%(user)s:%(password)s@%(host)s:%(port)s/%(vhost)s' % \
                 amqp
    # Redis broker (works only on Trusty)
    # BROKER_URL = 'redis://%(host)s:6379/0' % amqp

    # BROKER_POOL_LIMIT enables a connections pool so Celery can reuse
    # a single connection to RabbitMQ. Value 10 is the default from
    # Celery 2.5 where this feature is enabled by default.
    # Actually disabled because it's not stable in production.
    # See https://bugs.launchpad.net/oq-engine/+bug/1250402
    BROKER_POOL_LIMIT = None

    # AMQP result backend (default)
    CELERY_RESULT_BACKEND = 'rpc://'
    CELERY_RESULT_PERSISTENT = False

    # Redis result backend (works only on Trusty)
    # CELERY_RESULT_BACKEND = 'redis://%(host)s:6379/0' % amqp

    # CELERY_ACKS_LATE and CELERYD_PREFETCH_MULTIPLIER settings help evenly
    # distribute tasks across the cluster. This configuration is intended
    # make worker processes reserve only a single task at any given time.
    # The default settings for prefetching define that each worker process will
    # reserve 4 tasks at once. For long running calculations with lots of long,
    # heavy tasks, this greedy prefetching is not recommended and can result in
    # performance issues with respect to cluster utilization.
    # CELERY_MAX_CACHED_RESULTS disable the cache on the results: this means
    # that map_reduce will not leak memory by keeping the intermediate results
    CELERY_ACKS_LATE = True
    CELERYD_PREFETCH_MULTIPLIER = 1
    CELERY_MAX_CACHED_RESULTS = 1

    CELERY_ACCEPT_CONTENT = ['pickle', 'json']

    CELERY_IMPORTS = ["openquake.baselib.parallel"]

@@ -1632,16 +1632,113 @@
 amqp%22)%0A%0A
+    task_serializer = 'pickle'%0A    result_serializer = 'pickle'%0A    accept_content = %7B'pickle'%7D%0A%0A
     # Ra
@@ -1765,26 +1765,26 @@
 lt)%0A    
-BROKER_URL
+broker_url
  = 'amqp
@@ -1915,18 +1915,18 @@
   # 
-BROKER_URL
+broker_url
  = '
@@ -1964,33 +1964,33 @@
 %0A%0A    # 
-BROKER_POOL_LIMIT
+broker_pool_limit
  enables
@@ -2287,25 +2287,25 @@
     
-BROKER_POOL_LIMIT
+broker_pool_limit
  = N
@@ -2353,69 +2353,55 @@
     
-CELERY_RESULT_BACKEND = 'rpc://'%0A    CELERY_RESULT_PERSISTENT
+result_backend = 'rpc://'%0A    result_persistent
  = F
@@ -2466,29 +2466,22 @@
   # 
-CELERY_RESULT_BACKEND
+result_backend
  = '
@@ -2523,56 +2523,53 @@
   # 
-CELERY_ACKS_LATE and CELERYD_PREFETCH_MULTIPLIER
+task_acks_late and worker_prefetch_multiplier
  set
@@ -3046,33 +3046,24 @@
   # 
-CELERY_MAX_CACHED_RESULTS
+result_cache_max
  dis
@@ -3191,169 +3191,102 @@
     
-CELERY_ACKS_LATE = True%0A    CELERYD_PREFETCH_MULTIPLIER = 1%0A    CELERY_MAX_CACHED_RESULTS = 1%0A%0A    CELERY_ACCEPT_CONTENT = %5B'pickle', 'json'%5D%0A%0A    CELERY_IMPORTS
+task_acks_late = True%0A    worker_prefetch_multiplier = 1%0A    result_cache_max = 1%0A%0A    imports
  = %5B

Upgrade celeryconfig to Celery 4