sprint fd lte script to implement max enb call count 4500 change

Upload: neelabh-krishna

Post on 14-Jan-2016

71 views

Category:

Documents


0 download

DESCRIPTION

lte

TRANSCRIPT

Script to implement

Max eNB Call Count to 4500

Method of Procedure

Network SystemsSamsung Telecommunications America

Document Version 1.0

09/18/2014

Draft

Document Category: 817Document Number:

Specialty Method of Procedure ii Samsung Proprietary and Confidential 2014 SAMSUNG Electronics Co. Ltd.All Rights Reserved. No part of this document may be photocopied, reproduced, stored in a retrieval system, or transmitted, in any form or by any means whether, electronic, mechanical, or otherwise without the prior written permission of SAMSUNG Electronics Co., Ltd.No warranty of accuracy is given concerning the contents of the information contained in this publication. To the extent permitted by law no liability (including liability to any person by reason of negligence) will be accepted by SAMSUNG Electronics Co., Ltd., its subsidiaries or employees for any direct or indirect loss or damage caused by omissions from or inaccuracies in this document. SAMSUNG Electronics Co., Ltd. reserves the right to change details in this publication without notice.DRAFT

This manual should be read and used as a guideline for properly installing and/or operating the product.This manual may be changed for system improvement, standardization and other technical reasons without prior notice.Updated manuals are available at:https://systems.samsungwireless.com/

For questions on the manuals or their content, contactNetSys Tech [email protected]

ContentsPreface6Relevance6Conventions in this Document6Revision History7Organization of This Document7Related Documentation7Chapter 1Overview8References8Chapter 2Implementation9AppendixAcronyms11

List of FiguresNo table of figures entries found.List of TablesNo table of figures entries found.

Contents

Adv Props > Prod Name Adv Props > Doc Type Adv Props > Subtitle v1.0 Adv Props > DraftiiiSamsung Proprietary and Confidential8Issued: Error! Unknown document property name.

Adv Props > Prod Name Adv Props > Doc Type Adv Props > Subtitle v1.0 Adv Props > DraftvSamsung Proprietary and ConfidentialPrefaceThis document provides MOP for using the script to implement the Max ENB Call Count to 4500 using PLD.RelevanceThis manual applies to the following products/software.NameType

SLR 2.5.4Software

Conventions in this DocumentSamsung Networks product documentation uses the following conventions. SymbolsSymbolDescription

Indicates a task.

Indicates a shortcut or an alternative method.

Provides additional information.

Provides information or instructions that you should follow to avoid service failure or damage to equipment.

Provides information or instructions that you should follow to avoid personal injury or fatality.

Provides antistatic precautions that you should observe.

Menu Commandsmenu | commandThis indicates that you must select a command on a menu, where menu is the name of the menu, and command is the name of the command on that menu. File Names and PathsThese are indicated by a bold typeface. For example:Copy filename.ext into the /home/folder1/folder2/bin/ folder.User Input and Console Screen Output TextInput and output text is presented in the Courier font. For example,context < designated epc-context-name>CLI commands are presented in bold small caps. For example,Type the rtrv-ne-sts command in the input field.Revision HistoryThe following table lists all versions of this document.VersionDateDescriptionAuthor

1.09/18/2014Initial VersionArun Ramachandran

1.110/9/20142nd Version with modification in script Arun Ramachandran

**Draft Tracker**Update the following sample text in the table for internal tracking of a document during the review cycle. Remove this entire section before final publication.

Version Create/Modify TestApproveReviewRemark

DateAuthorDateTesterDateApproverDateReviewer

1.09/18/2014Arun Ramachandran09/29/2014Zeki Keles

1.110/9/2014Arun Ramachandran

Organization of This DocumentSectionTitleDescription

Chapter 1Overview

Chapter 2Implementation

Appendix ATitle

Appendix BTitle

Related DocumentationKindly refer to "Sprint_FD_LTE_Max_ENB_Call_Count_4500_Change" MOP for details on which parameter is being changed.

OverviewThis Method of Procedure (MOP) provides the detailed instructions for executing the script that is used for setting Max ENB Call Count to 4500 using PLD.References

Reference #Title

Chapter 1 Overview

Specialty Method of Procedure 6 Samsung Proprietary and Confidential11Issued: Error! Unknown document property name.

Specialty Method of Procedure 7 Samsung Proprietary and ConfidentialImplementationPerform following changes on the LSM-RStepAction and Expected Result

1. Action

1. Transfer the attached script to either the user's home directory (/home/) within the user's home directory in the LSM-R.

: Check

2. Extract the contents of the file by using the following command - "tar -xvf ChgEnbCacInfoTuple.tar.gz". This will result in a directory - ChgEnbCacInfoTuple/ - inside which you will have the files related to the script.

: Check

3. Change to the ChgEnbCacInfoTuple/ directory using the "cd ChgEnbCacInfoTuple/" command and open REMOTE_EXEC_CONFIG file inside the "ChgEnbCacInfoTuple/" directory and make sure that the following parameters are set appropriately:

SCRIPT_ARGS="/pkg/2.5.0/ENB/r-01/DB"HOME=/home/: Check

4. Open ENB_IP_LIST.txt and add the list of IPs for eNBs where the Max eNB Call Count needs to be changed.: Check

5. Execute the following in the ChgEnbCacInfoTuple directory chmod +x REMOTE_EXEC*: Check

6. Execute the script as follows in the ChgEnbCacInfoTuple directory - ./REMOTE_EXEC_ALL.sh ENB_IP_LIST.txt: Check

Expected ResultThe script executes successfully without any errors and displays a summary showing the MaxEnbCallCount parameter in the PLD to be changed to 4500 from 750.

Example########################################################################## REMOTE_EXEC_ALL.sh: FINISH (0): Thu Sep 18 14:06:02 EDT 2014#########################################################################

######################################################################################################################### SUMMARY 1

######################################################################################################################### START: ./REMOTE_EXEC_ALL.sh ENB_IP_LIST.txt# START_TIME: Thu Sep 18 14:00:43 EDT 2014#-----------------------------------------------------------------------------------------------------------------------111.23.94.34:NOK (telnet connection failure)

# REMOTE_EXEC_ALL.sh: FINISH (0): Thu Sep 18 14:00:58 EDT 2014######################################################################################################################### START: ./REMOTE_EXEC_ALL.sh ENB_IP_LIST.txt# START_TIME: Thu Sep 18 14:05:49 EDT 2014#-----------------------------------------------------------------------------------------------------------------------111.23.94.34:OK

# REMOTE_EXEC_ALL.sh: FINISH (0): Thu Sep 18 14:06:02 EDT 2014########################################################################################################################

######################################################################################################################### SUMMARY 2#-----------------------------------------------------------------------------------------------------------------------# ./REMOTE_EXEC.sh 111.23.94.34Current MaxEnbCallCount in PLDEnbCacInfoFunc is 750# Final Current MaxEnbCallCount is 4500########################################################################################################################

Chapter 2 Implementation

Acronyms

LSM-RLTE System Manager-RANPLDParameter List DatabaseIPInternet ProtocoleNBEvolved Node B/E-UTRAN Node BCACCall Admission ControlLTELong Term Evolution

Review Check ListNoCheck Listcheck(Yes/No)Comment

1Revision History is updatedY

2PrefaceY

2-1Document Conventions, RelatedY

2-2Produce Safety InformationNRemoved since not applicable for Software MOP

2-3Cautions & RestrictionsNN/A for this MOP

2-4Test condition is describedNThe MOP to be verified in the lab

3PrerequisitesN

3-1PKG informationNN/A for this MOP

3-2Time Table NN/A for this MOP

3-3The whole flow includedNN/A for this MOP

4Installation ProcedureNN/A for this MOP

4-1Mulit-task on GUINN/A for this MOP

4-2Check list for the jobsY

4-3Solution for exception cases N

4-4Restriction & CautionNN/A for this MOP

4-5Check if there is warning or remarksYProvided backout procedure

Chapter 2 Implementation

8Issued: Error! Unknown document property name.

Adv Properties > Prod Name Release Notes 1.0 Adv Properties > Draft13 Samsung Proprietary and Confidential

817 Sprint_FD_LTE _Script_to_implement_Max_ENB_Call_Count_4500_Change

Specialty Method of Procedure

Document Version 1.0

2014 Samsung Electronics Co., Ltd.

All rights reserved.

ChgEnbCacInfoTuple.tar

ChgEnbCacInfoTuple/REMOTE_EXEC.sh

#! /usr/bin/expect -f

set config_file [open ./REMOTE_EXEC_CONFIG ]set configs [ read -nonewline $config_file ]close $config_file

foreach config [ split $configs "\n" ] { set item [ lindex [ split $config "=" ] 0 ] set value [ lindex [ split $config "=" ] 1 ]

#puts "item: $item"

switch $item { SCRIPT { set SCRIPT $value} SCRIPT_ARGS { set SCRIPT_ARGS $value} SCRIPT_TIMEOUT { set SCRIPT_TIMEOUT $value} HOME { set HOME $value} LOGNAME { set LOGNAME $value} PASS { set PASS $value} PROMPT { set PROMPT $value} ROOT_LOGNAME { set ROOT_LOGNAME $value} ROOT_PASS { set ROOT_PASS $value} ROOT_PROMPT { set ROOT_PROMPT $value} default {} }}

set resultfile [open ./remote_exec_result.txt a]

set TARGET_IP [lindex $argv 0]

#spawn /bin/rm -f $HOME/.ssh/known_hostsspawn /usr/bin/sftp $LOGNAME@$TARGET_IP

sleep 1

#expect -timeout 3 { # -re "Are you sure you want to continue connecting (yes/no)?" { send "yes\r";exp_continue }# -re "Couldn't read packet" { puts $resultfile "$TARGET_IP:NOK (Couldn't read packet)" ; exit }# timeout { puts $resultfile "$TARGET_IP:NOK (ftp connection failure to target)" ; exit }#}

expect -timeout 3 "Are you sure you want to continue connecting (yes/no)?" {send "yes\r";exp_continue}

sleep 1

expect { -re "Password:|password:" { send "$PASS\r" } timeout { puts $resultfile "$TARGET_IP:NOK (ftp disconnection 1)" ; exit }}

sleep 1

expect { -re "password:" { puts $resultfile "$TARGET_IP:NOK (invalid password)" ; exit } -re "sftp>" { send "mkdir script_directory\r" } timeout { puts $resultfile "$TARGET_IP:NOK (ftp disconnection 2)" ; exit }}

expect { -re "sftp>" { send "cd script_directory\r" } timeout { puts $resultfile "$TARGET_IP:NOK (ftp disconnection 3)" ; exit }}

expect { -re "sftp>" { send "put $SCRIPT \r" } timeout { puts $resultfile "$TARGET_IP:NOK (ftp disconnection 4)" ; exit }}

expect -re "sftp>" send "exit\r"

#spawn /bin/rm -f $HOME/.ssh/known_hosts

spawn /usr/bin/ssh $LOGNAME@$TARGET_IP

sleep 1

#expect -timeout 3 {# -re "yes/no" { send "yes\r"; exp_continue }# timeout { puts $resultfile "$TARGET_IP:NOK (telnet connection failure)" ; exit }#}

expect -timeout 3 "Are you sure you want to continue connecting (yes/no)?" {send "yes\r";exp_continue}

sleep 1

expect { -re "Password:|password:" { send "$PASS\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 1)" ; exit }}

sleep 1

expect { -re "password:" { puts $resultfile "$TARGET_IP:NOK (invalid password)" ; exit } -re "$PROMPT" { send "su - $ROOT_LOGNAME\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 2)" ; exit }}

sleep 1

expect { -re "Password:|password:" { send "$ROOT_PASS\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 3)" ; exit }}

expect { -re "$ROOT_PROMPT" { send "\r\r" } -re "incorrect password" { puts $resultfile "$TARGET_IP:NOK (invalid root password)" ; exit }}

expect { -re "$ROOT_PROMPT" { send "cd ~$LOGNAME/script_directory\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 4)" ; exit }}

expect { -re "$ROOT_PROMPT" { send "chmod +x $SCRIPT\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 5)" ; exit }}

expect { -re "$ROOT_PROMPT" { send "$SCRIPT $SCRIPT_ARGS\r" } timeout { puts $resultfile "$TARGET_IP:NOK (telnet disconnection 6)" ; exit }}

set timeout $SCRIPT_TIMEOUT

expect {# NOTE: Please DO NOT remove below line.# The main script will print 'SCRIPT FINISHED' when it finishes' -re "# SCRIPT FINISHED" { send "exit\r" } timeout { puts $resultfile "$TARGET_IP:NOK (script execution timeout)" ; exit }}

expect -re "$ROOT_PROMPT"send "exit\r"

puts $resultfile "$TARGET_IP:OK"close $resultfile

sleep 1

ChgEnbCacInfoTuple/REMOTE_EXEC_CONFIG

######################################################################################################################### SCRIPT DESCRIPTION#----------------------------------------------------------------------------------------------------------------------SCRIPT="./ChgEnbCacInfoTuple.sh"SCRIPT_ARGS="/pkg/2.5.0/ENB/r-01/DB"SCRIPT_TIMEOUT=120

######################################################################################################################### SETUP#----------------------------------------------------------------------------------------------------------------------HOME=/home/ec451128

LOGNAME=lteuserPASS=samsungltePROMPT=lteuser

ROOT_LOGNAME=rootROOT_PASS=123qweROOT_PROMPT=root

########################################################################################################################

ChgEnbCacInfoTuple/REMOTE_EXEC_REPORT.sh

#! /bin/bash

if [ -r remote_exec_result.txt ]; then echo "" echo "########################################################################################################################" echo "# SUMMARY 1" echo "" cat remote_exec_result.txt echo "########################################################################################################################" echo "" echo "" echo "########################################################################################################################" echo "# SUMMARY 2" LAST_LOG=`ls -t -1 log_REMOTE_EXEC_ALL* | head -1` if [ "$LAST_LOG" != "" ]; then grep "# \[REMOTE_EXEC_LOG\] " $LAST_LOG | sed 's/# \[REMOTE_EXEC_LOG\] //g' fi echo "########################################################################################################################"fi

ChgEnbCacInfoTuple/ChgEnbCacInfoTuple.sh

#! /bin/bash

####################################################################################PLDX_PROG_SIM_LIST="pld.i686.300 pld.i686 pld.sim"PLDX_PROG_SIM_PATH=". $HOME/bin"PKG_DB_DIR_OLD_DEFAULT="./n/DB"PKG_DB_DIR_NEW_DEFAULT="./n1/DB"

####################################################################################PLD_SET_VERIFY=1

START_TIME=`date +%T`DATE=`date +%m%d-%H%M-%S --date=$START_TIME`PID=$$

########################################################################################################################################################################

function fullpath(){ for FILE in $@; do if [ -d $FILE ]; then RESULT=`(\cd $FILE && pwd)` echo "$RESULT" else if [ "${FILE:0:1}" == "/" ]; then echo ${FILE} continue fi local RESULT=`echo $PWD/$FILE | sed 's#\s*\/\.\/#/#g'` echo "$RESULT" fi done }

function INIT_REAL_TARGET(){ REAL_TARGET=0

PRINTENV=printenv PATH_LIST=`echo $PATH | sed 's/:/ /g'` for PATH_ONE in $PATH_LIST; do if [ -x "$PATH_ONE/printenv" ]; then if [ "`$PATH_ONE/printenv -a 2> /dev/null`" != "" ]; then PRINTENV=$PATH_ONE/printenv REAL_TARGET=1 break fi fi done}

function INIT_PKG_PATH_FROM_FILE(){ PKG_VER_OLD=`cat /etc/RegInfo 2> /dev/null |grep PKG_VER|cut -d"=" -f2-` PKG_VER_NEW=`cat /etc/RegInfo+ 2> /dev/null |grep PKG_VER|cut -d"=" -f2-` REL_VER_OLD=`cat /etc/RegInfo 2> /dev/null |grep REL_VER|cut -d"=" -f2-` REL_VER_NEW=`cat /etc/RegInfo+ 2> /dev/null |grep REL_VER|cut -d"=" -f2-` NE_TYPE=`cat /etc/SysInfo 2> /dev/null |grep NE_TYPE|cut -d"=" -f2-` PKG_DIR_OLD=/pkg/$PKG_VER_OLD/$NE_TYPE/$REL_VER_OLD PKG_DIR_NEW=/pkg/$PKG_VER_NEW/$NE_TYPE/$REL_VER_NEW PKG_DB_DIR_OLD=$PKG_DIR_OLD/DB PKG_DB_DIR_NEW=$PKG_DIR_NEW/DB log_out "# [$FUNCNAME] PKG_DB_DIR_OLD: $PKG_DB_DIR_OLD" log_out "# [$FUNCNAME] PKG_DB_DIR_NEW: $PKG_DB_DIR_NEW"}

function INIT_PKG_PATH_FROM_DEFAULT(){ if [ "$PKG_DB_DIR_OLD_DEFAULT" != "" ] && [ "$PKG_DB_DIR_NEW_DEFAULT" != "" ]; then PKG_DB_DIR_OLD=`cd $SCRIPT_DIR && fullpath $PKG_DB_DIR_OLD_DEFAULT` PKG_DB_DIR_NEW=`cd $SCRIPT_DIR && fullpath $PKG_DB_DIR_NEW_DEFAULT` log_out "# [$FUNCNAME] PKG_DB_DIR_OLD: $PKG_DB_DIR_OLD" log_out "# [$FUNCNAME] PKG_DB_DIR_NEW: $PKG_DB_DIR_NEW" fi}

function INIT_PKG_PATH_FROM_ARGVS(){ if [ $# -eq 1 ]; then PKG_DB_DIR_OLD=`fullpath $1` PKG_DB_DIR_NEW=`fullpath $1` elif [ $# -eq 2 ]; then PKG_DB_DIR_OLD=`fullpath $1` PKG_DB_DIR_NEW=`fullpath $2` fi

PKG_DIR_OLD=`fullpath $PKG_DB_DIR_OLD/..` PKG_DIR_NEW=`fullpath $PKG_DB_DIR_NEW/..`

log_out "# [$FUNCNAME] PKG_DIR_OLD: [$PKG_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DIR_NEW: [$PKG_DIR_NEW]" log_out "# [$FUNCNAME] PKG_DB_DIR_OLD: [$PKG_DB_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DB_DIR_NEW: [$PKG_DB_DIR_NEW]"}

function INIT_DATA_MIGRATION(){ if [ "$PKG_DB_DIR_OLD" != "$PKG_DB_DIR_NEW" ]; then DATA_MIGRATION=1 else DATA_MIGRATION=0 fi

if [ "$DATA_MIGRATION" == "1" ]; then PLDX_PROG_O= PLDX_PROG_N= PLD_NOTI_FLAG=0 EXEC_OUINFO_MIGRATION=1 else if [ "$REAL_TARGET" == "1" ]; then PLD_NOTI_FLAG=1 else PLD_NOTI_FLAG=0 fi EXEC_OUINFO_MIGRATION=0 fi}

function INIT_PKG_PATH(){ if [ $# -eq 0 ]; then INIT_PKG_PATH_FROM_FILE if [ ! -d "$PKG_DB_DIR_OLD" ] || [ ! -d "$PKG_DB_DIR_NEW" ]; then INIT_PKG_PATH_FROM_DEFAULT fi else INIT_PKG_PATH_FROM_ARGVS $@ fi

if [ ! -d "$PKG_DB_DIR_OLD" ]; then log_out "# [$FUNCNAME] PKG_DB_DIR_OLD is invalid: [$PKG_DB_DIR_OLD]" FINISH_SCRIPT 1 fi if [ ! -d "$PKG_DB_DIR_NEW" ]; then log_out "# [$FUNCNAME] PKG_DB_DIR_NEW is invalid: [$PKG_DB_DIR_NEW]" FINISH_SCRIPT 1 fi

log_out "# [$FUNCNAME] PKG_DIR_OLD: [$PKG_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DIR_NEW: [$PKG_DIR_NEW]" log_out "# [$FUNCNAME] PKG_DB_DIR_OLD: [$PKG_DB_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DB_DIR_NEW: [$PKG_DB_DIR_NEW]"}

function INIT_ENV (){ export SCRIPT_DIR=$(dirname `fullpath $BASH_SOURCE`) export ALL_TUPLES="\*"

INIT_REAL_TARGET INIT_PKG_PATH $@ INIT_DATA_MIGRATION INIT_LOG START_SCRIPT $@

log_out "" log_out "############################################################################################################################################" log_out "# [$FUNCNAME] PKG_DIR_OLD: [$PKG_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DIR_NEW: [$PKG_DIR_NEW]" log_out "# [$FUNCNAME] PKG_DB_DIR_OLD: [$PKG_DB_DIR_OLD]" log_out "# [$FUNCNAME] PKG_DB_DIR_NEW: [$PKG_DB_DIR_NEW]" log_out "############################################################################################################################################" log_out "" log_out "############################################################################################################################################" log_out "# SCRIPT_DIR: $SCRIPT_DIR" log_out "# REAL_TARGET: $REAL_TARGET" log_out "# DATA_MIGRATION: $DATA_MIGRATION" log_out "# PLD_NOTI_FLAG: $PLD_NOTI_FLAG" log_out "# EXEC_OUINFO_MIGRATION: $EXEC_OUINFO_MIGRATION " log_out "############################################################################################################################################"

}

function INIT_LOG (){ export -f log_out MNT_STORAGE=/mnt/storage

if [ "$DATA_MIGRATION" == "1" ]; then

if [ "$REAL_TARGET" == "1" ]; then if [ -d $MNT_STORAGE ]; then PKG_DB_SCRIPT_DIR=$MNT_STORAGE/`fullpath $PKG_DB_DIR_OLD` if [ -d $PKG_DB_SCRIPT_DIR ]; then log_out "# [$FUNCNAME] PKG_DB_SCRIPT_DIR is set to $PKG_DB_SCRIPT_DIR" else log_out "# [$FUNCNAME] No such directory (PKG_DB_SCRIPT_DIR: $PKG_DB_SCRIPT_DIR)" PKG_DB_SCRIPT_DIR=$PKG_DB_DIR_OLD log_out "# [$FUNCNAME] PKG_DB_SCRIPT_DIR is changed to $PKG_DB_SCRIPT_DIR" fi fi else PKG_DB_SCRIPT_DIR=$PKG_DB_DIR_OLD fi

local LOG_OUTPUT_TMP="$PKG_DB_SCRIPT_DIR/ou_script.log" else local LOG_OUTPUT_TMP="$SCRIPT_DIR/log-`basename $BASH_SOURCE .sh`-$DATE-PID$PID.log" fi

log_out "# [$FUNCNAME] Changing LOG_OUTPUT as $LOG_OUTPUT_TMP" echo "# [$FUNCNAME] Changing LOG_OUTPUT as $LOG_OUTPUT_TMP"

LOG_OUTPUT=$LOG_OUTPUT_TMP log_banner "LOG_OUTPUT: $LOG_OUTPUT"

rm -f $LOG_OUTPUT touch $LOG_OUTPUT

export LOG_OUTPUT}

function log_out (){ echo "$@" | sed 's/ \*/ "*"/' >> "$LOG_OUTPUT"}

function log_out_n (){ echo -n "$@" | sed 's/ \*/ "*"/' >> $LOG_OUTPUT}

function log_result(){ if [ $1 -eq 0 ]; then log_out " ... OK"; else log_out " ... FAIL"; fi}

function log_banner (){ log_out "" log_out "############################################################################################################################################" log_out "# $@ " log_out "############################################################################################################################################"}

function REMOTE_EXEC_LOG (){ export -f log_out

log_out "$@" | sed 's/ \*/ "*"/' >> "$LOG_OUTPUT" echo "# [REMOTE_EXEC_LOG] $@" | sed 's/ \*/ "*"/'}

function REMOTE_EXEC_PRINT (){ grep "# \[REMOTE_EXEC_LOG\]" $LOG_OUTPUT}

function tuple_id_list_modifier(){ log_out "" log_out "[EXEC] $FUNCNAME $@" local TUPLE_ID_LIST_MOD=`echo $@ | awk 'BEGIN {RS="!@!"} {gsub(/\n/," ",$0);print $0}'| sed 's/\s\+/,/g'| sed 's/^,//g'|sed 's/,$//g'`

echo "$TUPLE_ID_LIST_MOD"

log_out "[EXEC] $FUNCNAME($@): RESULT=[$TUPLE_ID_LIST_MOD]"}

function tuple_id_list_originator(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

local NEW_LIST=""

local LIST=`echo $@ | sed 's/,/ /g'` log_out "LIST: $LIST"

for ELEMENT in $LIST ; do local RANGE_FLAG=`echo "$ELEMENT" | grep "-"` log_out "ELEMENT: $ELEMENT, RANGE_FLAG=$RANGE_FLAG" if [ "$RANGE_FLAG" == "" ]; then local NEW_ELEMENT="$ELEMENT" else local NEW_ELEMENT="" local START=`echo $ELEMENT | cut -d"-" -f1` local END=`echo $ELEMENT | cut -d"-" -f2` log_out "START: $START, END: $END" >& 2 for ((i=$END; i >=$START;i--)) do if [ "$NEW_ELEMENT" == "" ]; then local NEW_ELEMENT="$i" else local NEW_ELEMENT="$NEW_ELEMENT $i" fi done

fi

log_out "NEW_ELEMENT: $NEW_ELEMENT" if [ "$NEW_LIST" == "" ]; then local NEW_LIST="$NEW_ELEMENT" else local NEW_LIST="$NEW_LIST $NEW_ELEMENT" fi done

echo "$NEW_LIST" log_out "[EXEC] $FUNCNAME($@): RESULT=[$NEW_LIST]"

return 0}

function tuple_id_list_mod_abbreviator(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

local LIST_MOD="$@" local LIST=`tuple_id_list_originator "$LIST_MOD" | tr ' ' '\012' | sort -nr | tr '\012' ' '` local RESULT=`tuple_id_list_abbreviator "$LIST"`

echo "$RESULT" log_out "[EXEC] $FUNCNAME($@): RESULT=[$RESULT]"}

function list_mod_add(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 2 ]; then log_out "Usage: $FUNCNAME " return 1 fi

local BASE=$1 local TO_BE_ADDED=$2 if [ "$BASE" == "" ]; then local RESULT="$TO_BE_ADDED" else local RESULT="$RESULT,$TO_BE_ADDED" fi echo "$RESULT" log_out "[EXEC] $FUNCNAME($@): RESULT=[$RESULT]"}

function tuple_id_list_abbreviator(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 1 ]; then log_out "Usage: $FUNCNAME " return 1 fi

local LIST="$1"

local EXPECTED="" local START="" local END="" local RESULT="" local CONT=0

#echo "$LIST" #echo "" for CUR in $LIST; do #echo "CUR: $CUR"

if [ "$END" == "" ]; then local END=$CUR local EXPECTED=`expr $CUR - 1` local CONT=0 #log_out "1. S: $END, E: $START, C: $CUR, EXPECTED: $EXPECTED" elif [ "$CUR" == "$EXPECTED" ]; then local CONT=1 local START=$CUR local EXPECTED=`expr $CUR - 1` #log_out "2. S: $END, E: $START, C: $CUR, EXPECTED: $EXPECTED" else if [ "$START" != "" ]; then local RESULT=`list_mod_add "$RESULT" "$START-$END"` else local RESULT=`list_mod_add "$RESULT" "$END"` fi #log_out "3. S: $END, E: $START, C: $CUR, EXPECTED: $EXPECTED" #echo "RESULT: $RESULT" local CONT=0 local END=$CUR local START="" local EXPECTED=`expr $CUR - 1` #log_out "5. S: $END, E: $START, C: $CUR, EXPECTED: $EXPECTED" fi #echo "" done if [ "$CONT" == "1" ]; then local RESULT=`list_mod_add "$RESULT" "$START-$END"` else local RESULT=`list_mod_add "$RESULT" "$END"` fi

echo "$RESULT" log_out "[EXEC] $FUNCNAME ($@): RESULT=[$RESULT]" > /dev/stderr}

function _get-reverse-order-tuple-id-list-mod-matching-relation-attribute(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 5 ]; then log_out "Usage: $FUNCNAME {old|new> " return 1 fi

local TUPLE_ID_LIST=""

local VERSION=$1 if [ "$VERSION" == "old" ] || [ "$VERSION" == "OLD" ]; then PLD_OUTPUT=$PLD_OUTPUT_OLD elif [ "$VERSION" == "new" ] || [ "$VERSION" == "new" ]; then PLD_OUTPUT=$PLD_OUTPUT_NEW else

log_out "Usage: $FUNCNAME {old|new> " return 1 fi local RELATION_ID=$2 local ATTRIBUTE=$3 local VALUE=$4 local TUPLE_ID_LIST="$5" log_out "VALUE:[$VALUE]"

local MATCHED_ORIG=`$PLD_OUTPUT $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE | awk 'BEGIN {FS="\t"} {if ( $0 ~ /\[ *-*[0-9]+\]/ && $2 ~ / '"$VALUE"'\>/ ) {print $0}}' | cut -d"[" -f2 | cut -d"]" -f1 | sort -nr` local RESULT=$? log_out_n "$FUNCNAME: $PLD_OUTPUT $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE" log_result $RESULT local MATCHED_MOD=`tuple_id_list_modifier $MATCHED_ORIG` echo "$MATCHED_MOD" log_out "[EXEC] $FUNCNAME($@): RESULT=[$MATCHED_MOD]" if [ "z$MATCHED_MOD" == "z" ]; then return 1 fi

return $RESULT}

function _get-reverse-order-tuple-id-list-mod-matching-relation-attribute-n(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -lt 4 ] || [ `expr $# % 2` != 0 ] ; then log_out "Usage: $FUNCNAME {old|new} ..." return 1 fi

declare -a INDEX_NAME_ARRAY declare -a INDEX_VALUE_ARRAY declare -a TUPLE_ID_LIST_TO_MATCH_MOD_ARRAY declare -a TUPLE_ID_LIST_ARRAY

local BACKUP_ARGS="$@"

local VERSION=$1 local RELATION_ID=$2

shift 2

local ARG_I=1 local TUPLE_ID_LIST_ARRAY[1]="*" while [ $# -ne 0 ]; do #log_out "\$#: $#" local INDEX_NAME_ARRAY[$ARG_I]=$1 local INDEX_VALUE_ARRAY[$ARG_I]=$2 shift 2 let "ARG_I += 1" local TUPLE_ID_LIST_ARRAY[$ARG_I]="" done

for ((ARG_J=1; ARG_J /dev/null local RESULT=$? log_out_n "$FUNCNAME: $PLD_INPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE=$VALUE" log_result $RESULT if [ "$PLD_SET_VERIFY" == "1" ]; then get-new-relation-attribute $RELATION_ID $ATTRIBUTE "$TUPLE_ID_LIST" > /dev/null 2>&1 fi

return $RESULT}

function get-old-relation-attribute-array(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 4 ]; then log_out "Usage: $FUNCNAME " log_out " : 0-based indexing, 0-2,5 or \*" log_out " : 0-based indexing, 0-2,4,8 or \*" return 1 fi

local RELATION_ID=$1 local ATTRIBUTE=$2 local ARRAY_ID_LIST="$3" local TUPLE_ID_LIST="$4" if [ "$TUPLE_ID_LIST" == "\"*\"" ] || [ "$TUPLE_ID_LIST" == "\*" ]; then local TUPLE_ID_LIST="*" fi if [ "$ARRAY_ID_LIST" == "\"*\"" ] || [ "$ARRAY_ID_LIST" == "\*" ] || [ "$ARRAY_ID_LIST" == "*" ]; then local VALUES=`$PLD_OUTPUT_OLD $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE | awk 'BEGIN {FS="\t"} {if ( $0 ~ /\[ *\-*[0-9]+\]/ ) {print $2}}' | sed 's/\[/ /g'| sed 's/\]/ /g'|sed 's/ \+/ /g' | sed 's/^ \+//g' | sed 's/ \+$//g'` else local ARRAY_ID_LIST_1_BASE=`change_list_mod_for_cut ARRAY_ID_LIST` local VALUES=`$PLD_OUTPUT_OLD $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE | awk 'BEGIN {FS="\t"} {if ( $0 ~ /\[ *\-*[0-9]+\]/ ) {print $2}}' | sed 's/\[/ /g'| sed 's/\]/ /g'|sed 's/ \+/ /g' | sed 's/^ \+//g' | sed 's/ \+$//g' | cut -d" " -f$ARRAY_ID_LIST_1_BASE` fi

local RESULT=$? log_out_n "$FUNCNAME: $PLD_OUTPUT_OLD $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE" log_result $RESULT

echo "$VALUES" log_out "[EXEC] $FUNCNAME($@): RESULT=[$VALUES]" if [ "$VALUES" == "" ]; then return 1 fi

return $RESULT}

function get-new-relation-attribute-array(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 4 ]; then log_out "Usage: $FUNCNAME " log_out " : 0-based indexing, 0-2,5 or \*" log_out " : 0-based indexing, 0-2,4,8 or \*" return 1 fi

local RELATION_ID=$1 local ATTRIBUTE=$2 local ARRAY_ID_LIST="$3" local TUPLE_ID_LIST="$4" if [ "$TUPLE_ID_LIST" == "\"*\"" ] || [ "$TUPLE_ID_LIST" == "\*" ]; then local TUPLE_ID_LIST="*" fi if [ "$ARRAY_ID_LIST" == "\"*\"" ] || [ "$ARRAY_ID_LIST" == "\*" ] || [ "$ARRAY_ID_LIST" == "*" ]; then local VALUES=`$PLD_OUTPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE | awk 'BEGIN {FS="\t"} {if ( $0 ~ /\[ *\-*[0-9]+\]/ ) {print $2}}' | sed 's/\[/ /g'| sed 's/\]/ /g'|sed 's/ \+/ /g' | sed 's/^ \+//g' | sed 's/ \+$//g'` else local ARRAY_ID_LIST_1_BASE=`change_list_mod_for_cut ARRAY_ID_LIST` local VALUES=`$PLD_OUTPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE | awk 'BEGIN {FS="\t"} {if ( $0 ~ /\[ *\-*[0-9]+\]/ ) {print $2}}' | sed 's/\[/ /g'| sed 's/\]/ /g'|sed 's/ \+/ /g' | sed 's/^ \+//g' | sed 's/ \+$//g' | cut -d" " -f$ARRAY_ID_LIST_1_BASE` fi

local RESULT=$? log_out_n "$FUNCNAME: $PLD_OUTPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE" log_result $RESULT

echo "$VALUES" log_out "[EXEC] $FUNCNAME($@): RESULT=[$VALUES]" if [ "$VALUES" == "" ]; then return 1 fi

return $RESULT}

function set-new-relation-attribute-array(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 5 ]; then log_out "Usage: $FUNCNAME " log_out " : 0-based indexing, 0-2,5 or \*" log_out " : 0-based indexing, 0-2,4,8 or \*" return 1 fi

local RELATION_ID=$1 local ATTRIBUTE=$2 local ARRAY_ID_LIST="$3" local TUPLE_ID_LIST="$4" if [ "$TUPLE_ID_LIST" == "\"*\"" ] || [ "$TUPLE_ID_LIST" == "\*" ]; then local TUPLE_ID_LIST="*" fi if [ "$ARRAY_ID_LIST" == "\"*\"" ] || [ "$ARRAY_ID_LIST" == "\*" ]; then local ARRAY_ID_LIST="*" fi local VALUE=$5

$PLD_INPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE[$ARRAY_ID_LIST]=$VALUE > /dev/null local RESULT=$? log_out_n "$FUNCNAME: $PLD_INPUT_NEW $RELATION_ID[$TUPLE_ID_LIST].$ATTRIBUTE[$ARRAY_ID_LIST]=$VALUE" log_result $RESULT if [ "$PLD_SET_VERIFY" == "1" ]; then get-new-relation-attribute-array $RELATION_ID $ATTRIBUTE "\*" "$TUPLE_ID_LIST" > /dev/null 2>&1 log_out "" fi

return $RESULT}

function get-array-id-list-not-matching(){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -lt 2 ]; then log_out "Usage: $FUNCNAME " " the resulting array-index-list is 0-based" return 1 fi

local LIST_NAME="$1" local LIST=`eval echo "$""$LIST_NAME"` local CRITERIA=$2 local RESULT_ARRAY_INDEX_LIST=

local ARRAY_SIZE=`echo "$LIST" | wc -w`

for ((i=0; i& $LOG_OUTPUT# printenv -a >& $LOG_OUTPUT log_out "# PRINTENV: $PRINTENV"# log_out "############################################################################################################################################"}

function FINISH_SCRIPT (){ REMOTE_EXEC_PRINT

local EXIT_VALUE=$1

log_out "" log_out "############################################################################################################################################" log_out "# FINISH_SCRIPT" log_out "# `date`" log_out "#" log_out "# EXIT_VALUE: $EXIT_VALUE" log_out "############################################################################################################################################"

echo "# SCRIPT FINISHED ($EXIT_VALUE)" # NOTE: Please DO NOT remove below line. It is used for REMOTE_EXEC.sh.

if [ "z$0" == "z-bash" ] ; then return $EXIT_VALUE elif [ "z$0" == "z$BASH_SOURCE" ]; then exit $EXIT_VALUE fi }

function INIT_PLDX_PROG_ARG_NE_TYPE(){ local NE_TYPE_MOD=`(cd $PKG_DB_DIR_OLD && ls *.dbx 2> /dev/null |head -1| cut -d"_" -f1 | tr -d '[0-9]')` if [ "$NE_TYPE_MOD" == "" ]; then if [ "z$NE_TYPE" == "z" ]; then NE_TYPE=`echo $PKG_DB_DIR_OLD | grep -o "\"` fi if [ "z$NE_TYPE" == "z" ]; then NE_TYPE=`echo $PKG_DB_DIR_OLD | grep -o "\"` fi if [ "z$NE_TYPE" == "z" ]; then NE_TYPE=`echo $PKG_DB_DIR_OLD | grep -o "\"` fi NE_TYPE_MOD=`echo $NE_TYPE | tr '[A-Z]' '[a-z]'` fi

#log_out "# NE_TYPE_MOD: [$NE_TYPE_MOD]" if [ "$NE_TYPE_MOD" != "r" ] && [ "$NE_TYPE_MOD" != "" ]; then PLDX_PROG_ARG_NE_TYPE="-t $NE_TYPE_MOD" fi

}

function INIT_PLDX_PROG_ARG_NE_ID(){ local NE_ID=`(cd $PKG_DB_DIR_NEW && ls *.dbx 2> /dev/null|head -1| cut -d"_" -f1 | tr -d '[a-zA-Z_]')` if [ "$NE_ID" == "" ]; then# NE_ID=`printenv -a 2> /dev/null |grep NE_ID|cut -d"=" -f2-` local NE_ID=`$PRINTENV -a 2> /dev/null |grep NE_ID|cut -d"=" -f2-` fi if [ "$NE_ID" != "" ]; then PLDX_PROG_ARG_NE_ID="-n $NE_ID" fi log_out "" log_out "# [$FUNCNAME] NE_ID: [$NE_ID]"}

function INIT_PLDX_PROG_ARG_DB_DIR(){ if [ "$PLD_NOTI_FLAG" == "0" ]; then PLDX_PROG_ARG_DB_DIR_OLD="-d $PKG_DB_DIR_OLD" PLDX_PROG_ARG_DB_DIR_NEW="-d $PKG_DB_DIR_NEW" fi}

function INIT_PLDX_PROG_FROM_SIM_LIST(){ local SKIP=0 for PLDX_PROG_SIM_PATH_ONE in $SCRIPT_DIR $PLDX_PROG_SIM_PATH; do for PLDX_PROG_SIM_ONE in $PLDX_PROG_SIM_LIST ; do PLDX_PROG_SIM=`fullpath $PLDX_PROG_SIM_PATH_ONE`/`basename $PLDX_PROG_SIM_ONE` if [ -x "$PLDX_PROG_SIM" ]; then PLDX_PROG_O=$PLDX_PROG_SIM PLDX_PROG_N=$PLDX_PROG_SIM local SKIP=1 break fi done if [ "$SKIP" == "1" ]; then break fi done

log_out "" log_out "# [$FUNCNAME] PLDX_PROG_O is configured as \"$PLDX_PROG_O\". (PLDX_PROG_SIM_PATH_ONE: $PLDX_PROG_SIM_PATH_ONE, PLDX_PROG_SIM_ONE: $PLDX_PROG_SIM_ONE)" log_out "# [$FUNCNAME] PLDX_PROG_N is configured as \"$PLDX_PROG_N\". (PLDX_PROG_SIM_PATH_ONE: $PLDX_PROG_SIM_PATH_ONE, PLDX_PROG_SIM_ONE: $PLDX_PROG_SIM_ONE)"

}

function INIT_PLDX_PROG_USING_BIN_DIR(){ log_out "" if [ ! -d $PKG_DIR_OLD ] && [ ! -d $PKG_DIR_NEW ]; then log_out "# [$FUNCNAME] PKG_DIR_OLD($PKG_DIR_OLD) or PKG_DIR_NEW($PKG_DIR_NEW) is invalid" return 1 fi

PLDX_PROG_FILES=`(cd $PKG_DIR_NEW/bin 2> /dev/null && ls -1 pld.* 2> /dev/null)` log_out "# [$FUNCNAME] PLDX_PROG_FILES: $PLDX_PROG_FILES" if [ "`echo $PLDX_PROG_FILES | wc -w`" == "1" ]; then if [ -x "$PKG_DIR_NEW/bin/$PLDX_PROG_FILES" ]; then PLDX_PROG_O=$PKG_DIR_OLD/bin/$PLDX_PROG_FILES PLDX_PROG_N=$PKG_DIR_NEW/bin/$PLDX_PROG_FILES log_out "# [$FUNCNAME] PLDX_PROG_O is configured as $PLDX_PROG_O (PLDX_PROG_FILES: $PLDX_PROG_FILES)" log_out "# [$FUNCNAME] PLDX_PROG_N is configured as $PLDX_PROG_N (PLDX_PROG_FILES: $PLDX_PROG_FILES)" fi else for PLDX_PROG_FILE in $PLDX_PROG_FILES ; do BIN_SUFFIX=`echo $PLDX_PROG_FILE | sed 's/pld\.//'` if [ "`ps --no-heading -C db.$BIN_SUFFIX`" != "" ]; then if [ -x "$PKG_DIR_NEW/bin/pld.$BIN_SUFFIX" ]; then PLDX_PROG_O=$PKG_DIR_OLD/bin/pld.$BIN_SUFFIX PLDX_PROG_N=$PKG_DIR_NEW/bin/pld.$BIN_SUFFIX log_out "# [$FUNCNAME] PLDX_PROG_O is configured as $PLDX_PROG_O (with db proc suffix: $BIN_SUFFIX)" log_out "# [$FUNCNAME] PLDX_PROG_N is configured as $PLDX_PROG_N (with db proc suffix: $BIN_SUFFIX)" break fi fi done if [ "$PLDX_PROG_N" == "" ] || [ ! -x "$PLDX_PROG_N" ]; then for PLDX_PROG_FILE in $PLDX_PROG_FILES ; do (echo "0" | echo "exit") | $PKG_DIR_NEW/bin/$PLDX_PROG_FILE > /dev/null 2>& 1 if [ $? -eq 0 ]; then PLDX_PROG_O=$PKG_DIR_OLD/bin/$PLDX_PROG_FILE PLDX_PROG_N=$PKG_DIR_NEW/bin/$PLDX_PROG_FILE log_out "# [$FUNCNAME] PLDX_PROG_O is configured as $PLDX_PROG_O (with pldx exec test)" log_out "# [$FUNCNAME] PLDX_PROG_N is configured as $PLDX_PROG_N (with pldx exec test)" break fi done fi fi}

function INIT_PLDX_PROG(){ if [ "$PLDX_PROG_N" == "" ] || [ ! -x "$PLDX_PROG_N" ]; then if [ "$REAL_TARGET" == "1" ]; then INIT_PLDX_PROG_USING_BIN_DIR else INIT_PLDX_PROG_FROM_SIM_LIST fi else log_out "# [$FUNCNAME] PLDX_PROG is already configured (PLDX_PROG_O: $PLDX_PROG_O, PLDX_PROG_N: $PLDX_PROG_N)" fi

if [ "$PLDX_PROG_O" == "" ] || [ ! -x "$PLDX_PROG_O" ]; then log_out "# [$FUNCNAME] Can't configure PLDX_PROG_O ($PLDX_PROG_O)" FINISH_SCRIPT 1 fi if [ "$PLDX_PROG_N" == "" ] || [ ! -x "$PLDX_PROG_N" ]; then log_out "# [$FUNCNAME] Can't configure PLDX_PROG_N ($PLDX_PROG_N)" FINISH_SCRIPT 1 fi

export PLDX_PROG_O export PLDX_PROG_N log_out "" log_out "# [$FUNCNAME] disfilever $PLDX_PROG_O:" log_out "`disfilever $PLDX_PROG_O`" log_out "# [$FUNCNAME] disfilever $PLDX_PROG_N:" log_out "`disfilever $PLDX_PROG_N`"}

function INIT_PLDX(){ INIT_PLDX_PROG INIT_PLDX_PROG_ARG_NE_TYPE INIT_PLDX_PROG_ARG_NE_ID INIT_PLDX_PROG_ARG_DB_DIR

PLDX_PROG_OLD="$PLDX_PROG_O $PLDX_PROG_ARG_NE_TYPE $PLDX_PROG_ARG_NE_ID $PLDX_PROG_ARG_DB_DIR_OLD" PLDX_PROG_NEW="$PLDX_PROG_N $PLDX_PROG_ARG_NE_TYPE $PLDX_PROG_ARG_NE_ID $PLDX_PROG_ARG_DB_DIR_NEW"

log_out "" log_out "############################################################################################################################################" log_out "# [$FUNCNAME] PLDX_PROG_OLD: $PLDX_PROG_OLD" log_out "# [$FUNCNAME] PLDX_PROG_NEW: $PLDX_PROG_NEW" log_out "############################################################################################################################################"

export PLD_OUTPUT_OLD="$PLDX_PROG_OLD output" export PLD_OUTPUT_NEW="$PLDX_PROG_NEW output" export PLD_INPUT_NEW="$PLDX_PROG_NEW input" export PLD_ADD_NEW="$PLDX_PROG_NEW add" export PLD_DELETE_NEW="$PLDX_PROG_NEW delete"}

function PLDX_DELETE_TEST (){ PLDX_DELETE_TEST_STR=`(echo "0" | echo "exit") | $PLDX_PROG_N delete | grep PLDX`

log_out "" log_out "############################################################################################################################################" if [ "z$PLDX_DELETE_TEST_STR" == "z" ]; then log_out "# $PLDX_PROG_N: INLINE DELETION SUPPORTED" else log_out "# $PLDX_PROG_N: INLINE DELETION UNSUPPORTED" fi log_out "############################################################################################################################################"

}

function PLDX_ADD_TEST (){ PLDX_ADD_TEST_STR=`(echo "0" | echo "exit") | $PLDX_PROG_N add | grep PLDX`

log_out "" log_out "############################################################################################################################################" if [ "z$PLDX_ADD_TEST_STR" == "z" ]; then log_out "# $PLDX_PROG_N: INLINE ADDITION SUPPORTED" else log_out "# $PLDX_PROG_N: INLINE ADDITION UNSUPPORTED" fi log_out "############################################################################################################################################"

}

function CHECK_DB_VERSION (){ local REL_DbVerInf=0x010a001b # Check Relation Version log_banner "# CHECKING RELATION VERSION" log_out "" log_out "# OLD RELATION VERSION" log_out `echo "1 $REL_DbVerInf" | $PLDX_PROG_O -d $PKG_DB_DIR_OLD |grep "Relation Version"`

log_out "" log_out "# NEW RELATION VERSION" log_out `echo "1 $REL_DbVerInf" | $PLDX_PROG_N -d $PKG_DB_DIR_NEW |grep "Relation Version"`

# Check DB Version log_banner "# Checking DB VERSION" local DB_VER_OLD=`get-old-relation-attribute $REL_DbVerInf dbSchemaVersion 0` local DB_VER_NEW=`get-new-relation-attribute $REL_DbVerInf dbSchemaVersion 0` log_out "" log_out_n "# [$FUNCNAME] DB_VER_OLD: [$DB_VER_OLD], PKG_VER_OLD: [$PKG_VER_OLD]" if [ "$DB_VER_OLD" == "$PKG_VER_OLD" ]; then log_out " ... MATCH" else log_out " ... MISMATCH" fi log_out_n "# [$FUNCNAME] DB_VER_NEW: [$DB_VER_NEW], PKG_VER_NEW: [$PKG_VER_NEW]" if [ "$DB_VER_NEW" == "$PKG_VER_NEW" ]; then log_out " ... MATCH" else log_out " ... MISMATCH" fi}

function DB_PKG_INFO (){ log_banner "DB_PKG_INFO"

if [ -d "$PKG_DIR_OLD/bin" ]; then log_out "" log_banner "DB BLOCK INFORMATION" log_out "# ls -ld --full-time $PKG_DIR_OLD/bin/db.*" log_out "`ls -ld --full-time $PKG_DIR_OLD/bin/db.*`" log_out "" log_out "# disfilever $PKG_DIR_OLD/bin/db.*" log_out "`disfilever $PKG_DIR_OLD/bin/db.*`" fi

if [ `fullpath $PKG_DB_DIR_OLD` != `fullpath $PKG_DB_DIR_NEW` ]; then log_banner "OLD DB DATA PKG INFORMATION" log_out "# ls -ld --full-time $PKG_DB_DIR_OLD/*.tar.gz" log_out "`ls -ld --full-time $PKG_DB_DIR_OLD/*.tar.gz`" log_out "" log_out "# disfilever $PKG_DB_DIR_OLD/*.tar.gz" log_out "`disfilever $PKG_DB_DIR_OLD/*.tar.gz`" log_out "" log_out "# (cd $PKG_DB_DIR_OLD/ && ls -ld --full-time *.xsd *.xml *.sh 2> /dev/null)" log_out "`(cd $PKG_DB_DIR_OLD/ && ls -ld --full-time *.xsd *.xml *.sh 2> /dev/null)`" fi

log_banner "NEW DB DATA PKG INFORMATION" log_out "# ls -ld --full-time $PKG_DB_DIR_NEW/*.tar.gz" log_out "`ls -ld --full-time $PKG_DB_DIR_NEW/*.tar.gz`" log_out "" log_out "# disfilever $PKG_DB_DIR_NEW/*.tar.gz" log_out "`disfilever $PKG_DB_DIR_NEW/*.tar.gz`" log_out "" log_out "# (cd $PKG_DB_DIR_NEW/ && ls -ld --full-time *.xsd *.xml *.sh 2> /dev/null)" log_out "`(cd $PKG_DB_DIR_NEW/ && ls -ld --full-time *.xsd *.xml *.sh 2> /dev/null)`"

}

function adapt-1-to-n (){ log_out "" log_out "[EXEC] $FUNCNAME $@"

if [ $# -ne 6 ]; then log_out "Usage: $FUNCNAME " return 1 fi

local OLD_RELATION_ID="$1" local OLD_ATTRIBUTE="$2" local OLD_TUPLE_ID="$3"

local NEW_RELATION_ID="$4" local NEW_ATTRIBUTE="$5" local NEW_TUPLE_ID_LIST="$6"

local ATTRIBUTE_VALUE=`get-old-relation-attribute $OLD_RELATION_ID $OLD_ATTRIBUTE "$OLD_TUPLE_ID"` local RESULT=$? if [ $? -ne 0 ]; then log_out "$FUNCNAME ($@): FAILURE" return $RESULT fi

set-new-relation-attribute $NEW_RELATION_ID $NEW_ATTRIBUTE "$NEW_TUPLE_ID_LIST" "$ATTRIBUTE_VALUE"}

function OUINFO_MIGRATION(){ log_out "" if [ "$EXEC_OUINFO_MIGRATION" != "1" ]; then log_out "[SKIP] $FUNCNAME $@" return 0 fi log_out "[EXEC] $FUNCNAME $@"

log_banner "Setting OuInfo" local REL_OuInfo_OLD=0x002A0003 local REL_OuInfo_NEW=0x002A0003 set-new-relation-attribute $REL_OuInfo_NEW cm "*" 1 set-new-relation-attribute $REL_OuInfo_NEW fm "*" 1 set-new-relation-attribute $REL_OuInfo_NEW swm "*" 1 set-new-relation-attribute $REL_OuInfo_NEW pm "*" 1 set-new-relation-attribute $REL_OuInfo_NEW tm "*" 1 set-new-relation-attribute $REL_OuInfo_NEW osab "*" 1 set-new-relation-attribute $REL_OuInfo_NEW oam1 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW oam2 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW oam3 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW call1 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW call2 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW systemSw1 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW systemSw2 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW media1 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW reserved1 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW reserved2 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW reserved3 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW reserved4 "*" 1 set-new-relation-attribute $REL_OuInfo_NEW reserved5 "*" 1}

function list_index(){ log_out "" log_out "[EXEC] $FUNCNAME($@)"

if [ $# -ne 2 ]; then echo "Usage: `basename $0` " echo " returns 'N' if the value is 'N'th element of the list" return 1 fi

local LIST_NAME="$1" local VALUE="$2" local LIST=`eval echo "$""$LIST_NAME"`

local NUM_LIST_ELEMENT=`echo $LIST | wc -w`

for ((i=1;i