summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Shyba <victor.shyba@gmail.com>2015-11-17 21:27:38 -0300
committerVictor Shyba <victor.shyba@gmail.com>2015-12-03 17:30:49 -0300
commitf1497b92aff3b953eca572c08d85d8ddffb36391 (patch)
tree3d25c829be3eb748c2b98a3c0ef498c5090c1d69
parentfa595231b5ea346dfd9e06c364854469397fca3f (diff)
[feat] add configuration to disable batching
Batch support is optional. This commit adds a 'batching' configuration option to disable it.
-rw-r--r--common/src/leap/soledad/common/backend.py5
-rw-r--r--common/src/leap/soledad/common/tests/fixture_soledad.conf1
-rw-r--r--common/src/leap/soledad/common/tests/test_server.py33
-rw-r--r--server/src/leap/soledad/server/__init__.py25
4 files changed, 41 insertions, 23 deletions
diff --git a/common/src/leap/soledad/common/backend.py b/common/src/leap/soledad/common/backend.py
index 9f5950b2..91f28fff 100644
--- a/common/src/leap/soledad/common/backend.py
+++ b/common/src/leap/soledad/common/backend.py
@@ -33,6 +33,7 @@ from leap.soledad.common.document import ServerDocument
class SoledadBackend(CommonBackend):
+ BATCH_SUPPORT = True
"""
A U1DB backend implementation.
@@ -58,6 +59,8 @@ class SoledadBackend(CommonBackend):
self._set_replica_uid(replica_uid)
def batch_start(self):
+ if not self.BATCH_SUPPORT:
+ return
self.batching = True
self.after_batch_callbacks = {}
self._database.batch_start()
@@ -67,6 +70,8 @@ class SoledadBackend(CommonBackend):
self._get_generation() # warm up gen info
def batch_end(self):
+ if not self.BATCH_SUPPORT:
+ return
self.batching = False
self._database.batch_end()
for name in self.after_batch_callbacks:
diff --git a/common/src/leap/soledad/common/tests/fixture_soledad.conf b/common/src/leap/soledad/common/tests/fixture_soledad.conf
index c0ffacf6..8d8161c3 100644
--- a/common/src/leap/soledad/common/tests/fixture_soledad.conf
+++ b/common/src/leap/soledad/common/tests/fixture_soledad.conf
@@ -2,6 +2,7 @@
couch_url = http://soledad:passwd@localhost:5984
create_cmd = sudo -u soledad-admin /usr/bin/create-user-db
admin_netrc = /etc/couchdb/couchdb-soledad-admin.netrc
+batching = 0
[database-security]
members = user1, user2
diff --git a/common/src/leap/soledad/common/tests/test_server.py b/common/src/leap/soledad/common/tests/test_server.py
index e1129a9f..20fe8579 100644
--- a/common/src/leap/soledad/common/tests/test_server.py
+++ b/common/src/leap/soledad/common/tests/test_server.py
@@ -640,18 +640,25 @@ class ConfigurationParsingTest(unittest.TestCase):
config = load_configuration(config_path)
# then
- expected = {'soledad-server': {
- 'couch_url':
- 'http://soledad:passwd@localhost:5984',
- 'create_cmd':
- 'sudo -u soledad-admin /usr/bin/create-user-db',
- 'admin_netrc':
- '/etc/couchdb/couchdb-soledad-admin.netrc',
- },
- 'database-security': {
- 'members': ['user1', 'user2'],
+ expected = {'members': ['user1', 'user2'],
'members_roles': ['role1', 'role2'],
'admins': ['user3', 'user4'],
- 'admins_roles': ['role3', 'role3'],
- }}
- self.assertDictEqual(expected, config)
+ 'admins_roles': ['role3', 'role3']}
+ self.assertDictEqual(expected, config['database-security'])
+
+ def test_server_values_configuration(self):
+ # given
+ config_path = resource_filename('leap.soledad.common.tests',
+ 'fixture_soledad.conf')
+ # when
+ config = load_configuration(config_path)
+
+ # then
+ expected = {'couch_url':
+ 'http://soledad:passwd@localhost:5984',
+ 'create_cmd':
+ 'sudo -u soledad-admin /usr/bin/create-user-db',
+ 'admin_netrc':
+ '/etc/couchdb/couchdb-soledad-admin.netrc',
+ 'batching': False}
+ self.assertDictEqual(expected, config['soledad-server'])
diff --git a/server/src/leap/soledad/server/__init__.py b/server/src/leap/soledad/server/__init__.py
index 00e1e9fb..7320c133 100644
--- a/server/src/leap/soledad/server/__init__.py
+++ b/server/src/leap/soledad/server/__init__.py
@@ -104,6 +104,7 @@ from leap.soledad.server.sync import (
)
from leap.soledad.common import SHARED_DB_NAME
+from leap.soledad.common.backend import SoledadBackend
from leap.soledad.common.couch.state import CouchServerState
# ----------------------------------------------------------------------------
@@ -264,6 +265,7 @@ CONFIG_DEFAULTS = {
'couch_url': 'http://localhost:5984',
'create_cmd': None,
'admin_netrc': '/etc/couchdb/couchdb-admin.netrc',
+ 'batching': True
},
'database-security': {
'members': ['soledad'],
@@ -285,18 +287,20 @@ def load_configuration(file_path):
@rtype: dict
"""
defaults = dict(CONFIG_DEFAULTS)
- config = configparser.ConfigParser()
+ config = configparser.SafeConfigParser()
config.read(file_path)
- for section in defaults.keys():
- if section in config:
- for key in defaults[section]:
- if key in config[section]:
- defaults[section][key] = config[section][key]
- for key, value in defaults['database-security'].iteritems():
- if type(value) is not unicode:
+ for section in defaults:
+ if not config.has_section(section):
continue
- defaults['database-security'][key] = \
- [item.strip() for item in value.split(',')]
+ for key, value in defaults[section].items():
+ if type(value) == bool:
+ defaults[section][key] = config.getboolean(section, key)
+ elif type(value) == list:
+ values = config.get(section, key).split(',')
+ values = [v.strip() for v in values]
+ defaults[section][key] = values
+ else:
+ defaults[section][key] = config.get(section, key)
# TODO: implement basic parsing/sanitization of options comming from
# config file.
return defaults
@@ -310,6 +314,7 @@ def application(environ, start_response):
conf = load_configuration('/etc/soledad/soledad-server.conf')
conf = conf['soledad-server']
state = CouchServerState(conf['couch_url'], create_cmd=conf['create_cmd'])
+ SoledadBackend.BATCH_SUPPORT = conf['batching']
# WSGI application that may be used by `twistd -web`
application = GzipMiddleware(
SoledadTokenAuthMiddleware(SoledadApp(state)))