summaryrefslogtreecommitdiff
path: root/cpp/config/upgradeicegrid33.py
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2012-11-16 15:52:28 +0100
committerBenoit Foucher <benoit@zeroc.com>2012-11-16 15:52:28 +0100
commit44bd0c07505a6841f4315eedcab0a228a6819852 (patch)
tree7e5d08f5beb7941ea68f8659217efd2379e8acc4 /cpp/config/upgradeicegrid33.py
parentMore changes to windows installers (diff)
downloadice-44bd0c07505a6841f4315eedcab0a228a6819852.tar.bz2
ice-44bd0c07505a6841f4315eedcab0a228a6819852.tar.xz
ice-44bd0c07505a6841f4315eedcab0a228a6819852.zip
Added support for proxy-options to IceGrid adapter, replica group and object descriptors
Diffstat (limited to 'cpp/config/upgradeicegrid33.py')
-rwxr-xr-xcpp/config/upgradeicegrid33.py269
1 files changed, 269 insertions, 0 deletions
diff --git a/cpp/config/upgradeicegrid33.py b/cpp/config/upgradeicegrid33.py
new file mode 100755
index 00000000000..3fb75dd4e2c
--- /dev/null
+++ b/cpp/config/upgradeicegrid33.py
@@ -0,0 +1,269 @@
+#!/usr/bin/env python
+# **********************************************************************
+#
+# Copyright (c) 2003-2012 ZeroC, Inc. All rights reserved.
+#
+# This copy of Ice is licensed to you under the terms described in the
+# ICE_LICENSE file included in this distribution.
+#
+# **********************************************************************
+
+#
+# This script upgrades the IceGrid registry database environment for
+# 3.1.x or 3.2.x version of IceGrid to the new format (>= 3.3).
+#
+# Usage:
+#
+# python upgradeicegrid33.py olddbenv newdbenv
+#
+# Where for example:
+#
+# olddbenv is the path of the Ice 3.1.x registry database environment
+# newdbenv is the path of new registry database environment
+#
+#
+# NOTE: the 3.x slice definitions for the IceGrid database are stored
+# in the icegrid-slice.3.x.tar.gz file. These definitions are used by
+# the script to perform the database transformation.
+#
+
+import sys, os, gzip, time, shutil, getopt
+
+olddbenv = None
+newdbenv = None
+bindir = None
+slicedir = None
+
+transformdbExe = "transformdb"
+dumpdbExe = "dumpdb"
+
+win32 = (sys.platform == "win32")
+if win32:
+ transformdbExe += ".exe"
+ dumpdbExe += ".exe"
+#
+# Show usage information.
+#
+def usage():
+ print "Usage: " + sys.argv[0] + " [options] olddbenv newdbenv"
+ print
+ print "This script upgrades a 3.1 or 3.2 IceGrid registry database environment"
+ print "to an IceGrid registry 3.3 (or newer) database environment."
+ print
+ print "Options:"
+ print "-h Show this message."
+ print "--server-version VER Specifies an alternate Ice version for your"
+ print " IceGrid servers."
+ sys.exit(2)
+
+def printOutputFromPipe(pipe):
+ while 1:
+ line = pipe.readline()
+ if not line:
+ break
+ if line.find("warning") == -1:
+ os.write(1, line)
+
+def error(message):
+ print "error: " + message
+ sys.exit(1)
+
+def transformdb(olddbenv, newdbenv, db, desc, oldslice, newslice):
+ global bindir
+
+ oldslicefile = open(os.path.join(newdbenv, oldslice), "w+")
+ oldslicefile.write(gzip.GzipFile(os.path.join(os.path.dirname(__file__), oldslice + ".gz")).read())
+ oldslicefile.close()
+
+ newslicefile = open(os.path.join(newdbenv, newslice), "w+")
+ newslicefile.write(gzip.GzipFile(os.path.join(os.path.dirname(__file__), newslice + ".gz")).read())
+ newslicefile.close()
+
+ tmpdesc = os.path.join(newdbenv, "tmpdesc.xml")
+ tmpfile = open(tmpdesc, "w+")
+ tmpfile.write(desc)
+ tmpfile.close()
+
+ transformdb = os.path.join(bindir, transformdbExe) + " -i" + \
+ " --old " + os.path.join(newdbenv, oldslice) + \
+ " --new " + os.path.join(newdbenv, newslice)
+
+ pipe = os.popen(transformdb + " -f " + tmpdesc + " " + olddbenv + " " + db + " " + newdbenv + " 2>&1" )
+ printOutputFromPipe(pipe)
+ os.remove(tmpdesc)
+ os.remove(os.path.join(newdbenv, oldslice))
+ os.remove(os.path.join(newdbenv, newslice))
+ if pipe.close():
+ sys.exit(1)
+
+def upgrade31(olddbenv, newdbenv):
+ desc = \
+ '<transformdb>' + \
+ ' ' + \
+ ' <database name="applications" ' + \
+ ' key="string" ' + \
+ ' value="::IceGrid::ApplicationDescriptor,::IceGrid::ApplicationInfo">' + \
+ ' <record>' + \
+ ' <set target="newvalue.revision" value="1"/>' + \
+ ' <set target="newvalue.uuid" value="generateUUID()"/>' + \
+ ' <set target="newvalue.createUser" value="\'IceGrid Registry (database upgrade)\'"/>' + \
+ ' <set target="newvalue.updateUser" value="\'IceGrid Registry (database upgrade)\'"/>' + \
+ ' <set target="newvalue.createTime" value="' + str(int(time.time() * 1000)) + '"/>' + \
+ ' <set target="newvalue.updateTime" value="' + str(int(time.time() * 1000)) + '"/>' + \
+ ' <set target="newvalue.descriptor" value="oldvalue"/>' + \
+ ' </record>' + \
+ ' </database>' + \
+ ' <database name="objects" key="::Ice::Identity" value="::IceGrid::ObjectInfo"><record/></database>' + \
+ ' <database name="adapters" key="string" value="::IceGrid::AdapterInfo"><record/></database>' + \
+ '' + \
+ ' <transform type="::IceGrid::AdapterDescriptor">' + \
+ ' <set target="new.serverLifetime" value="old.waitForActivation"/>' + \
+ ' </transform>' + \
+ '' + \
+ ' <transform type="::IceGrid::ReplicaGroupDescriptor">' + \
+ ' <if test="old.loadBalancing == nil">' + \
+ ' <set target="new.loadBalancing" type="::IceGrid::RandomLoadBalancingPolicy"/>' + \
+ ' <set target="new.loadBalancing.nReplicas" value="\'0\'"/>' + \
+ ' </if>' + \
+ ' <if test="old.loadBalancing != nil and old.loadBalancing.nReplicas == \'0\'">' + \
+ ' <set target="new.loadBalancing.nReplicas" value="\'1\'"/>' + \
+ ' </if>' + \
+ ' </transform>' + \
+ ' ' + \
+ '</transformdb>'
+
+ transformdb(olddbenv, newdbenv, "objects", desc, "icegrid-slice.3.1.ice", "icegrid-slice.3.2.ice")
+ transformdb(olddbenv, newdbenv, "adapters", desc, "icegrid-slice.3.1.ice", "icegrid-slice.3.2.ice")
+ transformdb(olddbenv, newdbenv, "applications", desc, "icegrid-slice.3.1.ice", "icegrid-slice.3.2.ice")
+
+def upgrade32(olddbenv, newdbenv, iceServerVersion):
+
+ databases = \
+ '<database name="adapters" key="string" value="::IceGrid::AdapterInfo"><record/></database>' + \
+ '<database name="applications" key="string" value="::IceGrid::ApplicationInfo"><record/></database>' + \
+ '<database name="internal-objects" key="::Ice::Identity" value="::IceGrid::ObjectInfo">' + \
+ '<record/></database>' + \
+ '<database name="objects" key="::Ice::Identity" value="::IceGrid::ObjectInfo"><record/></database>'
+
+ if iceServerVersion and not iceServerVersion.startswith("3.3") and not iceServerVersion.startswith("3.4"):
+ desc = \
+ '<transformdb>' + \
+ databases + \
+ ' <transform type="::IceGrid::ServerDescriptor">' + \
+ ' <set target="new.iceVersion" value="\'' + iceServerVersion + '\'"/>' + \
+ ' </transform>' + \
+ '</transformdb>'
+ else:
+ desc = \
+ '<transformdb>' + \
+ databases + \
+ ' <transform type="::IceGrid::AdapterDescriptor">' + \
+ ' <set target="new.registerProcess" value="false"/>' + \
+ ' </transform>' + \
+ ' <transform type="::IceGrid::ServerDescriptor">' + \
+ ' <define name="adminEndpointProp" type="::IceGrid::PropertyDescriptor"/>' + \
+ ' <set target="adminEndpointProp.name" value="\'Ice.Admin.Endpoints\'"/>' + \
+ ' <set target="adminEndpointProp.value" value="\'tcp -h 127.0.0.1\'"/>' + \
+ ' <add target="new.propertySet.properties" index="0" value="adminEndpointProp"/>' + \
+ ' </transform>' + \
+ '</transformdb>'
+
+ transformdb(olddbenv, newdbenv, "objects", desc, "icegrid-slice.3.2.ice", "icegrid-slice.3.3.ice")
+ transformdb(olddbenv, newdbenv, "adapters", desc, "icegrid-slice.3.2.ice", "icegrid-slice.3.3.ice")
+ transformdb(olddbenv, newdbenv, "applications", desc, "icegrid-slice.3.2.ice", "icegrid-slice.3.3.ice")
+ if os.path.exists(os.path.join(olddbenv, "internal-objects")):
+ transformdb(olddbenv, newdbenv, "internal-objects", desc, "icegrid-slice.3.2.ice", "icegrid-slice.3.3.ice")
+
+def getIceGridEnvVersion(dbenv):
+ global bindir
+
+ pipe = os.popen(os.path.join(bindir, dumpdbExe) + " -c " + dbenv + " 2>&1")
+ ver = None
+ for line in pipe.readlines():
+ if line.find("value type = ::IceGrid::ApplicationDescriptor") > 0:
+ ver = "3.1"
+ break
+ elif line.find("value type = ::IceGrid::ApplicationInfo") > 0:
+ ver = "3.2"
+ break
+
+ if pipe.close():
+ sys.exit(1)
+
+ return ver
+
+#
+# Check arguments
+#
+
+try:
+ opts, args = getopt.getopt(sys.argv[1:], "hs:", ["help", "server-version="])
+except getopt.GetoptError:
+ usage()
+
+if not args or len(args) != 2:
+ print sys.argv[0] + ": missing database environment arguments"
+ usage()
+olddbenv = args[0]
+newdbenv = args[1]
+
+serverVersion = None
+for o, a in opts:
+ if o in ("-h", "--help"):
+ usage()
+ if o in ("-s", "--server-version"):
+ serverVersion = a
+
+if not os.path.exists(olddbenv):
+ error("database environment `" + olddbenv + "' doesn't exist")
+
+if not os.path.exists(newdbenv):
+ error("database environment `" + newdbenv + "' doesn't exist")
+elif os.path.exists(os.path.join(newdbenv, "applications")) or \
+ os.path.exists(os.path.join(newdbenv, "adapters")) or \
+ os.path.exists(os.path.join(newdbenv, "internal-objects")) or \
+ os.path.exists(os.path.join(newdbenv, "objects")):
+ error("database environment `" + newdbenv + "' already has databases")
+
+for bindir in [os.path.join(os.path.dirname(__file__), "..", "bin"), "/usr/bin"]:
+ bindir = os.path.normpath(bindir)
+ if os.path.exists(os.path.join(bindir, transformdbExe)):
+ break
+
+else:
+ #
+ # Check if transformdb and dumpdb are present in path
+ #
+ print "Check " + transformdbExe + " -v"
+ if(os.system(transformdbExe + " -v") != 0):
+ print "...error"
+ error("can't locate the `" + transformdbExe + "' executable")
+
+ print "Check " + dumpdbExe + " -v "
+ if(os.system(dumpdbExe + " -v") != 0):
+ print "...error"
+ error("can't locate the `" + dumpdbExe + "' executable")
+
+ #
+ # Use transformdb and dumpdb from system path
+ #
+ print "Using transformdb and dumpdb from system path"
+ bindir = ""
+
+
+dbEnvVersion = getIceGridEnvVersion(olddbenv)
+if dbEnvVersion == "3.1":
+ print "upgrading 3.1 database environment...",
+ sys.stdout.flush()
+ os.mkdir(os.path.join(newdbenv, "3.2"))
+ upgrade31(olddbenv, os.path.join(newdbenv, "3.2"))
+ upgrade32(os.path.join(newdbenv, "3.2"), newdbenv, "3.3")
+ shutil.rmtree(os.path.join(newdbenv, "3.2"))
+ print "ok"
+elif dbEnvVersion == "3.2":
+ print "upgrading 3.2 database environment...",
+ sys.stdout.flush()
+ upgrade32(olddbenv, newdbenv, serverVersion)
+ print "ok"
+else:
+ error("can't figure out the version of the IceGrid database environment `" + olddbenv + "'")