summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2014-10-02 03:26:58 +0000
committerGerrit Code Review <review@openstack.org>2014-10-02 03:26:58 +0000
commitd3d0460a8d843077dbdeb9b46034bfe28e0ce2a4 (patch)
tree6eef0496ec0aa95a0632913f065b3f105ea74db8
parent68ea7ea0c792b923d6725e851655e51bf2fb18f2 (diff)
parent20dbbab61c1159a3dc6ef838ec65b04f7e9cf560 (diff)
downloadneutron-d3d0460a8d843077dbdeb9b46034bfe28e0ce2a4.tar.gz
Merge "Fix pid file location to avoid I->J changes that break metadata"
-rw-r--r--neutron/agent/linux/utils.py24
-rw-r--r--neutron/tests/unit/test_linux_external_process.py8
2 files changed, 15 insertions, 17 deletions
diff --git a/neutron/agent/linux/utils.py b/neutron/agent/linux/utils.py
index e0a66f843c..8243468919 100644
--- a/neutron/agent/linux/utils.py
+++ b/neutron/agent/linux/utils.py
@@ -14,9 +14,9 @@
# under the License.
import fcntl
+import glob
import os
import shlex
-import shutil
import socket
import struct
import tempfile
@@ -134,19 +134,19 @@ def find_child_pids(pid):
return [x.strip() for x in raw_pids.split('\n') if x.strip()]
-def _get_conf_dir(cfg_root, uuid, ensure_conf_dir):
- confs_dir = os.path.abspath(os.path.normpath(cfg_root))
- conf_dir = os.path.join(confs_dir, uuid)
+def _get_conf_base(cfg_root, uuid, ensure_conf_dir):
+ conf_dir = os.path.abspath(os.path.normpath(cfg_root))
+ conf_base = os.path.join(conf_dir, uuid)
if ensure_conf_dir:
if not os.path.isdir(conf_dir):
os.makedirs(conf_dir, 0o755)
- return conf_dir
+ return conf_base
def get_conf_file_name(cfg_root, uuid, cfg_file, ensure_conf_dir=False):
"""Returns the file name for a given kind of config file."""
- conf_dir = _get_conf_dir(cfg_root, uuid, ensure_conf_dir)
- return os.path.join(conf_dir, cfg_file)
+ conf_base = _get_conf_base(cfg_root, uuid, ensure_conf_dir)
+ return "%s.%s" % (conf_base, cfg_file)
def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None):
@@ -168,15 +168,13 @@ def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None):
def remove_conf_files(cfg_root, uuid):
- conf_dir = _get_conf_dir(cfg_root, uuid, False)
- shutil.rmtree(conf_dir, ignore_errors=True)
+ conf_base = _get_conf_base(cfg_root, uuid, False)
+ for file_path in glob.iglob("%s.*" % conf_base):
+ os.unlink(file_path)
def remove_conf_file(cfg_root, uuid, cfg_file):
- """Remove a config file. Remove the directory if this is the last file."""
+ """Remove a config file."""
conf_file = get_conf_file_name(cfg_root, uuid, cfg_file)
if os.path.exists(conf_file):
os.unlink(conf_file)
- conf_dir = _get_conf_dir(cfg_root, uuid, False)
- if not os.listdir(conf_dir):
- shutil.rmtree(conf_dir, ignore_errors=True)
diff --git a/neutron/tests/unit/test_linux_external_process.py b/neutron/tests/unit/test_linux_external_process.py
index 88f4bc075b..b16b681e93 100644
--- a/neutron/tests/unit/test_linux_external_process.py
+++ b/neutron/tests/unit/test_linux_external_process.py
@@ -123,7 +123,7 @@ class TestProcessManager(base.BaseTestCase):
isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True)
- self.assertEqual(retval, '/var/path/uuid/pid')
+ self.assertEqual(retval, '/var/path/uuid.pid')
def test_get_pid_file_name_not_existing(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
@@ -131,15 +131,15 @@ class TestProcessManager(base.BaseTestCase):
isdir.return_value = False
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True)
- self.assertEqual(retval, '/var/path/uuid/pid')
- makedirs.assert_called_once_with('/var/path/uuid', 0o755)
+ self.assertEqual(retval, '/var/path/uuid.pid')
+ makedirs.assert_called_once_with('/var/path', 0o755)
def test_get_pid_file_name_default(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=False)
- self.assertEqual(retval, '/var/path/uuid/pid')
+ self.assertEqual(retval, '/var/path/uuid.pid')
self.assertFalse(isdir.called)
def test_pid(self):