summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorchenglin130 <35245387+chenglin130@users.noreply.github.com>2021-02-12 00:01:54 +0800
committerGitHub <noreply@github.com>2021-02-11 17:01:54 +0100
commit6fad53370c93023be3ab945fbf8eb4154b800995 (patch)
tree07578bec9dddf55522a701596581c2cb50011a73 /xlators
parent796ad4c4a10e03648499e4aedb9337e26706f505 (diff)
downloadglusterfs-6fad53370c93023be3ab945fbf8eb4154b800995.tar.gz
glusterfs-6fad53370c93023be3ab945fbf8eb4154b800995.tar.xz
glusterfs-6fad53370c93023be3ab945fbf8eb4154b800995.zip
mount: optimize parameter backup-volfile-servers (#2043)
Optimize parameter backup-volfile-servers to support IPv6 address. Fixes: #2042 Signed-off-by: Cheng Lin <cheng.lin130@zte.com.cn>
Diffstat (limited to 'xlators')
-rwxr-xr-xxlators/mount/fuse/utils/mount.glusterfs.in25
-rwxr-xr-xxlators/mount/fuse/utils/mount_glusterfs.in25
2 files changed, 48 insertions, 2 deletions
diff --git a/xlators/mount/fuse/utils/mount.glusterfs.in b/xlators/mount/fuse/utils/mount.glusterfs.in
index ac4d94cb74..531a7c1649 100755
--- a/xlators/mount/fuse/utils/mount.glusterfs.in
+++ b/xlators/mount/fuse/utils/mount.glusterfs.in
@@ -75,7 +75,23 @@ parse_backup_volfile_servers ()
local servers=""
local new_servers=""
- servers=$(echo ${server_list} | sed 's/\:/ /g')
+ servers=$(echo ${server_list} | \
+ sed 's/./& /g' | \
+ awk 'BEGIN{sk=0;sep=0;err=0}{\
+ for(i=1;i<=NF;i++){\
+ if((sk!=0)&&(sk!=1)){err=1;break;}\
+ if(sk && $i==":"){sep++;}\
+ if($i=="["){sk++;sep=0;continue;}\
+ if($i=="]"){sk--;if(sep){continue;}else{err=1;break;}}\
+ if(sk){printf $i;}else{if($i==":")printf " ";else printf $i;}}}\
+ END{if(sk!=0 || err){printf " SyntaxError";}else{printf " SyntaxOK";}}')
+
+ servers=$(echo $servers)
+ if [ "$servers" == "SyntaxOK" ]; then
+ echo ""
+ return
+ fi
+
for server in ${servers}; do
is_valid_hostname ${server}
if [ $? -eq 1 ]; then
@@ -338,6 +354,13 @@ start_glusterfs ()
if [ -n "$backup_volfile_servers" ]; then
backup_servers=$(parse_backup_volfile_servers ${backup_volfile_servers})
+ syntax_status=$(echo ${backup_servers##*' '})
+ if [ "$syntax_status" == "SyntaxError" ]; then
+ warn "ERROR: Invalid backup-volfile-servers specified.. exiting"
+ exit 1
+ fi
+ backup_servers=$(echo ${backup_servers%' '*})
+
for i in $(echo ${backup_servers}); do
cmd_line=$(echo "$cmd_line --volfile-server=$i");
done
diff --git a/xlators/mount/fuse/utils/mount_glusterfs.in b/xlators/mount/fuse/utils/mount_glusterfs.in
index 3a5feb606d..58c00e8c93 100755
--- a/xlators/mount/fuse/utils/mount_glusterfs.in
+++ b/xlators/mount/fuse/utils/mount_glusterfs.in
@@ -67,7 +67,23 @@ parse_backup_volfile_servers ()
local servers=""
local new_servers=""
- servers=$(echo ${server_list} | sed 's/\:/ /g')
+ servers=$(echo ${server_list} | \
+ sed 's/./& /g' | \
+ awk 'BEGIN{sk=0;sep=0;err=0}{\
+ for(i=1;i<=NF;i++){\
+ if((sk!=0)&&(sk!=1)){err=1;break;}\
+ if(sk && $i==":"){sep++;}\
+ if($i=="["){sk++;sep=0;continue;}\
+ if($i=="]"){sk--;if(sep){continue;}else{err=1;break;}}\
+ if(sk){printf $i;}else{if($i==":")printf " ";else printf $i;}}}\
+ END{if(sk!=0 || err){printf " SyntaxError";}else{printf " SyntaxOK";}}')
+
+ servers=$(echo $servers)
+ if [ "$servers" == "SyntaxOK" ]; then
+ echo ""
+ return
+ fi
+
for server in ${servers}; do
is_valid_hostname ${server}
if [ $? -eq 1 ]; then
@@ -267,6 +283,13 @@ start_glusterfs ()
if [ -n "$backup_volfile_servers" ]; then
backup_servers=$(parse_backup_volfile_servers ${backup_volfile_servers})
+ syntax_status=$(echo ${backup_servers##*' '})
+ if [ "$syntax_status" == "SyntaxError" ]; then
+ warn "ERROR: Invalid backup-volfile-servers specified.. exiting"
+ exit 1
+ fi
+ backup_servers=$(echo ${backup_servers%' '*})
+
for i in $(echo ${backup_servers}); do
cmd_line=$(echo "$cmd_line --volfile-server=$i");
done