Skip to content
Snippets Groups Projects
Unverified Commit 787f5360 authored by drebs's avatar drebs
Browse files

[bug] fix logging while checking CouchDB schema versions on server startup

parent 5956b8e0
No related branches found
No related tags found
1 merge request!163Fix logging
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
Database schema version verification Database schema version verification
""" """
import os
import treq import treq
from six.moves.urllib.parse import urljoin from six.moves.urllib.parse import urljoin
...@@ -84,13 +83,6 @@ def _check_db_schema_version(url, db, auth, agent=None): ...@@ -84,13 +83,6 @@ def _check_db_schema_version(url, db, auth, agent=None):
raise WrongCouchSchemaVersionError(db) raise WrongCouchSchemaVersionError(db)
def _stop(failure, reactor):
logger.error("Failure while checking schema versions: %r - %s"
% (failure, failure.message))
reactor.addSystemEventTrigger('after', 'shutdown', os._exit, 1)
reactor.stop()
@defer.inlineCallbacks @defer.inlineCallbacks
def check_schema_versions(couch_url, agent=None, reactor=reactor): def check_schema_versions(couch_url, agent=None, reactor=reactor):
""" """
...@@ -107,17 +99,26 @@ def check_schema_versions(couch_url, agent=None, reactor=reactor): ...@@ -107,17 +99,26 @@ def check_schema_versions(couch_url, agent=None, reactor=reactor):
url = urlsplit(couch_url) url = urlsplit(couch_url)
auth = (url.username, url.password) if url.username else None auth = (url.username, url.password) if url.username else None
url = "%s://%s:%d" % (url.scheme, url.hostname, url.port) url = "%s://%s:%d" % (url.scheme, url.hostname, url.port)
try:
res = yield treq.get(urljoin(url, '_all_dbs'), auth=auth, agent=agent) res = yield treq.get(urljoin(url, '_all_dbs'), auth=auth, agent=agent)
dbs = yield res.json() dbs = yield res.json()
except Exception as e:
logger.error('Error trying to get list of dbs from %s: %r'
% (url, e))
raise e
deferreds = [] deferreds = []
semaphore = defer.DeferredSemaphore(20) semaphore = defer.DeferredSemaphore(20)
logger.info('Starting schema versions check...') logger.info('Starting CouchDB schema versions check...')
for db in dbs: for db in dbs:
if not db.startswith('user-'): if not db.startswith('user-'):
continue continue
d = semaphore.run(_check_db_schema_version, url, db, auth, agent=agent) d = semaphore.run(_check_db_schema_version, url, db, auth, agent=agent)
d.addErrback(_stop, reactor=reactor)
deferreds.append(d) deferreds.append(d)
d = defer.gatherResults(deferreds, consumeErrors=True) d = defer.gatherResults(deferreds, consumeErrors=True)
d.addCallback(lambda _: logger.info('Finished schema versions check.')) try:
yield d yield d
logger.info('Finished CouchDB schema versions check.')
except Exception as e:
msg = 'Error checking CouchDB schema versions: %r' % e
logger.error(msg)
raise Exception(msg)
import mock
import pytest import pytest
from leap.soledad.common.couch import CONFIG_DOC_ID from leap.soledad.common.couch import CONFIG_DOC_ID
...@@ -17,7 +16,7 @@ from twisted.internet import reactor ...@@ -17,7 +16,7 @@ from twisted.internet import reactor
from twisted.web.client import HTTPConnectionPool, Agent from twisted.web.client import HTTPConnectionPool, Agent
class CouchDesignDocsTests(CouchDBTestCase): class CouchStateTests(CouchDBTestCase):
def setUp(self): def setUp(self):
CouchDBTestCase.setUp(self) CouchDBTestCase.setUp(self)
...@@ -40,14 +39,14 @@ class CouchDesignDocsTests(CouchDBTestCase): ...@@ -40,14 +39,14 @@ class CouchDesignDocsTests(CouchDBTestCase):
self.couch_url, self.db.name, None, agent=self.agent) self.couch_url, self.db.name, None, agent=self.agent)
@defer.inlineCallbacks @defer.inlineCallbacks
def test_check_schema_versions_wrong_schema_version_stops_reactor(self): def test_check_schema_versions_wrong_schema_version_raises(self):
wrong_schema_version = SCHEMA_VERSION + 1 wrong_schema_version = SCHEMA_VERSION + 1
self.db.create( self.db.create(
{'_id': CONFIG_DOC_ID, SCHEMA_VERSION_KEY: wrong_schema_version}) {'_id': CONFIG_DOC_ID, SCHEMA_VERSION_KEY: wrong_schema_version})
mocked_reactor = mock.Mock() expected_msg = 'Error checking CouchDB schema versions: ' \
yield check_schema_versions( 'FirstError.*WrongCouchSchemaVersionError()'
self.couch_url, agent=self.agent, reactor=mocked_reactor) with pytest.raises(Exception, match=expected_msg):
mocked_reactor.stop.assert_called() yield check_schema_versions(self.couch_url, agent=self.agent)
@defer.inlineCallbacks @defer.inlineCallbacks
def test__check_db_schema_version_missing_config_doc_raises(self): def test__check_db_schema_version_missing_config_doc_raises(self):
...@@ -57,9 +56,9 @@ class CouchDesignDocsTests(CouchDBTestCase): ...@@ -57,9 +56,9 @@ class CouchDesignDocsTests(CouchDBTestCase):
self.couch_url, self.db.name, None, agent=self.agent) self.couch_url, self.db.name, None, agent=self.agent)
@defer.inlineCallbacks @defer.inlineCallbacks
def test_check_schema_versions_missing_config_doc_stops_reactor(self): def test_check_schema_versions_missing_config_doc_raises(self):
self.db.create({}) self.db.create({})
mocked_reactor = mock.Mock() expected_msg = 'Error checking CouchDB schema versions: ' \
yield check_schema_versions( 'FirstError.*MissingCouchConfigDocumentError()'
self.couch_url, agent=self.agent, reactor=mocked_reactor) with pytest.raises(Exception, match=expected_msg):
mocked_reactor.stop.assert_called() yield check_schema_versions(self.couch_url, agent=self.agent)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment