From bf7013f0ea4ce1102484d64bb8439d193c0cee84 Mon Sep 17 00:00:00 2001 From: Likitha Shetty Date: Thu, 20 Mar 2014 11:29:57 +0530 Subject: [PATCH] CLOUDSTACK-8111. NFS secondary storage repetitively mounted on CS server with ESXi hypervisors. Fix cleanup of NFS mounts on management server during server starup by correcting how mount points are listed for a management server. (cherry picked from commit 647532376fc090f75e6fa0ad66ee36241084dec9) Signed-off-by: Rohit Yadav --- core/src/com/cloud/storage/JavaStorageLayer.java | 14 ++++++++++++++ core/src/com/cloud/storage/StorageLayer.java | 3 +++ .../vmware/manager/VmwareManagerImpl.java | 4 ++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/src/com/cloud/storage/JavaStorageLayer.java b/core/src/com/cloud/storage/JavaStorageLayer.java index 6b61ad058e4..2e5544c8c19 100644 --- a/core/src/com/cloud/storage/JavaStorageLayer.java +++ b/core/src/com/cloud/storage/JavaStorageLayer.java @@ -142,6 +142,20 @@ public class JavaStorageLayer implements StorageLayer { return paths; } + @Override + public List listMountPointsByMsHost(String path, long msHostId) { + List mountPaths = new ArrayList(); + File[] files = new File(path).listFiles(); + if (files == null) { + return mountPaths; + } + for (File file : files) { + if (file.getName().startsWith(String.valueOf(msHostId) + ".")) + mountPaths.add(file.getAbsolutePath()); + } + return mountPaths; + } + @Override public boolean mkdir(String path) { synchronized (path.intern()) { diff --git a/core/src/com/cloud/storage/StorageLayer.java b/core/src/com/cloud/storage/StorageLayer.java index 8daa392ef9e..8421aeb1285 100644 --- a/core/src/com/cloud/storage/StorageLayer.java +++ b/core/src/com/cloud/storage/StorageLayer.java @@ -21,6 +21,7 @@ package com.cloud.storage; import java.io.File; import java.io.IOException; +import java.util.List; import com.cloud.utils.component.Manager; @@ -149,4 +150,6 @@ public interface StorageLayer extends Manager { boolean setWorldReadableAndWriteable(File file); boolean deleteDir(String dir); + + List listMountPointsByMsHost(String path, long msHostId); } diff --git a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java index 0e67a85cd30..f6205d5e8b2 100755 --- a/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java +++ b/plugins/hypervisors/vmware/src/com/cloud/hypervisor/vmware/manager/VmwareManagerImpl.java @@ -696,8 +696,8 @@ public class VmwareManagerImpl extends ManagerBase implements VmwareManager, Vmw long mshostId = ManagementServerNode.getManagementServerId(); // cleanup left-over NFS mounts from previous session - String[] mounts = _storage.listFiles(parent + File.separator + String.valueOf(mshostId) + ".*"); - if (mounts != null && mounts.length > 0) { + List mounts = _storage.listMountPointsByMsHost(parent, mshostId); + if (mounts != null && !mounts.isEmpty()) { for (String mountPoint : mounts) { s_logger.info("umount NFS mount from previous session: " + mountPoint);