[dak/master] Provide a way to set Pg's work_mem from dak.
Signed-off-by: Torsten Werner <twerner@debian.org>
---
daklib/contents.py | 4 ++--
daklib/dbconn.py | 13 +++++++++++--
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/daklib/contents.py b/daklib/contents.py
index f3077aa..449fb88 100755
--- a/daklib/contents.py
+++ b/daklib/contents.py
@@ -285,7 +285,7 @@ def binary_helper(suite_id, arch_id, overridetype_id, component_id = None):
This function is called in a new subprocess and multiprocessing wants a top
level function.
'''
- session = DBConn().session()
+ session = DBConn().session(work_mem = 1000)
suite = Suite.get(suite_id, session)
architecture = Architecture.get(arch_id, session)
overridetype = OverrideType.get(overridetype_id, session)
@@ -304,7 +304,7 @@ def source_helper(suite_id, component_id):
This function is called in a new subprocess and multiprocessing wants a top
level function.
'''
- session = DBConn().session()
+ session = DBConn().session(work_mem = 1000)
suite = Suite.get(suite_id, session)
component = Component.get(component_id, session)
log_message = [suite.suite_name, 'source', component.component_name]
diff --git a/daklib/dbconn.py b/daklib/dbconn.py
index ae5a9e0..9c25f67 100755
--- a/daklib/dbconn.py
+++ b/daklib/dbconn.py
@@ -3591,12 +3591,21 @@ class DBConn(object):
self.__setupmappers()
self.pid = os.getpid()
- def session(self):
+ def session(self, work_mem = 0):
+ '''
+ Returns a new session object. If a work_mem parameter is provided a new
+ transaction is started and the work_mem parameter is set for this
+ transaction. The work_mem parameter is measured in MB. A default value
+ will be used if the parameter is not set.
+ '''
# reinitialize DBConn in new processes
if self.pid != os.getpid():
clear_mappers()
self.__createconn()
- return self.db_smaker()
+ session = self.db_smaker()
+ if work_mem > 0:
+ session.execute("SET LOCAL work_mem TO '%d MB'" % work_mem)
+ return session
__all__.append('DBConn')
--
1.7.2.5
Reply to: