Merge "Fix pid file location to avoid I->J changes that break metadata"

This commit is contained in:
Jenkins 2014-10-02 03:26:58 +00:00 committed by Gerrit Code Review
commit d3d0460a8d
2 changed files with 15 additions and 17 deletions

View File

@ -14,9 +14,9 @@
# under the License. # under the License.
import fcntl import fcntl
import glob
import os import os
import shlex import shlex
import shutil
import socket import socket
import struct import struct
import tempfile import tempfile
@ -134,19 +134,19 @@ def find_child_pids(pid):
return [x.strip() for x in raw_pids.split('\n') if x.strip()] return [x.strip() for x in raw_pids.split('\n') if x.strip()]
def _get_conf_dir(cfg_root, uuid, ensure_conf_dir): def _get_conf_base(cfg_root, uuid, ensure_conf_dir):
confs_dir = os.path.abspath(os.path.normpath(cfg_root)) conf_dir = os.path.abspath(os.path.normpath(cfg_root))
conf_dir = os.path.join(confs_dir, uuid) conf_base = os.path.join(conf_dir, uuid)
if ensure_conf_dir: if ensure_conf_dir:
if not os.path.isdir(conf_dir): if not os.path.isdir(conf_dir):
os.makedirs(conf_dir, 0o755) 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): 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.""" """Returns the file name for a given kind of config file."""
conf_dir = _get_conf_dir(cfg_root, uuid, ensure_conf_dir) conf_base = _get_conf_base(cfg_root, uuid, ensure_conf_dir)
return os.path.join(conf_dir, cfg_file) return "%s.%s" % (conf_base, cfg_file)
def get_value_from_conf_file(cfg_root, uuid, cfg_file, converter=None): 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): def remove_conf_files(cfg_root, uuid):
conf_dir = _get_conf_dir(cfg_root, uuid, False) conf_base = _get_conf_base(cfg_root, uuid, False)
shutil.rmtree(conf_dir, ignore_errors=True) for file_path in glob.iglob("%s.*" % conf_base):
os.unlink(file_path)
def remove_conf_file(cfg_root, uuid, cfg_file): 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) conf_file = get_conf_file_name(cfg_root, uuid, cfg_file)
if os.path.exists(conf_file): if os.path.exists(conf_file):
os.unlink(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)

View File

@ -123,7 +123,7 @@ class TestProcessManager(base.BaseTestCase):
isdir.return_value = True isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid') manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True) 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): def test_get_pid_file_name_not_existing(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir: with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
@ -131,15 +131,15 @@ class TestProcessManager(base.BaseTestCase):
isdir.return_value = False isdir.return_value = False
manager = ep.ProcessManager(self.conf, 'uuid') manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=True) retval = manager.get_pid_file_name(ensure_pids_dir=True)
self.assertEqual(retval, '/var/path/uuid/pid') self.assertEqual(retval, '/var/path/uuid.pid')
makedirs.assert_called_once_with('/var/path/uuid', 0o755) makedirs.assert_called_once_with('/var/path', 0o755)
def test_get_pid_file_name_default(self): def test_get_pid_file_name_default(self):
with mock.patch.object(ep.utils.os.path, 'isdir') as isdir: with mock.patch.object(ep.utils.os.path, 'isdir') as isdir:
isdir.return_value = True isdir.return_value = True
manager = ep.ProcessManager(self.conf, 'uuid') manager = ep.ProcessManager(self.conf, 'uuid')
retval = manager.get_pid_file_name(ensure_pids_dir=False) 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) self.assertFalse(isdir.called)
def test_pid(self): def test_pid(self):