Added bash 3.2 compat

pull/2/head
deajan 11 years ago
parent 7636ca0e29
commit a9ec6fd50a

@ -1,13 +1,15 @@
KNOWN BUGS
----------
KNOWN ISSUES
------------
- Cannot write pidlock on remote slave with SUDO_EXEC=yes but insufficient rights (sudo does not work for command echo)
- If master and remote slave aren't the same distros and rsync binary isn't in the same path, execution may fail (RSYNC_PATH should be configurable)
- Possible non delete status for a file with space in name on master replica from slave remote replica
RECENT CHANGES
--------------
24 Jul. 2013: beta milestone
- Revamped a bit code to add bash 3.2 compatibility
- 24 Jul. 2013: beta milestone
- Fixed some bad error handling in CheckMasterSlaveDirs and LockDirectories
- Added support for spaces in sync dirs and exclude lists
- Fixed false exit code if no remote slave lock present

@ -2,8 +2,8 @@
###### Osync - Rsync based two way sync engine with fault tolerance
###### (L) 2013 by Orsiris "Ozy" de Jong (www.netpower.fr)
OSYNC_VERSION=0.95
OSYNC_BUILD=2407201304
OSYNC_VERSION=0.96
OSYNC_BUILD=3107201301
DEBUG=no
SCRIPT_PID=$$
@ -975,61 +975,133 @@ function Sync
resume_sync=none
fi
## In this case statement, ;& means executing every command below regardless of conditions
case $resume_sync in
none|noresume)
;&
master-replica-tree.fail)
################################################################################################################################################# Actual sync begins here
## This replaces the case statement below because ;& operator is not supported in bash 3.2... Code is more messy than case :(
if [ "$resume_sync" == "none" ] || [ "$resume_sync" == "noresume" ]
then
master_tree_current
;&
master-replica-tree.success|slave-replica-tree.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "master-replica-tree.success" ] || [ "$resume_sync" == "slave-replica-tree.fail" ]
then
slave_tree_current
;&
slave-replica-tree.success|master-replica-deleted-list.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "slave-replica-tree.success" ] || [ "$resume_sync" == "master-replica-deleted-list.fail" ]
then
master_delete_list
;&
master-replica-deleted-list.success|slave-replica-deleted-list.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "master-replica-deleted-list.success" ] || [ "$resume_sync" == "slave-replica-deleted-list.fail" ]
then
slave_delete_list
;&
slave-replica-deleted-list.success|update-master-replica.fail|update-slave-replica.fail)
if [ "$CONFLICT_PREVALANCE" != "master" ]
then
case $resume_sync in
none)
;&
slave-replica-deleted-list.success|update-master-replica.fail)
sync_update_master
;&
update-master-replica.success|update-slave-replica.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "slave-replica-deleted-list.success" ] || [ "$resume_sync" == "update-master-replica.fail" ] || [ "$resume_sync" == "update-slave-replica.fail" ]
then
if [ "$CONFLICT_PREVALANCE" != "master" ]
then
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "slave-replica-deleted-list.success" ] || [ "$resume_sync" == "update-master-replica.fail" ]
then
sync_update_master
;;
esac
else
case $resume_sync in
none)
;&
slave-replica-deleted-list.success|update-slave-replica.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "update-master-replica.success" ] || [ "$resume_sync" == "update-slave-replica.fail" ]
then
sync_update_slave
;&
update-slave-replica.success|update-master-replica.fail)
sync_update_master
;;
esac
fi
;&
update-slave-replica.success|update-master-replica.success|delete-propagation-slave.fail)
resume_sync="resumed"
fi
else
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "slave-replica-deleted-list.success" ] || [ "$resume_sync" == "update-slave-replica.fail" ]
then
sync_update_slave
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "update-slave-replica.success" ] || [ "$resume_sync" == "update-master-replica.fail" ]
then
sync_update_master
resume_sync="resumed"
fi
fi
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "update-slave-replica.success" ] || [ "$resume_sync" == "update-master-replica.success" ] || [ "$resume_sync" == "delete-propagation-slave.fail" ]
then
delete_on_slave
;&
delete-propagation-slave.success|delete-propagation-master.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "delete-propagation-slave.success" ] || [ "$resume_sync" == "delete-propagation-master.fail" ]
then
delete_on_master
;&
delete-propagation-master.success|master-replica-tree-after.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "delete-propagation-master.success" ] || [ "$resume_sync" == "master-replica-tree-after.fail" ]
then
master_tree_after
;&
master-replica-tree-after.success|slave-replica-tree-after.fail)
resume_sync="resumed"
fi
if [ "$resume_sync" == "resumed" ] || [ "$resume_sync" == "master-replica-tree-after.success" ] || [ "$resume_sync" == "slave-replica-tree-after.fail" ]
then
slave_tree_after
;;
esac
resume_sync="resumed"
fi
# ## In this case statement, ;& means executing every command below regardless of conditions. Only works with bash v4
# case $resume_sync in
# none|noresume)
# ;&
# master-replica-tree.fail)
# master_tree_current
# ;&
# master-replica-tree.success|slave-replica-tree.fail)
# slave_tree_current
# ;&
# slave-replica-tree.success|master-replica-deleted-list.fail)
# master_delete_list
# ;&
# master-replica-deleted-list.success|slave-replica-deleted-list.fail)
# slave_delete_list
# ;&
# slave-replica-deleted-list.success|update-master-replica.fail|update-slave-replica.fail)
# if [ "$CONFLICT_PREVALANCE" != "master" ]
# then
# case $resume_sync in
# none)
# ;&
# slave-replica-deleted-list.success|update-master-replica.fail)
# sync_update_master
# ;&
# update-master-replica.success|update-slave-replica.fail)
# sync_update_master
# ;;
# esac
# else
# case $resume_sync in
# none)
# ;&
# slave-replica-deleted-list.success|update-slave-replica.fail)
# sync_update_slave
# ;&
# update-slave-replica.success|update-master-replica.fail)
# sync_update_master
# ;;
# esac
# fi
# ;&
# update-slave-replica.success|update-master-replica.success|delete-propagation-slave.fail)
# delete_on_slave
# ;&
# delete-propagation-slave.success|delete-propagation-master.fail)
# delete_on_master
# ;&
# delete-propagation-master.success|master-replica-tree-after.fail)
# master_tree_after
# ;&
# master-replica-tree-after.success|slave-replica-tree-after.fail)
# slave_tree_after
# ;;
# esac
Log "Finished synchronization task."
echo "sync.success" > "$MASTER_STATE_DIR/last-action"
@ -1213,7 +1285,7 @@ function Usage
echo "--dry: will run osync without actuallyv doing anything; just testing"
echo "--silent: will run osync without any output to stdout, usefull for cron jobs"
echo "--verbose: adds command outputs"
ecoh "--force-unlock: will override any existing active or dead locks on master and slave replica"
echo "--force-unlock: will override any existing active or dead locks on master and slave replica"
exit 128
}

Loading…
Cancel
Save