10 Star 0 Fork 13

src-openEuler / KubeOS

 / 详情

kbimg.sh在并发场景下会做多余的umount和rm清理动作

已完成
缺陷
创建于  
2022-08-19 11:05

【问题复现步骤】
1、后台执行bash kbimg.sh create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '''$1$root$n2NycQKcfNnARaz/W29SN0'''
2、前台多次下发bash kbimg.sh create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '''$1$root$n2NycQKcfNnARaz/W29SN0'''

【预期结果】
步骤2中下发的kbimg.sh全部因为防重入机制而失败,且步骤1中的后台kbimg.sh进程执行成功。

【实际结果】
步骤1中的kbimg.sh正在运行中:

[root@openEuler ~]# ps aux | grep kube
root       16628 12.1  2.7 354676 96728 pts/0    S+   10:49   0:07 /usr/bin/python3 /usr/bin/yum -y --installroot=/opt/kubeOS/scripts/rootfs install --nogpgcheck --setopt install_weak_deps=False kernel passwd grub2-efi grub2-tools dhcp NetworkManager openssh-server docker kubernetes-kubeadm kubernetes-kubelet containernetworking-plugins socat conntrack-tools ebtables ethtool rsyslog vi net-tools hwinfo dracut coreutils gawk parted dosfstools grub2 grub2-efi-x64-modules grub2-pc-modules
root       16712  0.0  0.0  22112  2328 pts/2    R+   10:50   0:00 grep --color=auto kube
[root@openEuler ~]# cd /opt/kubeOS/scripts/
[root@openEuler scripts]# df -h | grep kube
[root@openEuler scripts]# df -ha | grep kube
none                                     0     0     0    - /opt/kubeOS/scripts/rootfs/proc
devtmpfs                              4.0M     0  4.0M   0% /opt/kubeOS/scripts/rootfs/dev
devpts                                   0     0     0    - /opt/kubeOS/scripts/rootfs/dev/pts
none                                     -     -     -    - /opt/kubeOS/scripts/rootfs/sys

步骤2下发第二个kbimg.sh脚本,虽然获取锁文件失败退出,但是在退出前会umount /opt/kubeOS/scripts/rootfs和rm -rf ./test.lock:

[root@openEuler scripts]# bash -x kbimg.sh create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '''$1$root$n2NycQKcfNnARaz/W29SN0'''; echo $?
+ set -e
+ NAME=KubeOS
+ REPO=
+ VERSION=
+ AGENT_PATH=
+ PASSWD=
+ DOCKER_IMG=
+ LOCK=./test.lock
+ source common/globalVariables.sh
+ source common/log.sh
+ source common/utils.sh
+ source create/rootfsCreate.sh
+ source create/imageCreate.sh
+ trap clean_space EXIT
+ trap clean_img ERR
+ test_lock
+ file_lock ./test.lock
+ local lock_file=./test.lock
+ exec
+ flock -xn 10
+ clean_space
+ delete_dir /opt/kubeOS/scripts/rootfs
+ local ret=0
+ local dir=/opt/kubeOS/scripts/rootfs
+ unmount_dir /opt/kubeOS/scripts/rootfs
+ local dir=/opt/kubeOS/scripts/rootfs
+ '[' -L /opt/kubeOS/scripts/rootfs ']'
+ '[' -f /opt/kubeOS/scripts/rootfs ']'
+ '[' '!' -d /opt/kubeOS/scripts/rootfs ']'
++ readlink -e /opt/kubeOS/scripts/rootfs
+ local real_dir=/opt/kubeOS/scripts/rootfs
++ awk '{print $2}'
++ grep '^/opt/kubeOS/scripts/rootfs'
++ sort -r
+ local 'mnts=/opt/kubeOS/scripts/rootfs/sys
/opt/kubeOS/scripts/rootfs/proc
/opt/kubeOS/scripts/rootfs/dev/pts
/opt/kubeOS/scripts/rootfs/dev'
+ for m in ${mnts}
+ log_info_print 'Unmount /opt/kubeOS/scripts/rootfs/sys'
++ date '+%b %d %Y %H:%M:%S'
+ local 'logmsg=[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/sys'
+ echo '[' INFO ']' - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/sys
[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/sys
+ umount -f /opt/kubeOS/scripts/rootfs/sys
+ for m in ${mnts}
+ log_info_print 'Unmount /opt/kubeOS/scripts/rootfs/proc'
++ date '+%b %d %Y %H:%M:%S'
+ local 'logmsg=[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/proc'
+ echo '[' INFO ']' - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/proc
[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/proc
+ umount -f /opt/kubeOS/scripts/rootfs/proc
+ for m in ${mnts}
+ log_info_print 'Unmount /opt/kubeOS/scripts/rootfs/dev/pts'
++ date '+%b %d %Y %H:%M:%S'
+ local 'logmsg=[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev/pts'
+ echo '[' INFO ']' - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev/pts
[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev/pts
+ umount -f /opt/kubeOS/scripts/rootfs/dev/pts
+ for m in ${mnts}
+ log_info_print 'Unmount /opt/kubeOS/scripts/rootfs/dev'
++ date '+%b %d %Y %H:%M:%S'
+ local 'logmsg=[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev'
+ echo '[' INFO ']' - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev
[ INFO ] - Aug 19 2022 10:51:00 Unmount /opt/kubeOS/scripts/rootfs/dev
+ umount -f /opt/kubeOS/scripts/rootfs/dev
+ return 0
+ ret=0
+ '[' 0 -eq 0 ']'
+ rm -rf /opt/kubeOS/scripts/rootfs
+ return 0
+ delete_dir /opt/kubeOS/scripts/mnt
+ local ret=0
+ local dir=/opt/kubeOS/scripts/mnt
+ unmount_dir /opt/kubeOS/scripts/mnt
+ local dir=/opt/kubeOS/scripts/mnt
+ '[' -L /opt/kubeOS/scripts/mnt ']'
+ '[' -f /opt/kubeOS/scripts/mnt ']'
+ '[' '!' -d /opt/kubeOS/scripts/mnt ']'
+ return 0
+ ret=0
+ '[' 0 -eq 0 ']'
+ rm -rf /opt/kubeOS/scripts/mnt
+ return 0
+ delete_file os.tar
+ local file=os.tar
+ '[' '!' -e os.tar ']'
+ return 0
+ rm -rf ./test.lock
1
[root@openEuler scripts]# df -ha | grep kube

此时若下发第三个kbimg.sh脚本,因为test.lock已经被删除,所以不会再被file_lock拦截,而造成多个kbimg.sh并存:

[root@openEuler scripts]# bash -x kbimg.sh create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '''$1$root$n2NycQKcfNnARaz/W29SN0'''; echo $?
+ set -e
+ NAME=KubeOS
+ REPO=
+ VERSION=
+ AGENT_PATH=
+ PASSWD=
+ DOCKER_IMG=
+ LOCK=./test.lock
+ source common/globalVariables.sh
+ source common/log.sh
+ source common/utils.sh
+ source create/rootfsCreate.sh
+ source create/imageCreate.sh
+ trap clean_space EXIT
+ trap clean_img ERR
+ test_lock
+ file_lock ./test.lock
+ local lock_file=./test.lock
+ exec
+ flock -xn 10
+ '[' 0 -ne 0 ']'
+ kubeos_image_main create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '$1$root$n2NycQKcfNnARaz/W29SN0'
+ local ret=
+ local cmd=create
+ '[' 10 -eq 1 ']'
+ case $cmd in
+ shift
+ verify_create_input vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '$1$root$n2NycQKcfNnARaz/W29SN0'
+ local ret=
+ local cmd=vm-image
+ case $1 in
+ shift
...

并且步骤1中的kbimg最后会因为rootfs被卸载而失败:

[root@openEuler scripts]# bash kbimg.sh create vm-image -p /etc/yum.repos.d/euleros_9.82.201.30.repo -v X86_vm_v1 -b ../bin/os-agent -e '''$1$root$n2NycQKcfNnARaz/W29SN0'''
install package..
Unable to detect release version (use '--releasever' to specify release version)
Euler                                                                                                 9.6 MB/s | 3.4 MB     00:00    
everything                                                                                            382 kB/s |  16 MB     00:43    
EPOL                                                                                                   51 kB/s | 4.7 MB     01:35    
Errors during downloading metadata for repository 'EPOL':
  - Curl error (28): Timeout was reached for http://121.36.84.172/dailybuild/openEuler-22.09/openEuler-22.09/EPOL/main/x86_64/repodata/43052da1f5bc94b602e120f3e6f7e5896dc6035dff8aaf69289ad53c6a26a00a-filelists.xml.gz [Operation too slow. Less than 1000 bytes/sec transferred the last 30 seconds]
[Errno 2] No such file or directory: '/opt/kubeOS/scripts/rootfs/var/cache/dnf/metadata_lock.pid'
[root@openEuler scripts]# 

评论 (1)

哦那真是一级棒 创建了缺陷

Hi oh_thats_great, welcome to the openEuler Community.
I'm the Bot here serving you. You can find the instructions on how to interact with me at Here.
If you have any questions, please contact the SIG: sig-CloudNative, and any of the maintainers: @yangzhao_kl , @weibaohui , @biannm , @pixiake , @haomintsai , @Jianmin , @haozi007

openeuler-ci-bot 添加了
 
sig/sig-CloudNative
标签
哦那真是一级棒 修改了描述
哦那真是一级棒 修改了描述
哦那真是一级棒 修改了描述
哦那真是一级棒 修改了描述
liyuanr 通过src-openeuler/KubeOS Pull Request !30任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
项目
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
预计工期 (小时)
参与者(2)
5329419 openeuler ci bot 1632792936
1
https://gitee.com/src-openeuler/KubeOS.git
git@gitee.com:src-openeuler/KubeOS.git
src-openeuler
KubeOS
KubeOS

搜索帮助