File: //usr/openv/pdde/pdag/scripts/pddeupgrade.sh
#!/bin/sh
###############################################################################
# The pddeupgrade script performs upgrades on the PDDE storage
###############################################################################
# Copyright (C) 2015 Symantec
# All Rights Reserved
#
# THIS SOURCE CODE IS AN UNPUBLISHED PROPRIETARY TRADE SECRET OF
# Symantec
#
# The copyright notice above does not evidence any actual or intendent
# publication of such source code.
#
###############################################################################
INSTALL_PATH="/usr/openv/pdde"
OSTPLUGINS_PATH="/usr/openv/lib/ost-plugins"
PDCFG="${INSTALL_PATH}/pdag/bin/pdcfg"
STCONV="${INSTALL_PATH}/pdcr/bin/stconv"
BACKUP_DATE=`date +%F_%H:%M:%S`
TIMESTAMP=`date +%F_%H:%M`
LOGDIR="/var/log/puredisk"
if [ ! -d "${LOGDIR}" ] ; then
mkdir -p ${LOGDIR}
fi
LOGFILE=${LOGDIR}/${TIMESTAMP}-pddeupgrade.log
# Remove group and world writable permissions
umask 0022
if [ $# -gt 0 ] ; then
INSTALL_TYPE=$1
case "$1" in
'all')
INSTALL_TYPE="all"
;;
'agent')
INSTALL_TYPE="agent"
;;
'server')
INSTALL_TYPE="server"
;;
*)
INSTALL_TYPE="help"
;;
esac
else
INSTALL_TYPE="all"
fi
if [ "${INSTALL_TYPE}" = "help" ] ; then
echo "$0: Upgades the PDDE configuration to the current installed version."
echo "Usage: $0 [agent|server]"
echo "Options:"
echo " all Upgrade both agent and server components (default)"
echo " agent Upgrade agent components only"
echo " server Upgrade server components only"
exit 0
fi
###############################################################################
# Helper function that uses pdcfg to modify config files
# Parameters:
# 1: The config file to change (required)
# 2: The template config file to fetch default values from (optional, use "")
# 3: The section in the config file
# 4: The option in the config file
# 5: The value to use in the config file
# 6: 1 means always write, 0 means do not overwrite current value
###############################################################################
Set_Cfg_Parameter()
{
CONFIG_FILE=${1} # Required
DEF_CONFIG_FILE=${2} # Optional: "" means don't check template for default value
CFG_SECTION=${3} # Required
CFG_OPTION=${4} # Required
CFG_VALUE=${5} # Required
OVERWRITE=${6} # Required: 0: Do not overwrite if parameter is present
# 1: Change whatever value is present to $CFG_VALUE
if [ "X${DEF_CONFIG_FILE}" != "X" -a -f "${DEF_CONFIG_FILE}" ]; then
TEMP="`${PDCFG} --read=${DEF_CONFIG_FILE} --section=${CFG_SECTION} --option=${CFG_OPTION}`"
if [ "X$TEMP" = "X" ]; then
echo "Warning, could not read [${CFG_SECTION}]${CFG_OPTION} from ${DEF_CONFIG_FILE}, using default value ${CFG_VALUE} instead"
elif [ "$TEMP" != "$CFG_VALUE" ]; then
echo "Warning, the specified [${CFG_SECTION}]${CFG_OPTION} is different with the default value in ${DEF_CONFIG_FILE}"
fi
fi
if [ -f "${CONFIG_FILE}" ]; then
SETVALUE=1
if [ "${OVERWRITE}" -ne "1" ] ; then
TEMP=`${PDCFG} --read="${CONFIG_FILE}" --section=${CFG_SECTION} --option=${CFG_OPTION} 2>/dev/null`
if [ "X$TEMP" != "X" ]; then
SETVALUE=0
echo "[${CFG_SECTION}]${CFG_OPTION} already exists in ${CONFIG_FILE} (value: ${TEMP}). Skipping..."
fi
fi
if [ ${SETVALUE} -eq 1 ]; then
echo "Updating ${CONFIG_FILE}: [${CFG_SECTION}]${CFG_OPTION} = ${CFG_VALUE}"
${PDCFG} --write="${CONFIG_FILE}" --section=${CFG_SECTION} --option=${CFG_OPTION} --value="${CFG_VALUE}"
if [ $? -ne 0 ] ; then
echo "Failed to upgrade [${CFG_SECTION}]${CFG_OPTION} to ${CONFIG_FILE}"
fi
fi
if [ -f "${DEF_CONFIG_FILE}" ]; then
${PDCFG} --write="${CONFIG_FILE}" --section=${CFG_SECTION} --option=${CFG_OPTION} --commentfile="${DEF_CONFIG_FILE}"
fi
else
echo "Warning, could not locate ${CONFIG_FILE}"
fi
}
Deprecate_Parameter()
{
CONFIG_FILE=${1}
CFG_SECTION=${2}
CFG_OPTION=${3}
echo "Deprecate [${CFG_SECTION}]${CFG_OPTION}"
${PDCFG} --write="${CONFIG_FILE}" --section=${CFG_SECTION} --option=${CFG_OPTION} --clear-comment >/dev/null 2>&1
${PDCFG} --write="${CONFIG_FILE}" --section=${CFG_SECTION} --option=${CFG_OPTION} --add-comment=" Deprecated" >/dev/null 2>&1
}
Check_Generate_Identity()
{
if [ "X${DATA_PATH}" != "X" ] ; then
echo "Found data path: ${DATA_PATH}"
if [ -d "${DATA_PATH}" ] ; then
echo "Checking for .identity file"
if [ -f "${DATA_PATH}/.identity" ] ; then
echo ".identity file exists, no action needed"
else
echo "Attempting to run spoold --genidentity"
${INSTALL_PATH}/pdcr/bin/spoold --genidentity -v --trace "${LOG_PATH}/spoold/genidentity.log"
if [ $? -ne 0 ] ; then
echo "spoold --genidentity failed"
else
echo "spoold --genidentity was successful"
fi
fi
fi
fi
}
###############################################################################
# Helper function that modifies pd.conf
# Parameters:
# 1: The name of the config parameter to change (required)
# 2: The value to use for this parameter (required)
###############################################################################
Set_Pd_Conf_Parameter()
{
PARAMVAL="$1 = $2"
sed -e "s/$1.*/${PARAMVAL}/g" ${OSTPLUGINS_PATH}/pd.conf > ${OSTPLUGINS_PATH}/pd.conf.tmp
mv -f ${OSTPLUGINS_PATH}/pd.conf.tmp ${OSTPLUGINS_PATH}/pd.conf
chmod o-w ${OSTPLUGINS_PATH}/pd.conf
}
Upgrade_Pd_Conf()
{
PD_CONF_PATH=${1}
PD_CONF_ENTRY_CHECK=`grep "FIBRECHANNEL" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Enable FC Transportation (0=disable, 1=enable)" >> ${PD_CONF_PATH}
echo "FIBRECHANNEL = 0" >> ${PD_CONF_PATH}
else
echo "FIBRECHANNEL already in pd.conf"
fi
PD_CONF_ENTRY_CHECK=`grep "FILE_KEEP_ALIVE_INTERVAL" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Interval (seconds) that specifies how often we should perform a keep-alive" >> ${PD_CONF_PATH}
echo "# on idle sockets. By default, the plugin will attempt to determine a suitable" >> ${PD_CONF_PATH}
echo "# value based on network resiliency settings." >> ${PD_CONF_PATH}
echo "# Allowed values: 60-7200 seconds. 0 = disabled" >> ${PD_CONF_PATH}
echo "# FILE_KEEP_ALIVE_INTERVAL=1440" >> ${PD_CONF_PATH}
else
echo "FILE_KEEP_ALIVE_INTERVAL already in pd.conf"
fi
PD_CONF_ENTRY_CHECK=`grep "FP_CACHE_LOCAL" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Load fingerprint cache if on local storage server (0=Off, 1=On)" >> ${PD_CONF_PATH}
echo "FP_CACHE_LOCAL = 1" >> ${PD_CONF_PATH}
else
echo "Updating pd.conf with value 1 for parameter FP_CACHE_LOCAL"
Set_Pd_Conf_Parameter FP_CACHE_LOCAL 1
fi
PD_CONF_ENTRY_CHECK=`grep "FP_CACHE_PERIOD_REBASING_THRESHOLD" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Period client side rebasing threshold (MB)." >> ${PD_CONF_PATH}
echo "# The period client side rebasing will run each period, and it works same with client side " >> ${PD_CONF_PATH}
echo "# rebasing except period client side rebasing using large threshold" >> ${PD_CONF_PATH}
echo "# Allowed values: 0-50 MB. 0 = disabled" >> ${PD_CONF_PATH}
echo "FP_CACHE_PERIOD_REBASING_THRESHOLD = 16" >> ${PD_CONF_PATH}
else
echo "Updating pd.conf with value 16 for parameter FP_CACHE_PERIOD_REBASING_THRESHOLD"
Set_Pd_Conf_Parameter FP_CACHE_PERIOD_REBASING_THRESHOLD 16
fi
PD_CONF_ENTRY_CHECK=`grep "FP_CACHE_REBASING_THRESHOLD" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Client side rebasing threshold (MB), when image data in container less than the threshold," >> ${PD_CONF_PATH}
echo "# all of the image data in this container will be resent to server to achieve good locality" >> ${PD_CONF_PATH}
echo "# Allowed values: 0-50 MB. 0 = disabled" >> ${PD_CONF_PATH}
echo "FP_CACHE_REBASING_THRESHOLD = 4" >> ${PD_CONF_PATH}
else
echo "Updating pd.conf with value 4 for parameter FP_CACHE_REBASING_THRESHOLD"
Set_Pd_Conf_Parameter FP_CACHE_REBASING_THRESHOLD 4
fi
PD_CONF_ENTRY_CHECK=`grep "MAX_LOG_MBSIZE" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Debug Log File Max Size (MB, 1-2048)" >> ${PD_CONF_PATH}
echo "MAX_LOG_MBSIZE = 100" >> ${PD_CONF_PATH}
else
echo "Updating pd.conf with value 100 for parameter MAX_LOG_MBSIZE"
Set_Pd_Conf_Parameter MAX_LOG_MBSIZE 100
fi
PD_CONF_ENTRY_CHECK=`grep "META_SEGKSIZE" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Segment size for meta data streams (KB)" >> ${PD_CONF_PATH}
echo "# Size must be a multiple of 32 and fall in the range 32-16384" >> ${PD_CONF_PATH}
echo "META_SEGKSIZE = 16384" >> ${PD_CONF_PATH}
else
echo "META_SEGKSIZE already in pd.conf"
fi
PD_CONF_ENTRY_CHECK=`grep "MTSTRM_BACKUP_CLIENTS" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# If set, limits backups using the multi-threaded agent to specified clients" >> ${PD_CONF_PATH}
echo "# Format is a comma-separated list of clients, treated as case insensitive" >> ${PD_CONF_PATH}
echo "# MTSTRM_BACKUP_CLIENTS = client1,client2,client3" >> ${PD_CONF_PATH}
else
echo "MTSTRM_BACKUP_CLIENTS already in pd.conf" | tee -a ${LOGFILE}
fi
PD_CONF_ENTRY_CHECK=`grep "MTSTRM_BACKUP_ENABLED" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Run backups through the multi-threaded streaming agent (1=On, 0=Off)" >> ${PD_CONF_PATH}
echo "MTSTRM_BACKUP_ENABLED = 0" >> ${PD_CONF_PATH}
else
echo "MTSTRM_BACKUP_ENABLED already in pd.conf" | tee -a ${LOGFILE}
fi
PD_CONF_ENTRY_CHECK=`grep "MTSTRM_BACKUP_POLICIES" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# If set, limits backups using the multi-threaded agent to specified policies" >> ${PD_CONF_PATH}
echo "# Format is a comma-separated list of policy names, treated as case sensitive" >> ${PD_CONF_PATH}
echo "# MTSTRM_BACKUP_POLICIES = policy1,policy2,policy3" >> ${PD_CONF_PATH}
else
echo "MTSTRM_BACKUP_POLICIES already in pd.conf" | tee -a ${LOGFILE}
fi
PD_CONF_ENTRY_CHECK=`grep "MTSTRM_IPC_TIMEOUT" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Number of seconds to wait for responses from the multi-threaded streaming process before timing out with an error" >> ${PD_CONF_PATH}
echo "# Values: 1-86400" >> ${PD_CONF_PATH}
echo "MTSTRM_IPC_TIMEOUT = 1200" >> ${PD_CONF_PATH}
else
echo "MTSTRM_IPC_TIMEOUT already in pd.conf"
fi
PD_CONF_ENTRY_CHECK=`grep "PREFETCH_SIZE" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Buffer size to use when prefetching data for restore operations" >> ${PD_CONF_PATH}
echo "PREFETCH_SIZE = 33554432" >> ${PD_CONF_PATH}
else
echo "PREFETCH_SIZE already in pd.conf"
fi
PD_CONF_ENTRY_CHECK=`grep "RESTORE_DECRYPT_LOCAL" ${PD_CONF_PATH}`
if [ "$?" -ne "0" ]; then
echo "#" >> ${PD_CONF_PATH}
echo "# Agent side decryption and decompression on restore (0=off, 1=on)" >> ${PD_CONF_PATH}
echo "RESTORE_DECRYPT_LOCAL = 1" >> ${PD_CONF_PATH}
else
echo "Updating pd.conf with value 1 for parameter RESTORE_DECRYPT_LOCAL"
Set_Pd_Conf_Parameter RESTORE_DECRYPT_LOCAL 1
fi
}
Set_Recommended_Mtstrm_Config_Values()
{
# Save IFS
OLDIFS=$IFS
IFS=","
MTSTRMCTL="${INSTALL_PATH}/pdag/bin/mtstrmctl"
if [ ! -f ${MTSTRMCTL} ]; then
echo "${MTSTRMCTL} not found, skipping generation of recommended settings for mtstrm.conf and pd.conf"
else
TMPFILE="${OSTPLUGINS_PATH}/mtstrmctl_output.csv"
MTSTRMCONF_PATH="${OSTPLUGINS_PATH}/mtstrm.conf"
echo "Running the mtstrmctl utility to generate recommended settings for ${MTSTRMCONF_PATH}"
${MTSTRMCTL} --get-recommended-settings ${TMPFILE}
if [ "$?" -eq "0" ]; then
echo "Parsing ${TMPFILE}"
if [ ! -f ${TMPFILE} ]; then
echo "${TMPFILE} not found, default values will be used instead"
else
echo "$TMPFILE found, reading.."
while read filename section param value
do
if [ "$filename" = "mtstrm.conf" ]; then
echo "Updating $filename with value $value for parameter $param in section $section"
Set_Cfg_Parameter ${MTSTRMCONF_PATH} "" ${section} ${param} ${value} 1
elif [ "$filename" = "pd.conf" ]; then
echo "Updating $filename with value $value for parameter $param"
Set_Pd_Conf_Parameter $param $value
else
echo "Invalid filename $filename. Can only update mtstrm.conf and pd.conf"
fi
done < $TMPFILE
# Remove the tmp file
rm $TMPFILE > /dev/null 2>&1
fi
else
echo "mtstrmctl failed to generate recommended settings for ${MTSTRMCONF_PATH}, default values will be used instead"
fi
fi
# Revert to the original state
IFS=$OLDIFS
}
###############################################################################
# Start of upgrade code!
###############################################################################
echo "Checking to see if the PDDE configuration needs upgrading"
if [ ! -x "${PDCFG}" ] ; then
echo "Unable to use ${PDCFG}, which is required by this script."
echo "Is the PDDE agent package installed?"
exit 1
fi
# Server components
if [ "${INSTALL_TYPE}" = "all" -o "${INSTALL_TYPE}" = "server" -a -f /etc/pdregistry.cfg ] ; then
AGENT_CFG_PATH=`${PDCFG} --read /etc/pdregistry.cfg --section="Symantec/PureDisk/Agent" --option=configfilepath 2> /dev/null`
SPA_CFG_PATH=`${PDCFG} --read /etc/pdregistry.cfg --section="Symantec/PureDisk/StoragePoolAuthority" --option=configfilepath 2> /dev/null`
CR_CFG_PATH=`${PDCFG} --read /etc/pdregistry.cfg --section="Symantec/PureDisk/ContentRouter" --option=configfilepath 2> /dev/null`
AGENT_CFG_TEMPLATE_PATH="$INSTALL_PATH/pdcr/etc/agent.cfg"
CR_CFG_TEMPLATE_PATH="$INSTALL_PATH/pdcr/etc/contentrouter.cfg"
DATA_PATH=`${PDCFG} --read="${CR_CFG_PATH}" --section=StorageDaemon --option=Storage`
DATABASES_PATH=`${PDCFG} --read="${SPA_CFG_PATH}" --section=StorageDatabase --option=Path 2> /dev/null`
HISTORY_PATH="`${PDCFG} --read="${CR_CFG_PATH}" --section=StorageDaemon --option=HistoryPath`"
LOG_PATH=`${PDCFG} --read="${CR_CFG_PATH}" --section=Logging --option=LogPath`
STORAGE_PATH=`${PDCFG} --read="${SPA_CFG_PATH}" --section=Paths --option=Storage`
# contentrouter.cfg
if [ "X${CR_CFG_PATH}" != "X" ] ; then
if [ -f "${CR_CFG_PATH}" ] ; then
echo "Found content router config file. Checking for upgrades..."
cp "${CR_CFG_PATH}" "${CR_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
Check_Generate_Identity
Deprecate_Parameter "${CR_CFG_PATH}" Cache CacheLoadThreadNum
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Cache CachePartitionNum "64" 0
Deprecate_Parameter "${CR_CFG_PATH}" ContentRouter BatchCommitInterval
Deprecate_Parameter "${CR_CFG_PATH}" ContentRouter BatchCommitMinTasks
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ContentRouter FPDCIDMemCacheSize "500" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ContentRouter MaxDoSize "1024MiB" 1
Deprecate_Parameter "${CR_CFG_PATH}" ContentRouter RecoverCRDB
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ContentRouter WorkerThreads "128" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CheckStoreBusyInterval "20" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CompactBatchNum "400" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CompactFreeSpaceThreshold "10%" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CompactLBound "16Mib" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CompactSizeLBound "32Mib" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore CompactThreshold "80%" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore DCHeaderHashSize "500000" 0
Deprecate_Parameter "${CR_CFG_PATH}" CRDataStore DeleteSpaceThreshold
Deprecate_Parameter "${CR_CFG_PATH}" CRDataStore DelUpdateThreshold
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore EnableCompactCandidateCheck "true" 0
Deprecate_Parameter "${CR_CFG_PATH}" CRDataStore EnableContainerTruncate
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore LoadAllContainers "true" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore LoadBalanceAlgorithm "1" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore LoadBalanceInterval "86400" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore MaxBufSize "32Mib" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore MaxFileSize "64Mib" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore MaxNumCaches "1024" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore MaxNumRecvBufs "8" 1
Deprecate_Parameter "${CR_CFG_PATH}" CRDataStore PercentFromDSToFS
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore PersistSourceMapInterval "3600" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore PrefetchThreadNum "8" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore ReadBufferSize "4194304" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore RebaseMaxPercentage "5" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore RebaseMaxTime "60" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore RebaseMinContainers "20" 1
Deprecate_Parameter "${CR_CFG_PATH}" CRDataStore RebaseQuota
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore RebaseScatterThreshold "1MiB" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore RebaseLocalityThreshold "120" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore SampledCheckCRC "false" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore UseDirectIO "true" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore WriteBufferSize "2097152" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH CRDataStore WriteThreadNum "2" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH DataCheck CRCCheckBatchNum "20" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH DataCheck CRCCheckSleepSeconds "20" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH DataCheck EnableCRCCheck "true" 0
Deprecate_Parameter "${CR_CFG_PATH}" DataCheck EnableDataCheckWarningAlert
Deprecate_Parameter "${CR_CFG_PATH}" DataCheck EnableDCHeaderCheck
Deprecate_Parameter "${CR_CFG_PATH}" DataCheck GarbageCheckRemainDCCount
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH DataCheck ShutdownCRWhenError "false" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Logging HistoryAge "180" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Logging Retention "90" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ReferenceDatabase LockPoolSize "102400" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ReferenceDatabase MaxDCRefCount "2000" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Spooler LowSpaceThreshold "4%" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Spooler NumSpoolerContext "64" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Spooler Timeout "60" 1
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Spooler VeryLowSpaceThreshold "3%" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH Spooler WarningSpaceThreshold "5%" 0
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH StorageDaemon CRQPBatchRefOpCount "40000000" 0
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon DelLogMaxNum
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon DelLogMaxSize
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon DelLogPath
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon MaxReservedSize
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon ObjectsPartitions
Deprecate_Parameter "${CR_CFG_PATH}" StorageDaemon SortThreads
Deprecate_Parameter "${CR_CFG_PATH}" StorageLeakCheck CheckExpirationDays
Deprecate_Parameter "${CR_CFG_PATH}" StorageLeakCheck EnableStorageLeakCheck
Deprecate_Parameter "${CR_CFG_PATH}" StorageLeakCheck StorageLeakCheckInterval
# ServerOptions: Add "verify_so_references" if it's not there
SERVER_OPTIONS=`${PDCFG} --read="${CR_CFG_PATH}" --section="ContentRouter" --option="ServerOptions" 2> /dev/null`
echo $SERVER_OPTIONS | grep verify_so_references > /dev/null 2>&1
if [ $? -ne 0 ] ; then
Set_Cfg_Parameter "${CR_CFG_PATH}" $CR_CFG_TEMPLATE_PATH ContentRouter ServerOptions "verify_so_references,$SERVER_OPTIONS" 1
fi
cmp -s "${CR_CFG_PATH}" "${CR_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
rm "${CR_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
fi
chmod o-w "${CR_CFG_PATH}"
else
echo "WARN: Missing content router config file! Path found from pdregistry.cfg: ${CR_CFG_PATH}"
fi
fi
# spa.cfg
if [ "X${SPA_CFG_PATH}" != "X" ] ; then
if [ -f "${SPA_CFG_PATH}" ] ; then
echo "Found SPA config file. Checking for upgrades..."
cp "${SPA_CFG_PATH}" "${SPA_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" DataCheck DataCheckDays "14" 1
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" DataCheck DataCheckStartTime "20:00" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" DataCheck EnableDataCheck "true" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" DataCheck EnableDataCheckAlert "true" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" DataCheck EnableRecentBackupCheck "true" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Events AgeLimit "0" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Events CountLimit "50000" 1
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Events TlogFileWarningAge "14" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Logging HistoryAge "30" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Logging HistoryPath "${HISTORY_PATH}" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" Logging Retention "90" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" StorageDatabase CatalogBackupVersions "5" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" StorageDatabase CatalogShadowPath "${DATABASES_PATH}/catalogshadow" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" StorageDatabase CatalogShadowPoolSize "64" 0
Set_Cfg_Parameter "${SPA_CFG_PATH}" "" StorageDatabase EnableCatalogAutoRecover "true" 0
cmp -s "${SPA_CFG_PATH}" "${SPA_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
rm "${SPA_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
fi
chmod o-w "${SPA_CFG_PATH}"
else
echo "WARN: Missing SPA config file! Path found from pdregistry.cfg: ${SPA_CFG_PATH}"
fi
fi
# agent.cfg
if [ "X${AGENT_CFG_PATH}" != "X" ] ; then
if [ -f "${AGENT_CFG_PATH}" ] ; then
echo "Found agent config file. Checking for upgrades..."
cp "${AGENT_CFG_PATH}" "${AGENT_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
Set_Cfg_Parameter "${AGENT_CFG_PATH}" ${AGENT_CFG_TEMPLATE_PATH} contentrouter SharedMemoryBufferSize "262144" 0
Set_Cfg_Parameter "${AGENT_CFG_PATH}" ${AGENT_CFG_TEMPLATE_PATH} contentrouter SharedMemoryEnabled "1" 0
Set_Cfg_Parameter "${AGENT_CFG_PATH}" ${AGENT_CFG_TEMPLATE_PATH} contentrouter SharedMemoryTimeout "300" 1
Set_Cfg_Parameter "${AGENT_CFG_PATH}" ${AGENT_CFG_TEMPLATE_PATH} contentrouter SharedMemoryTimeoutRetries "300" 0
Set_Cfg_Parameter "${AGENT_CFG_PATH}" ${AGENT_CFG_TEMPLATE_PATH} replication FibreChannel "0" 0
cmp -s "${AGENT_CFG_PATH}" "${AGENT_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
rm "${AGENT_CFG_PATH}.${BACKUP_DATE}" > /dev/null 2>&1
fi
chmod o-w "${AGENT_CFG_PATH}"
else
echo "WARN: Missing agent config file! Path found from pdregistry.cfg: ${AGENT_CFG_PATH}"
fi
fi
# Check if storage conversion needs to be run. Just log it here.
# The DPA installer should be the one to actually start the conversion utility.
if [ -x "${STCONV}" ] ; then
${STCONV} --comparestorageformat >/dev/null 2>&1
if [ $? -eq 0 ] ; then
echo "PDDE storage requires conversion!"
else
echo "PDDE storage does not require conversion."
fi
fi
# Update running version file with the current version
if [ ! -z "$STORAGE_PATH" ] ; then
echo "U" `cat ${INSTALL_PATH}/pdag/version.txt` >> "$STORAGE_PATH/etc/runningversion.log"
chmod o-w "$STORAGE_PATH/etc/runningversion.log"
fi
fi
# Agent components
if [ "${INSTALL_TYPE}" = "all" -o "${INSTALL_TYPE}" = "agent" ] ; then
# pd.conf
if [ -f "${OSTPLUGINS_PATH}/pd.conf" ] ; then
echo "Found pd.conf. Checking for upgrades..."
cp "${OSTPLUGINS_PATH}/pd.conf" "${OSTPLUGINS_PATH}/pd.conf.${BACKUP_DATE}" > /dev/null 2>&1
Upgrade_Pd_Conf "${OSTPLUGINS_PATH}/pd.conf"
cmp -s "${OSTPLUGINS_PATH}/pd.conf" "${OSTPLUGINS_PATH}/pd.conf.${BACKUP_DATE}" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
rm "${OSTPLUGINS_PATH}/pd.conf.${BACKUP_DATE}" > /dev/null 2>&1
fi
chmod o-w "${OSTPLUGINS_PATH}/pd.conf"
fi
# mtstrm.conf
if [ -f "${OSTPLUGINS_PATH}/mtstrm.conf" ] ; then
echo "Found mtstrm.conf. Checking for upgrades..."
# mtstrm.conf [Logging]LogPath is set to CHANGEME in the template.
# Set it to the right default path for this platform.
MTSTRM_LOG_PATH="`${PDCFG} --read=${OSTPLUGINS_PATH}/mtstrm.conf --section=Logging --option=LogPath`" > /dev/null
if [ "${MTSTRM_LOG_PATH}" = "MTSTRM_DEFAULT_LOG_PATH" ] ; then
Set_Cfg_Parameter "${OSTPLUGINS_PATH}/mtstrm.conf" "" Logging LogPath "/var/log/puredisk" 1
Set_Recommended_Mtstrm_Config_Values
fi
Set_Cfg_Parameter "${OSTPLUGINS_PATH}/mtstrm.conf" "" Process MaxConcurrentSessions "4" 0
Set_Cfg_Parameter "${OSTPLUGINS_PATH}/mtstrm.conf" "" Threads BackupFpThreads "4" 0
chmod o-w "${OSTPLUGINS_PATH}/mtstrm.conf"
fi
fi
exit 0