formatting and naming cleanup

This commit is contained in:
Andy Smith
2010-12-09 16:05:13 -08:00
parent 3ada5f6828
commit 7758e2af3e
24 changed files with 34 additions and 198 deletions

View File

@@ -17,9 +17,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
"""
Nova API daemon. """Starter script for Nova API."""
"""
import os import os
import sys import sys
@@ -35,7 +34,6 @@ if os.path.exists(os.path.join(possible_topdir, 'nova', '__init__.py')):
from nova import api from nova import api
from nova import flags from nova import flags
from nova import utils from nova import utils
from nova import server
from nova import wsgi from nova import wsgi
FLAGS = flags.FLAGS FLAGS = flags.FLAGS

View File

@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """Combined starter script for Nova services."""
Twistd daemon for the nova compute nodes.
"""
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """Starter script for Nova Compute."""
Twistd daemon for the nova compute nodes.
"""
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """Starter script for Nova Network."""
Twistd daemon for the nova compute nodes.
"""
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """ Starter script for Nova Scheduler."""
Twistd daemon for the nova scheduler nodes.
"""
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@@ -17,9 +17,7 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
""" """Starter script for Nova Volume."""
Twistd daemon for the nova volume nodes.
"""
import eventlet import eventlet
eventlet.monkey_patch() eventlet.monkey_patch()

View File

@@ -159,12 +159,11 @@ class StrWrapper(object):
return str(val) return str(val)
raise KeyError(name) raise KeyError(name)
FLAGS = FlagValues() FLAGS = FlagValues()
gflags.FLAGS = FLAGS gflags.FLAGS = FLAGS
gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS) gflags.DEFINE_flag(gflags.HelpFlag(), FLAGS)
gflags.FLAGS = FLAGS
def _wrapper(func): def _wrapper(func):
def _wrapped(*args, **kw): def _wrapped(*args, **kw):
@@ -187,6 +186,7 @@ DEFINE_multistring = _wrapper(gflags.DEFINE_multistring)
DEFINE_multi_int = _wrapper(gflags.DEFINE_multi_int) DEFINE_multi_int = _wrapper(gflags.DEFINE_multi_int)
DEFINE_flag = _wrapper(gflags.DEFINE_flag) DEFINE_flag = _wrapper(gflags.DEFINE_flag)
HelpFlag = gflags.HelpFlag HelpFlag = gflags.HelpFlag
HelpshortFlag = gflags.HelpshortFlag HelpshortFlag = gflags.HelpshortFlag
HelpXMLFlag = gflags.HelpXMLFlag HelpXMLFlag = gflags.HelpXMLFlag

View File

@@ -309,7 +309,6 @@ def call(context, topic, msg):
class WaitMessage(object): class WaitMessage(object):
def __call__(self, data, message): def __call__(self, data, message):
LOG.debug('data %s, msg %s', data, message)
"""Acks message and sets result.""" """Acks message and sets result."""
message.ack() message.ack()
if data['failure']: if data['failure']:
@@ -332,6 +331,10 @@ def call(context, topic, msg):
except StopIteration: except StopIteration:
pass pass
consumer.close() consumer.close()
# NOTE(termie): this is a little bit of a change from the original
# twisted-based code where returning a Failure
# instance from a deferred call is very similar to
# raising an exception
if isinstance(wait_msg.result, Exception): if isinstance(wait_msg.result, Exception):
raise wait_msg.result raise wait_msg.result
return wait_msg.result return wait_msg.result

View File

@@ -1,151 +0,0 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
Base functionality for nova daemons - gradually being replaced with twistd.py.
"""
import daemon
from daemon import pidlockfile
import logging
import logging.handlers
import os
import signal
import sys
import time
from nova import flags
FLAGS = flags.FLAGS
flags.DEFINE_bool('daemonize', False, 'daemonize this process')
# NOTE(termie): right now I am defaulting to using syslog when we daemonize
# it may be better to do something else -shrug-
# NOTE(Devin): I think we should let each process have its own log file
# and put it in /var/logs/nova/(appname).log
# This makes debugging much easier and cuts down on sys log
# clutter.
flags.DEFINE_bool('use_syslog', True, 'output to syslog when daemonizing')
flags.DEFINE_string('logfile', None, 'log file to output to')
flags.DEFINE_string('logdir', None, 'directory to keep log files in '
'(will be prepended to $logfile)')
flags.DEFINE_string('pidfile', None, 'pid file to output to')
flags.DEFINE_string('working_directory', './', 'working directory...')
flags.DEFINE_integer('uid', os.getuid(), 'uid under which to run')
flags.DEFINE_integer('gid', os.getgid(), 'gid under which to run')
def stop(pidfile):
"""
Stop the daemon
"""
# Get the pid from the pidfile
try:
pid = int(open(pidfile, 'r').read().strip())
except IOError:
message = "pidfile %s does not exist. Daemon not running?\n"
sys.stderr.write(message % pidfile)
return
# Try killing the daemon process
try:
while 1:
os.kill(pid, signal.SIGTERM)
time.sleep(0.1)
except OSError, err:
err = str(err)
if err.find("No such process") > 0:
if os.path.exists(pidfile):
os.remove(pidfile)
else:
print str(err)
sys.exit(1)
def serve(name, main):
"""Controller for server"""
argv = FLAGS(sys.argv)
if not FLAGS.pidfile:
FLAGS.pidfile = '%s.pid' % name
logging.debug("Full set of FLAGS: \n\n\n")
for flag in FLAGS:
logging.debug("%s : %s", flag, FLAGS.get(flag, None))
action = 'start'
if len(argv) > 1:
action = argv.pop()
if action == 'stop':
stop(FLAGS.pidfile)
sys.exit()
elif action == 'restart':
stop(FLAGS.pidfile)
elif action == 'start':
pass
else:
print 'usage: %s [options] [start|stop|restart]' % argv[0]
sys.exit(1)
daemonize(argv, name, main)
def daemonize(args, name, main):
"""Does the work of daemonizing the process"""
logging.getLogger('amqplib').setLevel(logging.WARN)
files_to_keep = []
if FLAGS.daemonize:
logger = logging.getLogger()
formatter = logging.Formatter(
name + '(%(name)s): %(levelname)s %(message)s')
if FLAGS.use_syslog and not FLAGS.logfile:
syslog = logging.handlers.SysLogHandler(address='/dev/log')
syslog.setFormatter(formatter)
logger.addHandler(syslog)
files_to_keep.append(syslog.socket)
else:
if not FLAGS.logfile:
FLAGS.logfile = '%s.log' % name
if FLAGS.logdir:
FLAGS.logfile = os.path.join(FLAGS.logdir, FLAGS.logfile)
logfile = logging.FileHandler(FLAGS.logfile)
logfile.setFormatter(formatter)
logger.addHandler(logfile)
files_to_keep.append(logfile.stream)
stdin, stdout, stderr = None, None, None
else:
stdin, stdout, stderr = sys.stdin, sys.stdout, sys.stderr
if FLAGS.verbose:
logging.getLogger().setLevel(logging.DEBUG)
else:
logging.getLogger().setLevel(logging.WARNING)
with daemon.DaemonContext(
detach_process=FLAGS.daemonize,
working_directory=FLAGS.working_directory,
#pidfile=pidlockfile.TimeoutPIDLockFile(FLAGS.pidfile,
# acquire_timeout=1,
# threaded=False),
stdin=stdin,
stdout=stdout,
stderr=stderr,
uid=FLAGS.uid,
gid=FLAGS.gid,
files_preserve=files_to_keep):
main(args)

View File

@@ -35,7 +35,7 @@ class Context(object):
pass pass
class AccessTestCase(test.TrialTestCase): class AccessTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(AccessTestCase, self).setUp() super(AccessTestCase, self).setUp()
um = manager.AuthManager() um = manager.AuthManager()

View File

@@ -16,13 +16,10 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
#import logging import logging
from M2Crypto import X509 from M2Crypto import X509
import unittest import unittest
import eventlet
logging = eventlet.import_patched('logging')
from nova import crypto from nova import crypto
from nova import flags from nova import flags
from nova import test from nova import test
@@ -329,12 +326,12 @@ class AuthManagerTestCase(object):
self.assertTrue(user.is_admin()) self.assertTrue(user.is_admin())
class AuthManagerLdapTestCase(AuthManagerTestCase, test.TrialTestCase): class AuthManagerLdapTestCase(AuthManagerTestCase, test.TestCase):
auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver' auth_driver = 'nova.auth.ldapdriver.FakeLdapDriver'
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
AuthManagerTestCase.__init__(self) AuthManagerTestCase.__init__(self)
test.TrialTestCase.__init__(self, *args, **kwargs) test.TestCase.__init__(self, *args, **kwargs)
import nova.auth.fakeldap as fakeldap import nova.auth.fakeldap as fakeldap
FLAGS.redis_db = 8 FLAGS.redis_db = 8
if FLAGS.flush_db: if FLAGS.flush_db:
@@ -346,7 +343,7 @@ class AuthManagerLdapTestCase(AuthManagerTestCase, test.TrialTestCase):
self.skip = True self.skip = True
class AuthManagerDbTestCase(AuthManagerTestCase, test.TrialTestCase): class AuthManagerDbTestCase(AuthManagerTestCase, test.TestCase):
auth_driver = 'nova.auth.dbdriver.DbDriver' auth_driver = 'nova.auth.dbdriver.DbDriver'

View File

@@ -51,7 +51,7 @@ IMAGES_PATH = os.path.join(OSS_TEMPDIR, 'images')
os.makedirs(IMAGES_PATH) os.makedirs(IMAGES_PATH)
class CloudTestCase(test.TrialTestCase): class CloudTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(CloudTestCase, self).setUp() super(CloudTestCase, self).setUp()
self.flags(connection_type='fake', images_path=IMAGES_PATH) self.flags(connection_type='fake', images_path=IMAGES_PATH)

View File

@@ -35,7 +35,7 @@ from nova.compute import api as compute_api
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
class ComputeTestCase(test.TrialTestCase): class ComputeTestCase(test.TestCase):
"""Test case for compute""" """Test case for compute"""
def setUp(self): def setUp(self):
logging.getLogger().setLevel(logging.DEBUG) logging.getLogger().setLevel(logging.DEBUG)

View File

@@ -24,7 +24,7 @@ FLAGS = flags.FLAGS
flags.DEFINE_string('flags_unittest', 'foo', 'for testing purposes only') flags.DEFINE_string('flags_unittest', 'foo', 'for testing purposes only')
class FlagsTestCase(test.TrialTestCase): class FlagsTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(FlagsTestCase, self).setUp() super(FlagsTestCase, self).setUp()

View File

@@ -20,7 +20,7 @@ from nova import test
from nova.utils import parse_mailmap, str_dict_replace from nova.utils import parse_mailmap, str_dict_replace
class ProjectTestCase(test.TrialTestCase): class ProjectTestCase(test.TestCase):
def test_authors_up_to_date(self): def test_authors_up_to_date(self):
if os.path.exists('../.bzr'): if os.path.exists('../.bzr'):
contributors = set() contributors = set()

View File

@@ -33,7 +33,7 @@ from nova.auth import manager
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
class NetworkTestCase(test.TrialTestCase): class NetworkTestCase(test.TestCase):
"""Test cases for network code""" """Test cases for network code"""
def setUp(self): def setUp(self):
super(NetworkTestCase, self).setUp() super(NetworkTestCase, self).setUp()

View File

@@ -54,7 +54,7 @@ os.makedirs(os.path.join(OSS_TEMPDIR, 'images'))
os.makedirs(os.path.join(OSS_TEMPDIR, 'buckets')) os.makedirs(os.path.join(OSS_TEMPDIR, 'buckets'))
class ObjectStoreTestCase(test.TrialTestCase): class ObjectStoreTestCase(test.TestCase):
"""Test objectstore API directly.""" """Test objectstore API directly."""
def setUp(self): def setUp(self):
@@ -191,7 +191,7 @@ class TestSite(server.Site):
protocol = TestHTTPChannel protocol = TestHTTPChannel
class S3APITestCase(test.TrialTestCase): class S3APITestCase(test.TestCase):
"""Test objectstore through S3 API.""" """Test objectstore through S3 API."""
def setUp(self): def setUp(self):

View File

@@ -32,7 +32,7 @@ from nova.api.ec2 import cloud
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
class QuotaTestCase(test.TrialTestCase): class QuotaTestCase(test.TestCase):
def setUp(self): def setUp(self):
logging.getLogger().setLevel(logging.DEBUG) logging.getLogger().setLevel(logging.DEBUG)
super(QuotaTestCase, self).setUp() super(QuotaTestCase, self).setUp()

View File

@@ -29,7 +29,7 @@ from nova import test
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
class RpcTestCase(test.TrialTestCase): class RpcTestCase(test.TestCase):
"""Test cases for rpc""" """Test cases for rpc"""
def setUp(self): def setUp(self):
super(RpcTestCase, self).setUp() super(RpcTestCase, self).setUp()

View File

@@ -44,7 +44,7 @@ class TestDriver(driver.Scheduler):
return 'named_host' return 'named_host'
class SchedulerTestCase(test.TrialTestCase): class SchedulerTestCase(test.TestCase):
"""Test case for scheduler""" """Test case for scheduler"""
def setUp(self): def setUp(self):
super(SchedulerTestCase, self).setUp() super(SchedulerTestCase, self).setUp()
@@ -73,7 +73,7 @@ class SchedulerTestCase(test.TrialTestCase):
scheduler.named_method(ctxt, 'topic', num=7) scheduler.named_method(ctxt, 'topic', num=7)
class SimpleDriverTestCase(test.TrialTestCase): class SimpleDriverTestCase(test.TestCase):
"""Test case for simple driver""" """Test case for simple driver"""
def setUp(self): def setUp(self):
super(SimpleDriverTestCase, self).setUp() super(SimpleDriverTestCase, self).setUp()

View File

@@ -45,7 +45,7 @@ class ExtendedService(service.Service):
return 'service' return 'service'
class ServiceManagerTestCase(test.TrialTestCase): class ServiceManagerTestCase(test.TestCase):
"""Test cases for Services""" """Test cases for Services"""
def test_attribute_error_for_no_manager(self): def test_attribute_error_for_no_manager(self):
@@ -72,7 +72,7 @@ class ServiceManagerTestCase(test.TrialTestCase):
self.assertEqual(serv.test_method(), 'service') self.assertEqual(serv.test_method(), 'service')
class ServiceTestCase(test.TrialTestCase): class ServiceTestCase(test.TestCase):
"""Test cases for Services""" """Test cases for Services"""
def setUp(self): def setUp(self):

View File

@@ -30,7 +30,7 @@ FLAGS = flags.FLAGS
flags.DECLARE('instances_path', 'nova.compute.manager') flags.DECLARE('instances_path', 'nova.compute.manager')
class LibvirtConnTestCase(test.TrialTestCase): class LibvirtConnTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(LibvirtConnTestCase, self).setUp() super(LibvirtConnTestCase, self).setUp()
self.manager = manager.AuthManager() self.manager = manager.AuthManager()
@@ -123,7 +123,7 @@ class LibvirtConnTestCase(test.TrialTestCase):
self.manager.delete_user(self.user) self.manager.delete_user(self.user)
class NWFilterTestCase(test.TrialTestCase): class NWFilterTestCase(test.TestCase):
def setUp(self): def setUp(self):
super(NWFilterTestCase, self).setUp() super(NWFilterTestCase, self).setUp()

View File

@@ -31,7 +31,7 @@ from nova import utils
FLAGS = flags.FLAGS FLAGS = flags.FLAGS
class VolumeTestCase(test.TrialTestCase): class VolumeTestCase(test.TestCase):
"""Test Case for volumes.""" """Test Case for volumes."""
def setUp(self): def setUp(self):

View File

@@ -95,7 +95,6 @@ if __name__ == '__main__':
else: else:
from nova.tests.real_flags import * from nova.tests.real_flags import *
# Establish redirect for STDERR # Establish redirect for STDERR
sys.stderr.flush() sys.stderr.flush()
err = open(FLAGS.tests_stderr, 'w+', 0) err = open(FLAGS.tests_stderr, 'w+', 0)