Merge branch 'master' of https://github.com/deajan/osync
This commit is contained in:
commit
d8cb176ec6
46
dev/merge.sh
46
dev/merge.sh
|
@ -1,26 +1,38 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
## Merges ofunctions.sh and $PROGRAM
|
## MERGE 2016080601
|
||||||
|
|
||||||
|
## Merges ofunctions.sh and n_program.sh into program.sh
|
||||||
|
## Adds installer
|
||||||
|
|
||||||
PROGRAM=osync
|
PROGRAM=osync
|
||||||
VERSION=$(grep "PROGRAM_VERSION=" n_$PROGRAM.sh)
|
VERSION=$(grep "PROGRAM_VERSION=" n_$PROGRAM.sh)
|
||||||
VERSION=${VERSION#*=}
|
VERSION=${VERSION#*=}
|
||||||
FUNC_PATH=/home/git/common
|
|
||||||
|
|
||||||
PARANOIA_DEBUG_LINE="#__WITH_PARANOIA_DEBUG"
|
PARANOIA_DEBUG_LINE="__WITH_PARANOIA_DEBUG"
|
||||||
PARANOIA_DEBUG_BEGIN="#__BEGIN_WITH_PARANOIA_DEBUG"
|
PARANOIA_DEBUG_BEGIN="#__BEGIN_WITH_PARANOIA_DEBUG"
|
||||||
PARANOIA_DEBUG_END="#__END_WITH_PARANOIA_DEBUG"
|
PARANOIA_DEBUG_END="#__END_WITH_PARANOIA_DEBUG"
|
||||||
|
MINIMUM_FUNCTION_BEGIN="#### MINIMAL-FUNCTION-SET BEGIN ####"
|
||||||
|
MINIMUM_FUNCTION_END="#### MINIMAL-FUNCTION-SET END ####"
|
||||||
|
|
||||||
function Unexpand {
|
function Unexpand {
|
||||||
unexpand n_$PROGRAM.sh > tmp_$PROGRAM.sh
|
unexpand n_$PROGRAM.sh > tmp_$PROGRAM.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
function Merge {
|
function MergeAll {
|
||||||
|
|
||||||
sed "/source \"\.\/ofunctions.sh\"/r /home/git/common/ofunctions.sh" tmp_$PROGRAM.sh | grep -v 'source "./ofunctions.sh"' > debug_$PROGRAM.sh
|
sed "/source \"\.\/ofunctions.sh\"/r ofunctions.sh" tmp_$PROGRAM.sh | grep -v 'source "./ofunctions.sh"' > debug_$PROGRAM.sh
|
||||||
|
chmod +x debug_$PROGRAM.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
function MergeMinimum {
|
||||||
|
sed -n "/$MINIMUM_FUNCTION_BEGIN/,/$MINIMUM_FUNCTION_END/p" ofunctions.sh > tmp_minimal.sh
|
||||||
|
sed "/source \"\.\/ofunctions.sh\"/r tmp_minimal.sh" tmp_$PROGRAM.sh | grep -v 'source "./ofunctions.sh"' | grep -v "$PARANOIA_DEBUG_LINE" > debug_$PROGRAM.sh
|
||||||
|
rm -f tmp_minimal.sh
|
||||||
chmod +x debug_$PROGRAM.sh
|
chmod +x debug_$PROGRAM.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function CleanDebug {
|
function CleanDebug {
|
||||||
|
|
||||||
# sed explanation
|
# sed explanation
|
||||||
|
@ -38,16 +50,22 @@ function CleanDebug {
|
||||||
}
|
}
|
||||||
|
|
||||||
function CopyCommons {
|
function CopyCommons {
|
||||||
sed "s/\[prgname\]/$PROGRAM/g" /home/git/common/common_install.sh > ../tmp_install.sh
|
sed "s/\[prgname\]/$PROGRAM/g" common_install.sh > ../tmp_install.sh
|
||||||
sed "s/\[version\]/$VERSION/g" ../tmp_install.sh > ../install.sh
|
sed "s/\[version\]/$VERSION/g" ../tmp_install.sh > ../install.sh
|
||||||
sed "s/\[prgname\]/$PROGRAM/g" /home/git/common/common_batch.sh > ../$PROGRAM-batch.sh
|
if [ -f "common_batch.sh" ]; then
|
||||||
chmod +x ../install.sh
|
sed "s/\[prgname\]/$PROGRAM/g" common_batch.sh > ../$PROGRAM-batch.sh
|
||||||
chmod +x ../$PROGRAM-batch.sh
|
fi
|
||||||
|
chmod +x ../install.sh
|
||||||
|
chmod +x ../$PROGRAM-batch.sh
|
||||||
|
rm -f ../tmp_install.sh
|
||||||
}
|
}
|
||||||
|
|
||||||
Unexpand
|
Unexpand
|
||||||
Merge
|
if [ "$PROGRAM" == "osync" ] || [ "$PROGRAM" == "obackup" ]; then
|
||||||
|
MergeAll
|
||||||
|
else
|
||||||
|
MergeMinimum
|
||||||
|
fi
|
||||||
CleanDebug
|
CleanDebug
|
||||||
rm -f tmp_$PROGRAM.sh
|
|
||||||
rm -f ../tmp_install.sh
|
|
||||||
CopyCommons
|
CopyCommons
|
||||||
|
rm -f tmp_$PROGRAM.sh
|
||||||
|
|
198
dev/n_osync.sh
198
dev/n_osync.sh
|
@ -1,49 +1,49 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
#TODO(critical): handle conflict prevalance, especially in sync_attrs function
|
#TODO(critical): handle conflict prevalance, especially in sync_attrs function
|
||||||
#TODO(critical): writelockfiles remote does not shut execution
|
|
||||||
|
|
||||||
PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
PROGRAM="osync" # Rsync based two way sync engine with fault tolerance
|
||||||
AUTHOR="(C) 2013-2016 by Orsiris de Jong"
|
AUTHOR="(C) 2013-2016 by Orsiris de Jong"
|
||||||
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
CONTACT="http://www.netpower.fr/osync - ozy@netpower.fr"
|
||||||
PROGRAM_VERSION=1.2-dev-parallel
|
PROGRAM_VERSION=1.2-dev-parallel
|
||||||
PROGRAM_BUILD=2016082801
|
PROGRAM_BUILD=2016082803
|
||||||
IS_STABLE=no
|
IS_STABLE=no
|
||||||
|
|
||||||
# Function Name Is parallel #__WITH_PARANOIA_DEBUG
|
# Execution order
|
||||||
|
# Function Name Is parallel #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
# GetLocalOS no #__WITH_PARANOIA_DEBUG
|
# GetLocalOS no #__WITH_PARANOIA_DEBUG
|
||||||
# InitLocalOSSettings no #__WITH_PARANOIA_DEBUG
|
# InitLocalOSSettings no #__WITH_PARANOIA_DEBUG
|
||||||
# CheckEnvironment no #__WITH_PARANOIA_DEBUG
|
# CheckEnvironment no #__WITH_PARANOIA_DEBUG
|
||||||
# PreInit no #__WITH_PARANOIA_DEBUG
|
# PreInit no #__WITH_PARANOIA_DEBUG
|
||||||
# Init no #__WITH_PARANOIA_DEBUG
|
# Init no #__WITH_PARANOIA_DEBUG
|
||||||
# PostInit no #__WITH_PARANOIA_DEBUG
|
# PostInit no #__WITH_PARANOIA_DEBUG
|
||||||
# GetRemoteOS no #__WITH_PARANOIA_DEBUG
|
# GetRemoteOS no #__WITH_PARANOIA_DEBUG
|
||||||
# InitRemoteOSSettings no #__WITH_PARANOIA_DEBUG
|
# InitRemoteOSSettings no #__WITH_PARANOIA_DEBUG
|
||||||
# CheckReplicaPaths yes #__WITH_PARANOIA_DEBUG
|
# CheckReplicaPaths yes #__WITH_PARANOIA_DEBUG
|
||||||
# CheckDiskSpace yes #__WITH_PARANOIA_DEBUG
|
# CheckDiskSpace yes #__WITH_PARANOIA_DEBUG
|
||||||
# RunBeforeHook yes #__WITH_PARANOIA_DEBUG
|
# RunBeforeHook yes #__WITH_PARANOIA_DEBUG
|
||||||
# Main no #__WITH_PARANOIA_DEBUG
|
# Main no #__WITH_PARANOIA_DEBUG
|
||||||
# CreateStateDirs yes #__WITH_PARANOIA_DEBUG
|
# CreateStateDirs yes #__WITH_PARANOIA_DEBUG
|
||||||
# CheckLocks yes #__WITH_PARANOIA_DEBUG
|
# CheckLocks yes #__WITH_PARANOIA_DEBUG
|
||||||
# WriteLockFiles yes #__WITH_PARANOIA_DEBUG
|
# WriteLockFiles yes #__WITH_PARANOIA_DEBUG
|
||||||
# Sync no #__WITH_PARANOIA_DEBUG
|
# Sync no #__WITH_PARANOIA_DEBUG
|
||||||
# tree_list yes #__WITH_PARANOIA_DEBUG
|
# tree_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# tree_list yes #__WITH_PARANOIA_DEBUG
|
# tree_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# delete_list yes #__WITH_PARANOIA_DEBUG
|
# delete_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# delete_list yes #__WITH_PARANOIA_DEBUG
|
# delete_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# sync_attrs no #__WITH_PARANOIA_DEBUG
|
# sync_attrs no #__WITH_PARANOIA_DEBUG
|
||||||
# _get_file_ctime_mtime yes #__WITH_PARANOIA_DEBUG
|
# _get_file_ctime_mtime yes #__WITH_PARANOIA_DEBUG
|
||||||
# sync_update yes #__WITH_PARANOIA_DEBUG
|
# sync_update yes #__WITH_PARANOIA_DEBUG
|
||||||
# sync_update yes #__WITH_PARANOIA_DEBUG
|
# sync_update yes #__WITH_PARANOIA_DEBUG
|
||||||
# deletion_propagation yes #__WITH_PARANOIA_DEBUG
|
# deletion_propagation yes #__WITH_PARANOIA_DEBUG
|
||||||
# deletion_propagation yes #__WITH_PARANOIA_DEBUG
|
# deletion_propagation yes #__WITH_PARANOIA_DEBUG
|
||||||
# tree_list yes #__WITH_PARANOIA_DEBUG
|
# tree_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# tree_list yes #__WITH_PARANOIA_DEBUG
|
# tree_list yes #__WITH_PARANOIA_DEBUG
|
||||||
# SoftDelete yes #__WITH_PARANOIA_DEBUG
|
# SoftDelete yes #__WITH_PARANOIA_DEBUG
|
||||||
# RunAfterHook yes #__WITH_PARANOIA_DEBUG
|
# RunAfterHook yes #__WITH_PARANOIA_DEBUG
|
||||||
# UnlockReplicas yes #__WITH_PARANOIA_DEBUG
|
# UnlockReplicas yes #__WITH_PARANOIA_DEBUG
|
||||||
# CleanUp no #__WITH_PARANOIA_DEBUG
|
# CleanUp no #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
source "./ofunctions.sh"
|
source "./ofunctions.sh"
|
||||||
_LOGGER_PREFIX="time"
|
_LOGGER_PREFIX="time"
|
||||||
|
@ -129,6 +129,24 @@ function CheckEnvironment {
|
||||||
function CheckCurrentConfig {
|
function CheckCurrentConfig {
|
||||||
__CheckArguments 0 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
__CheckArguments 0 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
|
# Check all variables that should contain "yes" or "no"
|
||||||
|
declare -a yes_no_vars=(CREATE_DIRS SUDO_EXEC SSH_COMPRESSION SSH_IGNORE_KNOWN_HOSTS REMOTE_HOST_PING PRESERVE_PERMISSIONS PRESERVE_OWNER PRESERVE_GROUP PRESERVE_EXECUTABILITY PRESERVE_ACL PRESERVE_XATTR COPY_SYMLINKS KEEP_DIRLINKS PRESERVE_HARDLINKS CHECKSUM RSYNC_COMPRESS CONFLICT_BACKUP CONFLICT_BACKUP_MULTIPLE SOFT_DELETE RESUME_SYNC FORCE_STRANGER_LOCK_RESUME PARTIAL DELTA_COPIES STOP_ON_CMD_ERROR RUN_AFTER_CMD_ON_ERROR)
|
||||||
|
for i in "${yes_no_vars[@]}"; do
|
||||||
|
test="if [ \"\$$i\" != \"yes\" ] && [ \"\$$i\" != \"no\" ]; then Logger \"Bogus $i value defined in config file. Correct your config file or update it using the update script if using and old version.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
|
||||||
|
# Check all variables that should contain a numerical value >= 0
|
||||||
|
declare -a num_vars=(MINIMUM_SPACE BANDWIDTH SOFT_MAX_EXEC_TIME HARD_MAX_EXEC_TIME KEEP_LOGGING MIN_WAIT MAX_WAIT CONFLICT_BACKUP_DAYS SOFT_DELETE_DAYS RESUME_TRY MAX_EXEC_TIME_PER_CMD_BEFORE MAX_EXEC_TIME_PER_CMD_AFTER)
|
||||||
|
for i in "${num_vars[@]}"; do
|
||||||
|
test="if [ $(IsNumeric \"\$$i\") -eq 0 ]; then Logger \"Bogus $i value defined in config file. Correct your config file or update it using the update script if using and old version.\" \"CRITICAL\"; exit 1; fi"
|
||||||
|
eval "$test"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function CheckCurrentConfigAll {
|
||||||
|
__CheckArguments 0 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
if [ "$INSTANCE_ID" == "" ]; then
|
if [ "$INSTANCE_ID" == "" ]; then
|
||||||
Logger "No INSTANCE_ID defined in config file." "CRITICAL"
|
Logger "No INSTANCE_ID defined in config file." "CRITICAL"
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -144,21 +162,11 @@ function CheckCurrentConfig {
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check all variables that should contain "yes" or "no"
|
|
||||||
declare -a yes_no_vars=(CREATE_DIRS SUDO_EXEC SSH_COMPRESSION SSH_IGNORE_KNOWN_HOSTS REMOTE_HOST_PING PRESERVE_PERMISSIONS PRESERVE_OWNER PRESERVE_GROUP PRESERVE_EXECUTABILITY PRESERVE_ACL PRESERVE_XATTR COPY_SYMLINKS KEEP_DIRLINKS PRESERVE_HARDLINKS CHECKSUM RSYNC_COMPRESS CONFLICT_BACKUP CONFLICT_BACKUP_MULTIPLE SOFT_DELETE RESUME_SYNC FORCE_STRANGER_LOCK_RESUME PARTIAL DELTA_COPIES STOP_ON_CMD_ERROR RUN_AFTER_CMD_ON_ERROR)
|
|
||||||
for i in "${yes_no_vars[@]}"; do
|
|
||||||
test="if [ \"\$$i\" != \"yes\" ] && [ \"\$$i\" != \"no\" ]; then Logger \"Bogus $i value defined in config file. Correct your config file or update it using the update script if using and old version.\" \"CRITICAL\"; exit 1; fi"
|
|
||||||
eval "$test"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Check all variables that should contain a numerical value >= 0
|
|
||||||
declare -a num_vars=(MINIMUM_SPACE BANDWIDTH SOFT_MAX_EXEC_TIME HARD_MAX_EXEC_TIME KEEP_LOGGING MIN_WAIT MAX_WAIT CONFLICT_BACKUP_DAYS SOFT_DELETE_DAYS RESUME_TRY MAX_EXEC_TIME_PER_CMD_BEFORE MAX_EXEC_TIME_PER_CMD_AFTER)
|
|
||||||
for i in "${num_vars[@]}"; do
|
|
||||||
test="if [ $(IsNumeric \"\$$i\") -eq 0 ]; then Logger \"Bogus $i value defined in config file. Correct your config file or update it using the update script if using and old version.\" \"CRITICAL\"; exit 1; fi"
|
|
||||||
eval "$test"
|
|
||||||
done
|
|
||||||
|
|
||||||
#TODO(low): Add runtime variable tests (RSYNC_ARGS etc)
|
#TODO(low): Add runtime variable tests (RSYNC_ARGS etc)
|
||||||
|
if [ "$REMOTE_OPERATION" == "yes" ] && [ ! -f "$SSH_RSA_PRIVATE_KEY" ]; then
|
||||||
|
Logger "Cannot find rsa private key [$SSH_RSA_PRIVATE_KEY]. Cannot connect to remote system." "CRITICAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
###### Osync specific functions (non shared)
|
###### Osync specific functions (non shared)
|
||||||
|
@ -473,22 +481,24 @@ function CheckLocks {
|
||||||
|
|
||||||
function _WriteLockFilesLocal {
|
function _WriteLockFilesLocal {
|
||||||
local lockfile="${1}"
|
local lockfile="${1}"
|
||||||
__CheckArguments 1 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
local replica_type="${2}"
|
||||||
|
__CheckArguments 2 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
$COMMAND_SUDO echo "$SCRIPT_PID@$INSTANCE_ID" > "$lockfile"
|
$COMMAND_SUDO echo "$SCRIPT_PID@$INSTANCE_ID" > "$lockfile"
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
Logger "Could not create lock file [$lockfile]." "CRITICAL"
|
Logger "Could not create lock file on local $replica_type in [$lockfile]." "CRITICAL"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
Logger "Locked replica on [$lockfile]." "DEBUG"
|
Logger "Locked local $replica_type replica in [$lockfile]." "DEBUG"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function _WriteLockFilesRemote {
|
function _WriteLockFilesRemote {
|
||||||
local lockfile="${1}"
|
local lockfile="${1}"
|
||||||
__CheckArguments 1 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
local replica_type="${2}"
|
||||||
|
__CheckArguments 2 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
local cmd=
|
local cmd
|
||||||
|
|
||||||
CheckConnectivity3rdPartyHosts
|
CheckConnectivity3rdPartyHosts
|
||||||
CheckConnectivityRemoteHost
|
CheckConnectivityRemoteHost
|
||||||
|
@ -497,33 +507,49 @@ function _WriteLockFilesRemote {
|
||||||
Logger "cmd: $cmd" "DEBUG"
|
Logger "cmd: $cmd" "DEBUG"
|
||||||
eval "$cmd"
|
eval "$cmd"
|
||||||
if [ $? != 0 ]; then
|
if [ $? != 0 ]; then
|
||||||
Logger "Could not set lock on remote $replica_type replica." "CRITICAL"
|
Logger "Could not create lock file on remote $replica_type in [$lockfile]." "CRITICAL"
|
||||||
exit 1
|
exit 1
|
||||||
else
|
else
|
||||||
Logger "Locked remote $replica_type replica." "DEBUG"
|
Logger "Locked remote $replica_type replica in [$lockfile]." "DEBUG"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
function WriteLockFiles {
|
function WriteLockFiles {
|
||||||
__CheckArguments 0 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
__CheckArguments 0 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
local pids
|
local initiatorPid
|
||||||
|
local targetPid
|
||||||
|
local pidArray
|
||||||
|
local pid
|
||||||
|
|
||||||
|
_WriteLockFilesLocal "${INITIATOR[2]}" "${INITIATOR[0]}"&
|
||||||
|
initiatorPid="$!"
|
||||||
|
|
||||||
_WriteLockFilesLocal "${INITIATOR[2]}" &
|
|
||||||
pids="$!"
|
|
||||||
if [ "$REMOTE_OPERATION" != "yes" ]; then
|
if [ "$REMOTE_OPERATION" != "yes" ]; then
|
||||||
_WriteLockFilesLocal "${TARGET[2]}" &
|
_WriteLockFilesLocal "${TARGET[2]}" "${TARGET[0]}" &
|
||||||
pids="$pids;$!"
|
targetPid="$!"
|
||||||
else
|
else
|
||||||
_WriteLockFilesRemote "${TARGET[2]}" &
|
_WriteLockFilesRemote "${TARGET[2]}" "${TARGET[0]}" &
|
||||||
pids="$pids;$!"
|
targetPid="$!"
|
||||||
fi
|
fi
|
||||||
WaitForTaskCompletion $pids 720 1800 ${FUNCNAME[0]} true $KEEP_LOGGING
|
|
||||||
|
INITIATOR_LOCK_FILE_EXISTS=true
|
||||||
|
TARGET_LOCK_FILE_EXISTS=true
|
||||||
|
WaitForTaskCompletion "$initiatorPid;$targetPid" 720 1800 ${FUNCNAME[0]} true $KEEP_LOGGING
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
IFS=';' read -r -a pidArray <<< "$WAIT_FOR_TASK_COMPLETION"
|
||||||
|
for pid in "${pidArray[@]}"; do
|
||||||
|
pid=${pid%:*}
|
||||||
|
if [ $pid == $initiatorPid ]; then
|
||||||
|
INITIATOR_LOCK_FILE_EXISTS=false
|
||||||
|
elif [ $pid == $targetPid ]; then
|
||||||
|
TARGET_LOCK_FILE_EXISTS=false
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
Logger "Cancelling task." "CRITICAL"
|
Logger "Cancelling task." "CRITICAL"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
LOCK_FILES_EXIST=1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function _UnlockReplicasLocal {
|
function _UnlockReplicasLocal {
|
||||||
|
@ -565,21 +591,29 @@ function UnlockReplicas {
|
||||||
|
|
||||||
local pids
|
local pids
|
||||||
|
|
||||||
if [ $_NOLOCKS -eq 1 ] || [ $LOCK_FILES_EXIST -eq 0 ]; then
|
if [ $_NOLOCKS -eq 1 ]; then
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
_UnlockReplicasLocal "${INITIATOR[2]}" &
|
if [ $INITIATOR_LOCK_FILE_EXISTS == true ]; then
|
||||||
pids="$!"
|
_UnlockReplicasLocal "${INITIATOR[2]}" &
|
||||||
|
pids="$!"
|
||||||
if [ "$REMOTE_OPERATION" != "yes" ]; then
|
fi
|
||||||
_UnlockReplicasLocal "${TARGET[2]}" &
|
|
||||||
pids="$pids;$!"
|
#WIP check if WaitForTaskCompletion can handle emppty pids like ";pid"
|
||||||
else
|
if [ $TARGET_LOCK_FILE_EXISTS == true ]; then
|
||||||
_UnlockReplicasRemote "${TARGET[2]}" &
|
if [ "$REMOTE_OPERATION" != "yes" ]; then
|
||||||
pids="$pids;$!"
|
_UnlockReplicasLocal "${TARGET[2]}" &
|
||||||
|
pids="$pids;$!"
|
||||||
|
else
|
||||||
|
_UnlockReplicasRemote "${TARGET[2]}" &
|
||||||
|
pids="$pids;$!"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$pids" != "" ]; then
|
||||||
|
WaitForTaskCompletion $pids 720 1800 ${FUNCNAME[0]} true $KEEP_LOGGING
|
||||||
fi
|
fi
|
||||||
WaitForTaskCompletion $pids 720 1800 ${FUNCNAME[0]} true $KEEP_LOGGING
|
|
||||||
}
|
}
|
||||||
|
|
||||||
###### Sync core functions
|
###### Sync core functions
|
||||||
|
@ -599,11 +633,6 @@ function tree_list {
|
||||||
|
|
||||||
__CheckArguments 3 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
__CheckArguments 3 $# ${FUNCNAME[0]} "$@" #__WITH_PARANOIA_DEBUG
|
||||||
|
|
||||||
#WIP
|
|
||||||
#if [ "$replica_type" == "${INITIATOR[0]}" ]; then
|
|
||||||
# exit 12
|
|
||||||
#fi
|
|
||||||
|
|
||||||
escaped_replica_path=$(EscapeSpaces "$replica_path")
|
escaped_replica_path=$(EscapeSpaces "$replica_path")
|
||||||
|
|
||||||
Logger "Creating $replica_type replica file list [$replica_path]." "NOTICE"
|
Logger "Creating $replica_type replica file list [$replica_path]." "NOTICE"
|
||||||
|
@ -720,7 +749,6 @@ function sync_attrs {
|
||||||
Logger "RSYNC_CMD: $rsync_cmd" "DEBUG"
|
Logger "RSYNC_CMD: $rsync_cmd" "DEBUG"
|
||||||
eval "$rsync_cmd"
|
eval "$rsync_cmd"
|
||||||
WaitForTaskCompletion $! $SOFT_MAX_EXEC_TIME $HARD_MAX_EXEC_TIME ${FUNCNAME[0]} false $KEEP_LOGGING
|
WaitForTaskCompletion $! $SOFT_MAX_EXEC_TIME $HARD_MAX_EXEC_TIME ${FUNCNAME[0]} false $KEEP_LOGGING
|
||||||
#WIP: return retval from process instead of err count if only one pid is tested
|
|
||||||
retval=$?
|
retval=$?
|
||||||
if [ $_VERBOSE -eq 1 ] && [ -f "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" ]; then
|
if [ $_VERBOSE -eq 1 ] && [ -f "$RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID" ]; then
|
||||||
Logger "List:\n$(cat $RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID)" "NOTICE"
|
Logger "List:\n$(cat $RUN_DIR/$PROGRAM.${FUNCNAME[0]}.$SCRIPT_PID)" "NOTICE"
|
||||||
|
@ -801,7 +829,6 @@ function sync_attrs {
|
||||||
Logger "RSYNC_CMD: $rsync_cmd" "DEBUG"
|
Logger "RSYNC_CMD: $rsync_cmd" "DEBUG"
|
||||||
eval "$rsync_cmd"
|
eval "$rsync_cmd"
|
||||||
WaitForTaskCompletion $! $SOFT_MAX_EXEC_TIME $HARD_MAX_EXEC_TIME ${FUNCNAME[0]} false $KEEP_LOGGING
|
WaitForTaskCompletion $! $SOFT_MAX_EXEC_TIME $HARD_MAX_EXEC_TIME ${FUNCNAME[0]} false $KEEP_LOGGING
|
||||||
#WIP: the same
|
|
||||||
retval=$?
|
retval=$?
|
||||||
if [ $_VERBOSE -eq 1 ] && [ -f "$RUN_DIR/$PROGRAM.attr-update.$dest_replica.$SCRIPT_PID" ]; then
|
if [ $_VERBOSE -eq 1 ] && [ -f "$RUN_DIR/$PROGRAM.attr-update.$dest_replica.$SCRIPT_PID" ]; then
|
||||||
Logger "List:\n$(cat $RUN_DIR/$PROGRAM.attr-update.$dest_replica.$SCRIPT_PID)" "NOTICE"
|
Logger "List:\n$(cat $RUN_DIR/$PROGRAM.attr-update.$dest_replica.$SCRIPT_PID)" "NOTICE"
|
||||||
|
@ -1814,7 +1841,9 @@ if [ "$CONFLICT_PREVALANCE" == "" ]; then
|
||||||
CONFLICT_PREVALANCE=initiator
|
CONFLICT_PREVALANCE=initiator
|
||||||
fi
|
fi
|
||||||
|
|
||||||
LOCK_FILES_EXIST=0
|
INITIATOR_LOCK_FILE_EXISTS=false
|
||||||
|
TARGET_LOCK_FILE_EXISTS=false
|
||||||
|
|
||||||
FORCE_UNLOCK=0
|
FORCE_UNLOCK=0
|
||||||
no_maxtime=0
|
no_maxtime=0
|
||||||
opts=""
|
opts=""
|
||||||
|
@ -1972,6 +2001,7 @@ opts="${opts# *}"
|
||||||
if [ $_QUICK_SYNC -lt 2 ]; then
|
if [ $_QUICK_SYNC -lt 2 ]; then
|
||||||
CheckCurrentConfig
|
CheckCurrentConfig
|
||||||
fi
|
fi
|
||||||
|
CheckCurrentConfigAll
|
||||||
|
|
||||||
DATE=$(date)
|
DATE=$(date)
|
||||||
Logger "-------------------------------------------------------------" "NOTICE"
|
Logger "-------------------------------------------------------------" "NOTICE"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#### MINIMAL-FUNCTION-SET BEGIN ####
|
#### MINIMAL-FUNCTION-SET BEGIN ####
|
||||||
|
|
||||||
## FUNC_BUILD=2016082801
|
## FUNC_BUILD=2016082802
|
||||||
## BEGIN Generic bash functions written in 2013-2016 by Orsiris de Jong - http://www.netpower.fr - ozy@netpower.fr
|
## BEGIN Generic bash functions written in 2013-2016 by Orsiris de Jong - http://www.netpower.fr - ozy@netpower.fr
|
||||||
|
|
||||||
## To use in a program, define the following variables:
|
## To use in a program, define the following variables:
|
||||||
|
@ -592,7 +592,6 @@ function joinString {
|
||||||
# Fills a global variable called WAIT_FOR_TASK_COMPLETION that contains list of failed pids in format pid1:result1;pid2:result2
|
# Fills a global variable called WAIT_FOR_TASK_COMPLETION that contains list of failed pids in format pid1:result1;pid2:result2
|
||||||
# Warning: Don't imbricate this function into another run if you plan to use the global variable output
|
# Warning: Don't imbricate this function into another run if you plan to use the global variable output
|
||||||
|
|
||||||
#TODO check missing local values used here
|
|
||||||
function WaitForTaskCompletion {
|
function WaitForTaskCompletion {
|
||||||
local pids="${1}" # pids to wait for, separated by semi-colon
|
local pids="${1}" # pids to wait for, separated by semi-colon
|
||||||
local soft_max_time="${2}" # If program with pid $pid takes longer than $soft_max_time seconds, will log a warning, unless $soft_max_time equals 0.
|
local soft_max_time="${2}" # If program with pid $pid takes longer than $soft_max_time seconds, will log a warning, unless $soft_max_time equals 0.
|
||||||
|
@ -613,9 +612,13 @@ function WaitForTaskCompletion {
|
||||||
local retval=0 # return value of monitored pid process
|
local retval=0 # return value of monitored pid process
|
||||||
local errorcount=0 # Number of pids that finished with errors
|
local errorcount=0 # Number of pids that finished with errors
|
||||||
|
|
||||||
|
local pid # Current pid working on
|
||||||
local pidCount # number of given pids
|
local pidCount # number of given pids
|
||||||
local pidState # State of the process
|
local pidState # State of the process
|
||||||
|
|
||||||
|
local pidsArray # Array of currently running pids
|
||||||
|
local newPidsArray # New array of currently running pids
|
||||||
|
|
||||||
IFS=';' read -a pidsArray <<< "$pids"
|
IFS=';' read -a pidsArray <<< "$pids"
|
||||||
pidCount=${#pidsArray[@]}
|
pidCount=${#pidsArray[@]}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue