Browse Source

supports elasticsearch backend options settings

Acey9 8 years ago
parent
commit
23005b22f6
1 changed files with 19 additions and 1 deletions
  1. 19 1
      celery/backends/elasticsearch.py

+ 19 - 1
celery/backends/elasticsearch.py

@@ -31,10 +31,14 @@ class ElasticsearchBackend(KeyValueStoreBackend):
     scheme = 'http'
     host = 'localhost'
     port = 9200
+    es_retry_on_timeout=False
+    es_timeout=10
+    es_max_retries = 3
 
     def __init__(self, url=None, *args, **kwargs):
         super(ElasticsearchBackend, self).__init__(*args, **kwargs)
         self.url = url
+        _get = self.app.conf.get
 
         if elasticsearch is None:
             raise ImproperlyConfigured(E_LIB_MISSING)
@@ -53,6 +57,17 @@ class ElasticsearchBackend(KeyValueStoreBackend):
         self.host = host or self.host
         self.port = port or self.port
 
+        self.es_retry_on_timeout = (
+                _get('elasticsearch_retry_on_timeout') or self.es_retry_on_timeout
+                )
+        self.es_timeout = (
+                _get('elasticsearch_timeout') or self.es_timeout
+                )
+
+        self.es_max_retries = (
+                _get('elasticsearch_max_retries') or self.es_max_retries
+                )
+
         self._server = None
 
     def get(self, key):
@@ -104,7 +119,10 @@ class ElasticsearchBackend(KeyValueStoreBackend):
 
     def _get_server(self):
         """Connect to the Elasticsearch server."""
-        return elasticsearch.Elasticsearch('%s:%s' % (self.host, self.port))
+        return elasticsearch.Elasticsearch('%s:%s' % (self.host, self.port), 
+                retry_on_timeout=self.es_retry_on_timeout, 
+                max_retries=self.es_max_retries, 
+                timeout=self.es_timeout)
 
     @property
     def server(self):