Milimetric has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/149123

Change subject: Improve connection pool configurability
......................................................................

Improve connection pool configurability

Bug: 68534
Change-Id: Iddafd2bb9e90824757cd71da3e2649585404a79d
---
A tests/manual/connection_pool_configuration.py
M wikimetrics/config/db_config.yaml
M wikimetrics/database.py
3 files changed, 40 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/analytics/wikimetrics 
refs/changes/23/149123/1

diff --git a/tests/manual/connection_pool_configuration.py 
b/tests/manual/connection_pool_configuration.py
new file mode 100644
index 0000000..c9718c7
--- /dev/null
+++ b/tests/manual/connection_pool_configuration.py
@@ -0,0 +1,35 @@
+from unittest import TestCase
+from sqlalchemy.exc import TimeoutError
+from nose.tools import assert_equals, assert_true, raises
+
+from tests.fixtures import mediawiki_project
+from wikimetrics.configurables import db, parse_db_connection_string, queue
+from wikimetrics.database import get_host_projects, get_host_projects_map
+from wikimetrics.models import Page
+
+
+class DatabaseSetupTest(TestCase):
+
+    @raises(TimeoutError)
+    def test_pool_size_can_be_exceeded(self):
+        pool_size = db.config['MEDIAWIKI_POOL_SIZE'] + 11
+        self.sessions = [
+            db.get_mw_session(mediawiki_project)
+            for i in range(pool_size)
+        ]
+        [self.sessions[i].query(Page).all() for i in range(pool_size)]
+
+    def test_pool_size_is_used(self):
+        pool_size = db.config['MEDIAWIKI_POOL_SIZE']
+        self.sessions = [
+            db.get_mw_session(mediawiki_project)
+            for i in range(pool_size)
+        ]
+        [self.sessions[i].query(Page).all() for i in range(pool_size)]
+        assert_true(True)
+
+    def tearDown(self):
+        if hasattr(self, 'sessions'):
+            sessions = getattr(self, 'sessions')
+            for s in sessions:
+                s.close()
diff --git a/wikimetrics/config/db_config.yaml 
b/wikimetrics/config/db_config.yaml
index 8571c10..acfed7c 100644
--- a/wikimetrics/config/db_config.yaml
+++ b/wikimetrics/config/db_config.yaml
@@ -1,6 +1,8 @@
 SQL_ECHO                        : False
 # For testing with mysql locally (useful for manual connection survival tests)
 WIKIMETRICS_ENGINE_URL          : 
'mysql://wikimetrics:wikimetrics@localhost/wikimetrics'
+WIKIMETRICS_POOL_SIZE           : 20
 MEDIAWIKI_ENGINE_URL_TEMPLATE   : 
'mysql://wikimetrics:wikimetrics@localhost/{0}'
+MEDIAWIKI_POOL_SIZE             : 32
 DEBUG                           : True
 REVISION_TABLENAME              : 'revision_userindex'
diff --git a/wikimetrics/database.py b/wikimetrics/database.py
index d57c95c..19fe07d 100644
--- a/wikimetrics/database.py
+++ b/wikimetrics/database.py
@@ -97,6 +97,7 @@
                 self.config['WIKIMETRICS_ENGINE_URL'],
                 echo=self.config['SQL_ECHO'],
                 connect_args={"charset" : "utf8"},
+                pool_size=self.config['WIKIMETRICS_POOL_SIZE'],
             )
 
         return self.wikimetrics_engine
@@ -168,7 +169,8 @@
             engine = create_engine(
                 engine_template.format(project),
                 echo=self.config['SQL_ECHO'],
-                convert_unicode=True
+                convert_unicode=True,
+                pool_size=self.config['MEDIAWIKI_POOL_SIZE'],
             )
             self.mediawiki_engines[project] = engine
             return engine

-- 
To view, visit https://gerrit.wikimedia.org/r/149123
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Iddafd2bb9e90824757cd71da3e2649585404a79d
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to