Search code examples
pythondjangoelasticsearchdjango-haystack

elasticsearch exceptions ConnectionError


I am making a Django app. It uses Haystack with elasticsearch as backend.

When I run

./manage.py rebuild_index

I get this error:

aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))

What could have caused this?

The log:

./manage.py rebuild_index
No handlers could be found for logger "django_facebook.models"

WARNING: This will irreparably remove EVERYTHING from your search index in connection 'default'.
Your choices after this are to restore from backups or rebuild via the `rebuild_index` command.
Are you sure you wish to continue? [y/N] y
Removing all documents from your index because you said so.
Failed to clear Elasticsearch index: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))
All documents removed.
Indexing 4 restos
ERROR:root:Error updating litchee using default 
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label
    self.update_backend(label, using)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
    backend.update(index, current_qs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 184, in update
    bulk_index(self.conn, prepped_docs, index=self.index_name, doc_type='modelresult')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 145, in bulk
    for ok, item in streaming_bulk(client, actions, **kwargs):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 104, in streaming_bulk
    resp = client.bulk(bulk_actions, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 68, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 646, in bulk
    params=params, body=self._bulk_body(body))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/transport.py", line 284, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 51, in perform_request
    raise ConnectionError('N/A', str(e), e)
ConnectionError: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))
Traceback (most recent call last):
  File "./manage.py", line 11, in <module>
    execute_from_command_line(sys.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
    utility.execute()
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 392, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 242, in run_from_argv
    self.execute(*args, **options.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/rebuild_index.py", line 16, in handle
    call_command('update_index', **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/__init__.py", line 159, in call_command
    return klass.execute(*args, **defaults)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 285, in execute
    output = self.handle(*args, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 195, in handle
    return super(Command, self).handle(*items, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/management/base.py", line 385, in handle
    label_output = self.handle_label(label, **options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 221, in handle_label
    self.update_backend(label, using)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 266, in update_backend
    do_update(backend, index, qs, start, end, total, self.verbosity)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/management/commands/update_index.py", line 89, in do_update
    backend.update(index, current_qs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/haystack/backends/elasticsearch_backend.py", line 184, in update
    bulk_index(self.conn, prepped_docs, index=self.index_name, doc_type='modelresult')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 145, in bulk
    for ok, item in streaming_bulk(client, actions, **kwargs):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/helpers/__init__.py", line 104, in streaming_bulk
    resp = client.bulk(bulk_actions, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/utils.py", line 68, in _wrapped
    return func(*args, params=params, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/client/__init__.py", line 646, in bulk
    params=params, body=self._bulk_body(body))
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/transport.py", line 284, in perform_request
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/elasticsearch/connection/http_urllib3.py", line 51, in perform_request
    raise ConnectionError('N/A', str(e), e)
elasticsearch.exceptions.ConnectionError: ConnectionError(('Connection aborted.', error(61, 'Connection refused'))) caused by: ProtocolError(('Connection aborted.', error(61, 'Connection refused')))

Running bin/elasticsearch gives this:

[2014-08-25 17:53:38,901][INFO ][node                     ] [Arize] version[1.3.1], pid[1781], build[2de6dc5/2014-07-28T14:45:15Z]
[2014-08-25 17:53:38,902][INFO ][node                     ] [Arize] initializing ...
[2014-08-25 17:53:38,976][INFO ][plugins                  ] [Arize] loaded [], sites []
[2014-08-25 17:53:54,722][INFO ][node                     ] [Arize] initialized
[2014-08-25 17:53:54,734][INFO ][node                     ] [Arize] starting ...
[2014-08-25 17:53:56,131][INFO ][transport                ] [Arize] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/192.168.1.83:9300]}
[2014-08-25 17:53:57,168][INFO ][discovery                ] [Arize] elasticsearch/uWwljr09R0-hZ1-5eH4NlQ
[2014-08-25 17:54:00,714][INFO ][cluster.service          ] [Arize] new_master [Arize][uWwljr09R0-hZ1-5eH4NlQ][deeptis-mbp.local.lan][inet[/192.168.1.83:9300]], reason: zen-disco-join (elected_as_master)
[2014-08-25 17:54:00,987][INFO ][http                     ] [Arize] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/192.168.1.83:9200]}
[2014-08-25 17:54:00,988][INFO ][node                     ] [Arize] started
[2014-08-25 17:54:01,337][INFO ][gateway                  ] [Arize] recovered [0] indices into cluster_state

But on running ps -A elasticsearch does not show up as a running process.

What am I doing wrong?


Solution

  • Connection refused means just that, that the TCP connection to the Elasticsearch HTTP service was refused. The reason can be a number of things, for instance that you are using the wrong host or port for the HTTP endpoint, or that the elasticsearch node is not running for some reason.

    Before you try to use Haystack, test that elasticsearch works by issuing a direct HTTP request with something like:

    curl -X GET http://192.168.77.88:9200/_cat/indices
    

    Where 192.168.77.88 is the IP address of your elasticsearch node, and 9200 is the TCP port. When that succeeds, check and double check that you have the same URL configuration in you Haystack config.

    HAYSTACK_CONNECTIONS = {
        'default': {
            'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
            'URL': 'http://192.168.77.88:9200/',
            'INDEX_NAME': 'haystack',
        },
    }