blob: 0edcdfc7d49ff3c91436a81ba84f5dcd534ef9cd [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
import subprocess
releases = {"3.0": "200703112",
"3.1": "200712072",
"3.2": "200808253",
"3.3": "200902041"}
def release2catverno(rno):
if not rno in releases.keys():
raise Exception("unknown version %s" % rno)
return releases[rno]
def stop_cluster():
p.subprocess.Popen(['gpstop', '-a'], shell=False, close_fds=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = p.communicate()
if p.returncode != 0:
raise Exception("could not stop cluster: " + result[0] + result[1])
def get_control_data(datadir):
'''
Parse the output of pg_controldata run on data directory, returning
catalog version and state
'''
cmd = ['pg_controldata', datadir]
p = subprocess.Popen(cmd, shell=False, close_fds=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = p.communicate()
if p.returncode != 0:
raise Exception("error running " + ' '.join(cmd) + ": " + result[0] + result[1])
out = result[0].strip()
ver = ""
state = ""
for line in out.split('\n'):
s = line.split(':')
if s[0] == 'Catalog version number':
ver = s[1].strip()
elif s[0] == 'Database cluster state':
state = s[1].strip()
return [ver, state]
def setcatversion(datadir, frm, to):
'''
Set catalog version to 'to' from 'frm'. Check that the system is down
and actually set to the previous version.
'''
(ver, state) = get_control_data(datadir)
frmcatverno = release2catverno(frm)
if ver != frmcatverno:
raise Exception("Expected version %s but found %s" % (frmcatverno, ver))
cmd = ['/Users/swm/greenplum-db-devel/bin/lib/gpmodcatversion', '--catversion', to, datadir]
p = subprocess.Popen(cmd,
shell=False, close_fds=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
result = p.communicate()
if p.returncode != 0:
raise Exception("could not update catalog to %s" % to)
if __name__ == '__main__':
paths = ['/Users/swm/greenplum-db-devel/upg/upgradetest-1',
'/Users/swm/greenplum-db-devel/upg/upgradetest1',
'/Users/swm/greenplum-db-devel/upg/upgradetest0']
for p in paths:
setcatversion(p, '3.2', '3.3')