summaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--doc/mount.glusterfs.83
-rwxr-xr-xxlators/mount/fuse/utils/mount.glusterfs.in25
-rwxr-xr-xxlators/mount/fuse/utils/mount_glusterfs.in25
3 files changed, 51 insertions, 2 deletions
diff --git a/doc/mount.glusterfs.8 b/doc/mount.glusterfs.8
index ce16e9e40b..c261a59b30 100644
--- a/doc/mount.glusterfs.8
+++ b/doc/mount.glusterfs.8
@@ -104,9 +104,12 @@ Set the subdirectory mount option [default: NULL, ie, no subdirectory mount]
.TP
\fBbackup\-volfile\-servers=\fRSERVERLIST
Provide list of backup volfile servers in the following format [default: None]
+If use IPv6 address in SERVERLIST, it is required to use '[' and ']' to surround IPv6 address.
\fB$ mount \-t glusterfs \-obackup\-volfile\-servers=<server2>:\fR
\fB <server3>:...:<serverN> <server1>:/<volname> <mount_point>\fR
+\fB$ mount \-t glusterfs \-obackup\-volfile\-servers=<[ipv6_addr2]>:\fR
+\fB <[ipv6_addr3]>:...:<[ipv6_addrN]> <ipv6_addr1>:/<volname> <mount_point>\fR
.TP
.TP
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