kvm: fix qemu hook race condition (#3405)

This fixes the qemu hooks `mkdir` race condition which can happen when
too many VMs may launch on a KVM host executing the hooks script that
tries to `mkdir` for the custom directory. On exception (multiple scripts
trying to mkdir), the VM stops.

The custom directory need not be created if it does not exist, instead
the custom hooks should only execute when there is a custom directory.

Feature documentation:
http://docs.cloudstack.apache.org/en/4.11.2.0/adminguide/hosts.html#kvm-libvirt-hook-script-include

Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
Rohit Yadav 2019-06-14 12:55:04 +05:30 committed by GitHub
parent a3e5664b53
commit 425ad495b1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -78,7 +78,9 @@ def handleMigrateBegin():
def executeCustomScripts(sysArgs):
createDirectoryIfNotExists(customDir, customDirPermissions)
if not os.path.exists(customDir) or not os.path.isdir(customDir):
return
scripts = getCustomScriptsFromDirectory()
for scriptName in scripts:
@ -127,12 +129,6 @@ def getCustomScriptsFromDirectory():
os.listdir(customDir)), key=lambda fileName: substringAfter(fileName, '_'))
def createDirectoryIfNotExists(dir, permissions):
if not os.path.exists(dir):
logger.info('Directory %s does not exist; creating it.' % dir)
os.makedirs(dir, permissions)
def substringAfter(s, delimiter):
return s.partition(delimiter)[2]