From c6f1b962eb054abceef8f929078c76c1af23fc15 Mon Sep 17 00:00:00 2001
From: felmer <felmer>
Date: Mon, 22 Aug 2011 12:37:12 +0000
Subject: [PATCH] LMS-2471 new snapshot creation script

SVN: 22578
---
 openbis_all/source/bash/create-snapshot.sh | 122 +++++++++++++++++++++
 1 file changed, 122 insertions(+)
 create mode 100755 openbis_all/source/bash/create-snapshot.sh

diff --git a/openbis_all/source/bash/create-snapshot.sh b/openbis_all/source/bash/create-snapshot.sh
new file mode 100755
index 00000000000..3bd35000b20
--- /dev/null
+++ b/openbis_all/source/bash/create-snapshot.sh
@@ -0,0 +1,122 @@
+#! /bin/bash
+# 
+# Creates a snapshot of an openBIS instance based on a configuration file.
+# 
+# usage: create-snapshot.sh <configuration file>
+# 
+# The configuration files knows the following key-value pairs (stored as <key> = <value>):
+# 
+# repository			Path to the directory which will store the snapshot.
+# servers					Path to to a directory which contains the folders 'datastore_server'
+# 								and 'openBIS-server'. 
+# store						Path to the directory which contains the data set store. Everything there
+# 								will be added to the snapshot.
+# databases				Space separated list of database to be dumped.
+# index						Relative path to the lucene index. 
+# 								It is relative to <servers path>/openBIS-server/jetty/. 
+# 								If this optional attribute is missing no lucene index will added to the snapshot. 
+# 
+# Important Notes: 
+# - This script should be run after all servers have been stopped.
+# - Can not be used for segmented stores because the script doesn't follow symbolic links. 
+# 
+function getValue {
+    file=$1
+    key=$2
+    awk -F ' *= *' -v key=$2 '{map[$1] = $2} END {print map[key]}' $file
+}
+
+if [ $# -ne 1 ]; then
+    echo "Usage: create-snapshot.sh <configuration file>"
+    exit 1
+fi
+
+CONFIGURATION_FILE="$1"
+
+SERVERS_PATH=`getValue $CONFIGURATION_FILE servers`
+if [ -z "$SERVERS_PATH" ]; then
+    echo "Path to servers not specified in $CONFIGURATION_FILE."
+    exit 1
+fi
+OPENBIS_AS_ROOT="$SERVERS_PATH/openBIS-server/jetty/"
+if [ ! -d "$OPENBIS_AS_ROOT" ]; then
+    echo "Error: $OPENBIS_AS_ROOT isn't a directory."
+    echo "Most probable reason: $SERVERS_PATH doesn't point to a valid openBIS instance."
+    exit 1
+fi
+REPOSITORY=`getValue $CONFIGURATION_FILE repository`
+if [ -z "$REPOSITORY" ]; then
+    echo "Repository not specified in $CONFIGURATION_FILE."
+    exit 1
+fi
+mkdir -p "$REPOSITORY"
+STORE=`getValue $CONFIGURATION_FILE store`
+if [ -z "$STORE" ]; then
+    echo "Store not specified in $CONFIGURATION_FILE."
+    exit 1
+fi
+if [ ! -d "$STORE" ]; then
+    echo "Store path $STORE doesn't point to an existing directory."
+    exit 1
+fi
+DATABASES=`getValue $CONFIGURATION_FILE databases`
+if [ -z "$DATABASES" ]; then
+    echo "At least one database has to be specified in $CONFIGURATION_FILE."
+    exit 1
+fi
+INDEX=`getValue $CONFIGURATION_FILE index`
+if [ -n "$INDEX" ]; then
+    if [ ! -d "$INDEX" ]; then
+        mkdir -p "$INDEX"
+    fi
+fi
+TIMESTAMP=`date +%Y-%m-%d_%H:%M:%S`
+SNAPSHOT_FOLDER="openbis-snapshot-$TIMESTAMP"
+SNAPSHOT="$REPOSITORY/$SNAPSHOT_FOLDER"
+
+##################################################
+#
+# Starting snapshot creation
+#
+echo "==== creating snapshot $SNAPSHOT.tgz"
+
+mkdir "$SNAPSHOT"
+cp -p "$CONFIGURATION_FILE" "$SNAPSHOT"
+############## dump the store ##############
+tar -cf "$SNAPSHOT/store.tar" -C "$STORE" .
+if [ $? -ne 0 ]; then
+    echo "Error creating store dump. Snapshot creation aborted."
+    exit 1
+fi
+echo "Dump of store $STORE has been successfully created."
+############## dump databases ##############
+for db in $DATABASES; do
+    pg_dump -U postgres -O $db > "$SNAPSHOT/$db.sql"
+    if [ $? -ne 0 ]; then
+        echo "Error dumping database '$db'. Snapshot creation aborted."
+        exit 1
+    fi
+    echo "Database '$db' has been successfully dumped."
+done
+############## dump index (if requested) ##############
+if [ -n "$INDEX" ]; then
+    tar -cf "$SNAPSHOT/index.tar" -C "$INDEX" .
+    if [ $? -ne 0 ]; then
+        echo "Error creating index dump. Snapshot creation aborted."
+        exit 1
+    fi
+    echo "Dump of index $INDEX has been successfully created."
+fi
+############## packaging ##############
+tar -zcf "$SNAPSHOT.tgz" -C "$REPOSITORY" "$SNAPSHOT_FOLDER" 
+if [ $? -ne 0 ]; then
+    echo "Error packaging snapshot $SNAPSHOT."
+    exit 1
+fi
+rm -rf "$SNAPSHOT"
+
+echo "==== $SNAPSHOT.tgz successfully created."
+    
+
+
+
-- 
GitLab