Reputation: 697
I am using flask celery and mongo in seperate containers. WHen I start the containers, I am hit with the following error
worker | pymongo.errors.AutoReconnect: connection pool paused
worker |
worker | The above exception was the direct cause of the following exception:
worker |
worker | Traceback (most recent call last):
worker | File "/opt/venv/lib/python3.8/site-packages/celery/app/trace.py", line 451, in trace_task
worker | R = retval = fun(*args, **kwargs)
worker | File "/opt/venv/lib/python3.8/site-packages/celery/app/trace.py", line 734, in __protected_call__
worker | return self.run(*args, **kwargs)
worker | File "/app/app/routes/celery_tasks.py", line 76, in nlp_ml
worker | data = CrawlData.objects(ml_proc='null')
worker | File "/opt/venv/lib/python3.8/site-packages/mongoengine/queryset/manager.py", line 38, in __get__
worker | queryset = queryset_class(owner, owner._get_collection())
worker | File "/opt/venv/lib/python3.8/site-packages/mongoengine/document.py", line 233, in _get_collection
worker | cls.ensure_indexes()
worker | File "/opt/venv/lib/python3.8/site-packages/mongoengine/document.py", line 913, in ensure_indexes
worker | collection.create_index(fields, background=background, **opts)
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/collection.py", line 1687, in create_index
worker | return self.__create_indexes([index], session, **cmd_options)[0]
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/collection.py", line 1557, in __create_indexes
worker | with self._socket_for_writes(session) as sock_info:
worker | File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
worker | return next(self.gen)
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/mongo_client.py", line 1099, in _get_socket
worker | with server.get_socket(
worker | File "/usr/lib/python3.8/contextlib.py", line 113, in __enter__
worker | return next(self.gen)
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/pool.py", line 1371, in get_socket
worker | sock_info = self._get_socket(all_credentials)
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/pool.py", line 1436, in _get_socket
worker | self._raise_if_not_ready(emit_event=True)
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/pool.py", line 1407, in _raise_if_not_ready
worker | _raise_connection_failure(
worker | File "/opt/venv/lib/python3.8/site-packages/pymongo/pool.py", line 250, in _raise_connection_failure
worker | raise AutoReconnect(msg) from error
worker | pymongo.errors.AutoReconnect: mongo:27017: connection pool paused
When I delete /data/db/mongod.lock once and restarting container, the same error appears. But if deleted again, and restarted then this error wont appear till I make a change in flask code. If flask is reloaded with some code changes the same thing has to repeat again. How is it possible to remove this error permanently.
Upvotes: 0
Views: 571
Reputation: 697
import logging
from mongoengine import *
class SafeDocumentMixin:
def save_safe(self, *args, **kwargs):
for attempt in range(5):
try:
return self.save(*args, **kwargs)
except pymongo.errors.AutoReconnect as e:
wait_t = 0.5 * pow(2, attempt) # exponential back off
l.warning("PyMongo auto-reconnecting... %s. Waiting %.1f seconds.", str(e), wait_t)
time.sleep(wait_t)
@classmethod
def objects_safe(cls, *args, **kwargs):
for attempt in range(5):
try:
return cls.objects(*args, **kwargs)
except pymongo.errors.AutoReconnect as e:
wait_t = 0.5 * pow(2, attempt) # exponential back off
logging.warning("PyMongo auto-reconnecting... %s. Waiting %.1f seconds.", str(e), wait_t)
time.sleep(wait_t)
class Person(Document, SafeDocumentMixin):
name = StringField()
age = IntField()
SOlved using this explained in How to handle PyMongo/MongoEngine AutoReconnect?
Upvotes: 0