4 BASENAME=$(basename $COMMAND .sh)
7 DIRNAME=$(cd ${DIRNAME}; /bin/pwd)
9 MIGRATION_SED=$DIRNAME/${BASENAME}.sed
10 MIGRATION_SQL=$DIRNAME/${BASENAME}.sql
12 SCHEMA_SQL=$(dirname $DIRNAME)/planetlab5.sql
14 DATE=$(date +%Y-%m-%d-%H-%M)
15 DATE_=$(date +%Y_%m_%d_%H_%M)
16 LOG=${DIRNAME}/${DATE}.log
17 DUMP=${DIRNAME}/${DATE}-pl4.sql
18 RESTORE=${DIRNAME}/${DATE}-pl5.sql
19 FAKE=${DIRNAME}/input-pl4.sql
20 VIEWS_SQL=$DIRNAME/${DATE}-views5.sql
21 NODEGROUPS_DEF=$DIRNAME/site-nodegroups.def
22 NODEGROUPS_SQL=$DIRNAME/${DATE}-nodegroups.sql
25 . /etc/planetlab/plc_config
27 # return 0 (yes) or 1 (no) whether the database exists
28 function check_for_database () {
30 psql --user=$PLC_DB_USER --quiet -c "SELECT datname from pg_database where datname= '$dbname' LIMIT 1" $dbname > /dev/null 2>&1
34 # when 'service plc start' gets run, the planetlab5 DB gets created
35 # so this script will drop the planetlab5 DB and re-create it from scratch
36 # with the contents of the planetlab4 DB that is epxected to exist
38 echo "========================================"
40 echo "This script is designed to ease the migration from myplc 4.2 to 5.0"
41 echo "You can run it before of after you install a 5.0 myplc"
43 echo "It will attempt to re-create the planetlab5 database from planetlab4"
44 echo "The planetlab5 database is renamed, not dropped, if it is found on the system"
46 echo "You might wish to edit/review $NODEGROUPS_DEF to finetune your migration"
47 echo "========================================"
48 echo -n "Are you sure you want to proceed y/[n] ? "
51 y|Y) echo See log in $LOG ;;
52 *) echo "Bye" ; exit 1 ;;
57 [ -f $MIGRATION_SED ] || { echo $MIGRATION_SED not found - exiting ; exit 1; }
58 [ -f $MIGRATION_SQL ] || { echo $MIGRATION_SQL not found - exiting ; exit 1; }
59 [ -f $SCHEMA_SQL ] || { echo $SCHEMA_SQL not found - exiting ; exit 1; }
60 [ -f $NODEGROUPS_DEF ] || { echo $NODEGROUPS_DEF not found - exiting ; exit 1; }
66 if [ -n "$DEBUG" ] ; then
67 echo -n "Type enter to run next step XXX $message XXX ... "
72 echo "==================================================" >> $LOG
83 # check that planetlab4 exists
84 if check_for_database planetlab4 ; then
85 echo "OK : FOUND db planetlab4"
87 echo "ERROR : planetlab4 NOT FOUND - bye"
91 # check if planetlab5 exists
92 if check_for_database planetlab5 ; then
93 rename=planetlab5_${DATE_}
94 echo -n "There is an existing DB named planetlab5, drop or rename into $rename d/[r] ? "
98 run "Dropping planetlab5" psql --user=postgres template1 -c "DROP DATABASE planetlab5" || true
101 if check_for_database $rename ; then
102 echo "$rename already exists - exiting"
105 run "Renaming planetlab5 into $rename" \
106 psql --user=postgres template1 -c "ALTER DATABASE planetlab5 RENAME TO $rename"
112 # again: now it should not exist
113 if check_for_database planetlab5 ; then
114 echo "ERROR : FOUND planetlab5 - should not happen - exiting"
117 echo "OK, we're clear, let's go"
122 if [ ! -f $FAKE ] ; then
123 run "Dumping planetlab4 in $DUMP" pg_dump --user=$PLC_DB_USER -f $DUMP planetlab4
126 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
128 echo Using fake input for tests $FAKE
130 echo 'xxxx WARNING WARNING WARNING WARNING WARNING xxx'
135 run "Copying into $RESTORE" cp $DUMP $RESTORE
136 run "Renaming identifiers in $RESTORE" sed -f $MIGRATION_SED -i $RESTORE
138 run "Creating planetlab5 database" createdb --user=postgres --encoding=UNICODE --owner=$PLC_DB_USER planetlab5
139 run "Loading language plpgsql" createlang -U postgres plpgsql planetlab5 || true
140 run "Populating planetlab5 from $RESTORE" psql --user=postgres -f $RESTORE planetlab5
141 run "Parsing $NODEGROUPS_DEF" $DIRNAME/v4-to-v5-nodegroups.py $NODEGROUPS_DEF $NODEGROUPS_SQL
142 run "Loading $NODEGROUPS_SQL" psql --user=$PLC_DB_USER -f $NODEGROUPS_SQL planetlab5
143 run "Fine-tuning it with $MIGRATION_SQL" psql --user=$PLC_DB_USER -f $MIGRATION_SQL planetlab5
144 run "Extracting views definitions from $SCHEMA_SQL" ./extract-views.py $SCHEMA_SQL $VIEWS_SQL
145 run "Inserting views definitions in planetlab5" \
146 psql --user=$PLC_DB_USER -f $VIEWS_SQL planetlab5
149 function manage_link () {
153 echo "Managing link $dest"
160 result=${DIRNAME}/${DATE}-output.sql
161 run "Dumping result in $result" pg_dump --user=$PLC_DB_USER -f $result planetlab5
163 manage_link latest.log $LOG
164 manage_link latest-pl4.sql $DUMP
165 manage_link latest-pl5.sql $RESTORE
166 manage_link latest-views5.sql $VIEWS_SQL
167 manage_link latest-output.sql $result