summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarko Kreen2008-02-28 09:41:55 +0000
committerMarko Kreen2008-02-28 09:41:55 +0000
commitfa7ec0f1916cd3b78480a04e8663da62d34ad723 (patch)
tree293e1e784e78d4d96bfc48273b57ea99f54152f3
parent293060a25822dfa33cd5cd7096445b6222636193 (diff)
include upgrade script from -stable
-rwxr-xr-xscripts/skytools_upgrade.py73
-rwxr-xr-xsetup.py7
2 files changed, 78 insertions, 2 deletions
diff --git a/scripts/skytools_upgrade.py b/scripts/skytools_upgrade.py
new file mode 100755
index 00000000..69439863
--- /dev/null
+++ b/scripts/skytools_upgrade.py
@@ -0,0 +1,73 @@
+#! /usr/bin/env python
+
+import sys, os, re, skytools
+
+ver_rx = r"(\d+)([.](\d+)([.](\d+))?)?"
+ver_rc = re.compile(ver_rx)
+
+def detect_londiste215(curs):
+ return skytools.exists_table(curs, 'londiste.subscriber_pending_fkeys')
+
+version_list = [
+ ['pgq', '2.1.5', 'v2.1.5_pgq_core.sql', None],
+ # those vers did not have version func
+ ['pgq_ext', '2.1.5', 'v2.1.5_pgq_ext.sql', None], # ok to reapply
+ ['londiste', '2.1.5', 'v2.1.5_londiste.sql', detect_londiste215], # not ok to reapply
+
+ ['pgq_ext', '2.1.6', 'v2.1.6_pgq_ext.sql', None],
+ ['londiste', '2.1.6', 'v2.1.6_londiste.sql', None],
+]
+
+def parse_ver(ver):
+ m = ver_rc.match(ver)
+ if not ver: return 0
+ v0 = int(m.group(1) or "0")
+ v1 = int(m.group(3) or "0")
+ v2 = int(m.group(5) or "0")
+ return ((v0 * 100) + v1) * 100 + v2
+
+def check_version(curs, schema, new_ver_str, recheck_func=None):
+ funcname = "%s.version" % schema
+ if not skytools.exists_function(curs, funcname, 0):
+ if recheck_func is not None:
+ return recheck_func(curs)
+ else:
+ return 0
+ q = "select %s()" % funcname
+ curs.execute(q)
+ old_ver_str = curs.fetchone()[0]
+ new_ver = parse_ver(new_ver_str)
+ old_ver = parse_ver(old_ver_str)
+ return old_ver >= new_ver
+
+
+class DbUpgrade(skytools.DBScript):
+ def upgrade(self, db):
+ curs = db.cursor()
+ for schema, ver, sql, recheck_fn in version_list:
+ if not skytools.exists_schema(curs, schema):
+ continue
+
+ if check_version(curs, schema, ver, recheck_fn):
+ continue
+
+ fn = "upgrade/final/%s" % sql
+ skytools.installer_apply_file(db, fn, self.log)
+
+ def work(self):
+ self.set_single_loop(1)
+
+ # loop over hosts
+ for cstr in self.args:
+ db = self.get_database('db', connstr = cstr, autocommit = 1)
+ self.upgrade(db)
+ self.close_database('db')
+
+ def load_config(self):
+ return skytools.Config(self.service_name, None,
+ user_defs = {'use_skylog': '0', 'job_name': 'db_upgrade'})
+
+if __name__ == '__main__':
+ script = DbUpgrade('db_upgrade', sys.argv[1:])
+ script.start()
+
diff --git a/setup.py b/setup.py
index 01deb25c..61e8cbfa 100755
--- a/setup.py
+++ b/setup.py
@@ -2,11 +2,12 @@
import sys, os.path, re
from distutils.core import setup
+from distutils.extension import Extension
# check if configure has run
if not os.path.isfile('config.mak'):
print "please run ./configure && make first"
- print "Note: setup.py is suppsed to be run from Makefile"
+ print "Note: setup.py is supposed to be run from Makefile"
sys.exit(1)
# load version
@@ -38,7 +39,9 @@ setup(
'python/setadm.py',
'scripts/cube_dispatcher.py', 'scripts/queue_mover.py',
'scripts/table_dispatcher.py', 'scripts/bulk_loader.py',
- 'scripts/scriptmgr.py', 'scripts/queue_splitter.py'],
+ 'scripts/scriptmgr.py', 'scripts/queue_splitter.py',
+ 'scripts/skytools_upgrade.py',
+ ],
data_files = [
('share/doc/skytools/conf', [
'python/conf/londiste.ini',