diff --git a/dev/n_osync.sh b/dev/n_osync.sh index cba8861..8cd4cf0 100755 --- a/dev/n_osync.sh +++ b/dev/n_osync.sh @@ -856,8 +856,8 @@ ENDSSH function timestampList { local replicaPath="${1}" # path to the replica for which a tree needs to be constructed local replicaType="${2}" # replica type: initiator, target - local treeFilename="${3}" # filename to output tree (will be prefixed with $replicaType) - local conflictFileName="{4}" + local fileList="${3}" # List of files to get timestamps for + local timestampFilename="${4}" # filename to output timestamp list (will be prefixed with $replicaType) __CheckArguments 4 $# "$@" #__WITH_PARANOIA_DEBUG @@ -867,16 +867,33 @@ function timestampList { Logger "Getting file stats for $replicaType replica." "NOTICE" - #_getCtimeMtime - #compare + if [ "$replicaType" == "${INITIATOR[$__type]}" ]; then + timestampFilename="${TARGET[$__type]}" + elif [ "$replicaType" == "${TARGET[$__type]}" ]; then + timestampFilename="${INITIATOR[$__type]}" + else + Logger "Bogus replicaType in [${FUNCNAME[0]}]." "CRITICAL" + exit 1 + fi + Logger "Creating $replicaType replica file list [$replicaPath]." "NOTICE" + if [ "$REMOTE_OPERATION" == "yes" ] && [ "$replicaType" == "${TARGET[$__type]}" ]; then + CheckConnectivity3rdPartyHosts + CheckConnectivityRemoteHost + _getFileCtimeMtimeRemote "$replicaPath" "$replicaType" "$fileList" "$timestampFilename" + else + _getFileCtimeMtimeLocal "$replicaPath" "$replicaType" "$fileList" "$timestampFilename" + fi } #WIP function conflictList { + return 0 + local replicaPath="${1}" # path to the replica for which a tree needs to be constructed local replicaType="${2}" # replica type: initiator, target - local treeFilename="${3}" # filename to output tree (will be prefixed with $replicaType) - local conflictFileName="{4}" + local timestampCurrentFilename="${3}" # filename of current timestamp list (will be prefixed with $replicaType) + local timestampPreviousFilename="${3}" # filename of previous timestamp list (will be prefixed with $replicaType) + local conflictFilename="{4}" # filename of conflicts __CheckArguments 4 $# "$@" #__WITH_PARANOIA_DEBUG @@ -886,8 +903,19 @@ function conflictList { Logger "Creating conflict list for $replicaType replica." "NOTICE" - #_getCtimeMtime - #compare + # Compare if previous exists +} + +#WIP +function renameConflictList { + return 0 + + local timestampCurrentFilename="${3}" # filename of current timestamp list (will be prefixed with $replicaType) + local timestampPreviousFilename="${3}" # filename of previous timestamp list (will be prefixed with $replicaType) + + __CheckArguments 4 $# "$@" #__WITH_PARANOIA_DEBUG + + # Rename files } # rsync does sync with mtime, but file attribute modifications only change ctime. @@ -1369,7 +1397,7 @@ function deletionPropagation { fi } -###### Sync function in 6 steps +###### Sync function in 9 steps ###### ###### Step 0a & 0b: Create current file list of replicas ###### Step 1a & 1b: Create deleted file list of replicas @@ -1379,6 +1407,7 @@ function deletionPropagation { ###### Step 5a & 5b: Update replicas ###### Step 6a & 6b: Propagate deletions on replicas ###### Step 7a & 8b: Create after run file list of replicas +###### Step 8: Rename timestamp files from current to previous function Sync { __CheckArguments 0 $# "$@" #__WITH_PARANOIA_DEBUG @@ -1535,12 +1564,12 @@ function Sync { ## Step 2a & 2b if [ "$resumeInitiator" == "${SYNC_ACTION[2]}" ] || [ "$resumeTarget" == "${SYNC_ACTION[2]}" ]; then if [ "$resumeInitiator" == "${SYNC_ACTION[2]}" ]; then - timestampList "${INITIATOR[$__type]}" & + timestampList "${INITIATOR[$__replicaDir]}" "${INITIATOR[$__type]}" "${INITIATOR[$__type]}${INITIATOR[$__timestampsCurrentFile]}" & initiatorPid="$!" fi if [ "$resumeTarget" == "${SYNC_ACTION[2]}" ]; then - timestampList "${TARGET[$__type]}" & + timestampList "${TARGET[$__replicaDir]}" "${TARGET[$__type]}" "${TARGET[$__type]}${TARGET[$__timestampsCurrentFile]}" & targetPid="$!" fi @@ -1792,6 +1821,30 @@ function Sync { fi fi + # Step 8 #WIP adapt to last function + if [ "$resumeInitiator" == "${SYNC_ACTION[8]}" ] || [ "$resumeTarget" == "${SYNC_ACTION[8]}" ]; then + if [[ "$RSYNC_ATTR_ARGS" == *"-X"* ]] || [[ "$RSYNC_ATTR_ARGS" == *"-A"* ]]; then + renameTimestampFiles "${INITIATOR[$__replicaDir]}" "$TARGET_SYNC_DIR" & + WaitForTaskCompletion $! $SOFT_MAX_EXEC_TIME $HARD_MAX_EXEC_TIME $SLEEP_TIME $KEEP_LOGGING false true false + if [ $? -ne 0 ]; then + echo "${SYNC_ACTION[8]}" > "${INITIATOR[$__initiatorLastActionFile]}" + echo "${SYNC_ACTION[8]}" > "${INITIATOR[$__targetLastActionFile]}" + exit 1 + else + echo "${SYNC_ACTION[9]}" > "${INITIATOR[$__initiatorLastActionFile]}" + echo "${SYNC_ACTION[9]}" > "${INITIATOR[$__targetLastActionFile]}" + resumeInitiator="${SYNC_ACTION[5]}" + resumeTarget="${SYNC_ACTION[5]}" + + fi + else + echo "${SYNC_ACTION[9]}" > "${INITIATOR[$__initiatorLastActionFile]}" + echo "${SYNC_ACTION[9]}" > "${INITIATOR[$__targetLastActionFile]}" + resumeInitiator="${SYNC_ACTION[9]}" + resumeTarget="${SYNC_ACTION[9]}" + fi + fi + Logger "Finished synchronization task." "NOTICE" echo "0" > "${INITIATOR[$__resumeCount]}" } @@ -2086,6 +2139,9 @@ function Init { readonly __deletedListFile=13 readonly __failedDeletedListFile=14 readonly __successDeletedListFile=15 + readonly __timestampCurrentFile=15 + readonly __timestampPreviousFile=16 + readonly __conflictListFile=17 INITIATOR=() INITIATOR[$__type]='initiator' @@ -2104,6 +2160,9 @@ function Init { INITIATOR[$__deletedListFile]="-deleted-list-$INSTANCE_ID$drySuffix" INITIATOR[$__failedDeletedListFile]="-failed-delete-$INSTANCE_ID$drySuffix" INITIATOR[$__successDeletedListFile]="-success-delete-$INSTANCE_ID$drySuffix" + INITIATOR[$__timestampCurrentFile]="-timestamps-current-$INSTANCE_ID$drySuffix" + INITIATOR[$__timestampPreviousFile]="-timestamps-previous-$INSTANCE_ID$drySuffix" + INITIATOR[$__conflictListfile]="conflicts-$INSTANCE_ID$drySuffix" TARGET=() TARGET[$__type]='target' @@ -2122,6 +2181,9 @@ function Init { TARGET[$__deletedListFile]="-deleted-list-$INSTANCE_ID$drySuffix" # unused TARGET[$__failedDeletedListFile]="-failed-delete-$INSTANCE_ID$drySuffix" TARGET[$__successDeletedListFile]="-success-delete-$INSTANCE_ID$drySuffix" + TARGET[$__timestampCurrentFile]="-timestamps-current-$INSTANCE_ID$drySuffix" + TARGET[$__timestampPreviousFile]="-timestamps-previous-$INSTANCE_ID$drySuffix" + TARGET[$__conflictListfile]="conflicts-$INSTANCE_ID$drySuffix" PARTIAL_DIR="${INITIATOR[$__partialDir]}" @@ -2164,6 +2226,7 @@ function Init { 'update-replica' 'delete-propagation' 'replica-tree-after' + 'rename-timestamp-files' 'synced' ) }