diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2010-07-16 19:57:27 +0000 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2010-07-16 19:57:27 +0000 |
| commit | ef6d3f3be8e83cbfe417ba5fe221464acfba5588 (patch) | |
| tree | ebf0f9c5ab953327bcb358a12c4e7e2acd84f74b | |
| parent | 1047fed400501e31a3c938bf56bb9aea683c0000 (diff) | |
| parent | ae9e4e81d992fb81c01acd2dfcb1cb3d32956041 (diff) | |
| download | nova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.tar.gz nova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.tar.xz nova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.zip | |
merge with singleton pool
60 files changed, 148 insertions, 253 deletions
@@ -10,16 +10,12 @@ Imports - thou shalt not import objects, only modules - thou shalt not import more than one module per line - thou shalt not make relative imports -- thou shalt "from nova import vendor" before importing third party code - thou shalt organize your imports according to the following template :: # vim: tabstop=4 shiftwidth=4 softtabstop=4 {{stdlib imports in human alphabetical order}} \n - from nova import vendor - {{vendor imports in human alphabetical order}} - \n {{nova imports in human alphabetical order}} \n \n diff --git a/bin/dhcpleasor.py b/bin/dhcpleasor.py index 31f4433fb..07ff325f1 100755 --- a/bin/dhcpleasor.py +++ b/bin/dhcpleasor.py @@ -31,11 +31,10 @@ sys.path.append(os.path.abspath(os.path.join(__file__, "../../"))) logging.debug(sys.path) import getopt from os import environ -from nova.compute import linux_net -from nova.compute import network from nova import rpc - from nova import flags +from nova.compute import linux_net +from nova.compute import network FLAGS = flags.FLAGS diff --git a/bin/nova-api b/bin/nova-api index 7bc9166b8..26f5dbc87 100755 --- a/bin/nova-api +++ b/bin/nova-api @@ -22,8 +22,6 @@ Tornado daemon for the main API endpoint. """ import logging - -from nova import vendor from tornado import httpserver from tornado import ioloop diff --git a/bin/nova-compute b/bin/nova-compute index 803887039..5635efbaf 100755 --- a/bin/nova-compute +++ b/bin/nova-compute @@ -33,7 +33,7 @@ NOVA_PATH = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'nova') if os.path.exists(NOVA_PATH): sys.path.insert(0, os.path.dirname(NOVA_PATH)) -from nova import vendor + from carrot import connection from carrot import messaging from twisted.internet import task diff --git a/bin/nova-import-canonical-imagestore b/bin/nova-import-canonical-imagestore index 82daf61ce..2e79f09b7 100755 --- a/bin/nova-import-canonical-imagestore +++ b/bin/nova-import-canonical-imagestore @@ -29,9 +29,9 @@ import subprocess import sys import urllib2 -from nova.objectstore import image from nova import flags from nova import utils +from nova.objectstore import image FLAGS = flags.FLAGS diff --git a/bin/nova-instancemonitor b/bin/nova-instancemonitor index d3f0ae221..b195089b7 100755 --- a/bin/nova-instancemonitor +++ b/bin/nova-instancemonitor @@ -22,8 +22,6 @@ """ import logging - -from nova import vendor from twisted.internet import task from twisted.application import service diff --git a/bin/nova-manage b/bin/nova-manage index 5693a40f6..56f89ce30 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -23,6 +23,7 @@ """ import sys +import time from nova import flags from nova import utils @@ -31,7 +32,7 @@ from nova.compute import model from nova.compute import network from nova.cloudpipe import pipelib from nova.endpoint import cloud -import time + FLAGS = flags.FLAGS diff --git a/bin/nova-objectstore b/bin/nova-objectstore index 7876864c0..521f3d5d1 100755 --- a/bin/nova-objectstore +++ b/bin/nova-objectstore @@ -22,8 +22,6 @@ """ import logging - -from nova import vendor from tornado import httpserver from tornado import ioloop diff --git a/bin/nova-rsapi b/bin/nova-rsapi index c2f2c9d70..5cbe2d8c1 100755 --- a/bin/nova-rsapi +++ b/bin/nova-rsapi @@ -21,10 +21,8 @@ """ import logging -from wsgiref import simple_server - -from nova import vendor from tornado import ioloop +from wsgiref import simple_server from nova import flags from nova import rpc diff --git a/bin/nova-volume b/bin/nova-volume index 9b7787c96..df9fb5c7a 100755 --- a/bin/nova-volume +++ b/bin/nova-volume @@ -22,8 +22,6 @@ """ import logging - -from nova import vendor from tornado import ioloop from nova import flags diff --git a/docs/conf.py b/docs/conf.py index 784d8c096..fb3fd1a30 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -18,7 +18,7 @@ import sys, os # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.append(os.path.abspath('/Users/jmckenty/Projects/cc')) sys.path.append([os.path.abspath('../nova'),os.path.abspath('../'),os.path.abspath('../vendor')]) -from nova import vendor + # -- General configuration ----------------------------------------------------- diff --git a/nova/adminclient.py b/nova/adminclient.py index 1a5f41418..db392feb1 100644 --- a/nova/adminclient.py +++ b/nova/adminclient.py @@ -20,8 +20,6 @@ Nova User API client library. """ import base64 - -from nova import vendor import boto from boto.ec2.regioninfo import RegionInfo diff --git a/nova/auth/signer.py b/nova/auth/signer.py index a3d3c5329..83831bfac 100644 --- a/nova/auth/signer.py +++ b/nova/auth/signer.py @@ -43,11 +43,12 @@ Utility class for parsing signed AMI manifests. """ -import logging +import base64 import hashlib import hmac +import logging import urllib -import base64 + from nova.exception import Error class Signer(object): diff --git a/nova/auth/users.py b/nova/auth/users.py index 72edcc2aa..2c153c788 100644 --- a/nova/auth/users.py +++ b/nova/auth/users.py @@ -26,7 +26,6 @@ import os import shutil import signer import string -from string import Template import tempfile import uuid import zipfile @@ -44,8 +43,6 @@ from nova import exception from nova import flags from nova import crypto from nova import utils - - from nova import objectstore # for flags FLAGS = flags.FLAGS diff --git a/nova/cloudpipe/api.py b/nova/cloudpipe/api.py index 99a0a1d6d..a5f78a16d 100644 --- a/nova/cloudpipe/api.py +++ b/nova/cloudpipe/api.py @@ -21,14 +21,13 @@ Tornado REST API Request Handlers for CloudPipe """ import logging -import urllib - -from nova import vendor import tornado.web +import urllib from nova import crypto from nova.auth import users + _log = logging.getLogger("api") _log.setLevel(logging.DEBUG) diff --git a/nova/cloudpipe/pipelib.py b/nova/cloudpipe/pipelib.py index de5326c5e..63f7ae222 100644 --- a/nova/cloudpipe/pipelib.py +++ b/nova/cloudpipe/pipelib.py @@ -22,18 +22,19 @@ an instance with it. """ +import base64 import logging import os import tempfile -import base64 -from zipfile import ZipFile, ZIP_DEFLATED +import zipfile from nova import exception from nova import flags -from nova.auth import users from nova import utils +from nova.auth import users from nova.endpoint import api + FLAGS = flags.FLAGS flags.DEFINE_string('boot_script_template', @@ -52,7 +53,7 @@ class CloudPipe(object): tmpfolder = tempfile.mkdtemp() filename = "payload.zip" zippath = os.path.join(tmpfolder, filename) - z = ZipFile(zippath, "w", ZIP_DEFLATED) + z = zipfile.ZipFile(zippath, "w", zipfile.ZIP_DEFLATED) z.write(FLAGS.boot_script_template,'autorun.sh') z.close() diff --git a/nova/compute/disk.py b/nova/compute/disk.py index b24a90d7f..08a22556e 100644 --- a/nova/compute/disk.py +++ b/nova/compute/disk.py @@ -24,12 +24,11 @@ Includes injection of SSH PGP keys into authorized_keys file. import logging import os import tempfile - -from nova import vendor from twisted.internet import defer from nova import exception + @defer.inlineCallbacks def partition(infile, outfile, local_bytes=0, local_type='ext2', execute=None): """Takes a single partition represented by infile and writes a bootable diff --git a/nova/compute/exception.py b/nova/compute/exception.py index fefa7451d..13e4f0a51 100644 --- a/nova/compute/exception.py +++ b/nova/compute/exception.py @@ -22,6 +22,7 @@ Exceptions for Compute Node errors, mostly network addressing. from nova.exception import Error + class NoMoreAddresses(Error): pass diff --git a/nova/compute/linux_net.py b/nova/compute/linux_net.py index 358f184af..7b6ae693a 100644 --- a/nova/compute/linux_net.py +++ b/nova/compute/linux_net.py @@ -19,11 +19,12 @@ import logging import signal import os -import nova.utils import subprocess # todo(ja): does the definition of network_path belong here? +from nova import utils + from nova import flags FLAGS=flags.FLAGS diff --git a/nova/compute/model.py b/nova/compute/model.py index f1eb99e74..cda188183 100644 --- a/nova/compute/model.py +++ b/nova/compute/model.py @@ -42,8 +42,6 @@ True import logging import time - -from nova import vendor import redis from nova import datastore diff --git a/nova/compute/monitor.py b/nova/compute/monitor.py index b9fe20a71..fdc86b031 100644 --- a/nova/compute/monitor.py +++ b/nova/compute/monitor.py @@ -24,11 +24,18 @@ Instance Monitoring: in the object store. """ +import boto +import boto.s3 import datetime +import libxml2 import logging import os +import rrdtool import sys import time +from twisted.internet import defer +from twisted.internet import task +from twisted.application import service try: import libvirt @@ -36,14 +43,7 @@ except Exception, err: logging.warning('no libvirt found') from nova import flags -from nova import vendor -import boto -import boto.s3 -import libxml2 -import rrdtool -from twisted.internet import defer -from twisted.internet import task -from twisted.application import service + FLAGS = flags.FLAGS flags.DEFINE_integer( diff --git a/nova/compute/network.py b/nova/compute/network.py index 8592d7af7..1a8bc4ca1 100644 --- a/nova/compute/network.py +++ b/nova/compute/network.py @@ -20,22 +20,19 @@ Classes for network control, including VLANs, DHCP, and IP allocation. """ +import IPy import logging import os import time -# TODO(termie): clean up these imports -from nova import vendor -import IPy - from nova import datastore +from nova import exception from nova import flags from nova import utils -from nova import exception -from nova.compute import exception as compute_exception from nova.auth import users +from nova.compute import exception as compute_exception +from nova.compute import linux_net -import linux_net FLAGS = flags.FLAGS flags.DEFINE_string('networks_path', utils.abspath('../networks'), diff --git a/nova/compute/node.py b/nova/compute/node.py index 7e4277f58..3abd20120 100644 --- a/nova/compute/node.py +++ b/nova/compute/node.py @@ -30,12 +30,11 @@ import logging import os import shutil import sys - -from nova import vendor from twisted.internet import defer from twisted.internet import task from twisted.application import service + try: import libvirt except Exception, err: @@ -49,8 +48,9 @@ from nova import utils from nova.compute import disk from nova.compute import model from nova.compute import network -from nova.volume import storage from nova.objectstore import image # for image_path flag +from nova.volume import storage + FLAGS = flags.FLAGS flags.DEFINE_string('libvirt_xml_template', @@ -87,7 +87,6 @@ class Node(object, service.Service): super(Node, self).__init__() self._instances = {} self._conn = self._get_connection() - self._pool = process.ProcessPool() self.instdir = model.InstanceDirectory() # TODO(joshua): This needs to ensure system state, specifically: modprobe aoe @@ -115,7 +114,7 @@ class Node(object, service.Service): # inst = self.instdir.get(instance_id) # return inst if self.instdir.exists(instance_id): - return Instance.fromName(self._conn, self._pool, instance_id) + return Instance.fromName(self._conn, instance_id) return None @exception.wrap_exception @@ -126,7 +125,7 @@ class Node(object, service.Service): for x in self._conn.listDomainsID()] for name in instance_names: try: - new_inst = Instance.fromName(self._conn, self._pool, name) + new_inst = Instance.fromName(self._conn, name) new_inst.update_state() except: pass @@ -136,7 +135,8 @@ class Node(object, service.Service): def describe_instances(self): retval = {} for inst in self.instdir.by_node(FLAGS.node_name): - retval[inst['instance_id']] = (Instance.fromName(self._conn, self._pool, inst['instance_id'])) + retval[inst['instance_id']] = ( + Instance.fromName(self._conn, inst['instance_id'])) return retval @defer.inlineCallbacks @@ -169,8 +169,7 @@ class Node(object, service.Service): inst['node_name'] = FLAGS.node_name inst.save() # TODO(vish) check to make sure the availability zone matches - new_inst = Instance(self._conn, name=instance_id, - pool=self._pool, data=inst) + new_inst = Instance(self._conn, name=instance_id, data=inst) logging.info("Instances current state is %s", new_inst.state) if new_inst.is_running(): raise exception.Error("Instance is already running") @@ -267,11 +266,8 @@ class Instance(object): SHUTOFF = 0x05 CRASHED = 0x06 - def __init__(self, conn, pool, name, data): + def __init__(self, conn, name, data): """ spawn an instance with a given name """ - # TODO(termie): pool should probably be a singleton instead of being passed - # here and in the classmethods - self._pool = pool self._conn = conn # TODO(vish): this can be removed after data has been updated # data doesn't seem to have a working iterator so in doesn't work @@ -324,11 +320,11 @@ class Instance(object): return libvirt_xml @classmethod - def fromName(cls, conn, pool, name): + def fromName(cls, conn, name): """ use the saved data for reloading the instance """ instdir = model.InstanceDirectory() instance = instdir.get(name) - return cls(conn=conn, pool=pool, name=name, data=instance) + return cls(conn=conn, name=name, data=instance) def set_state(self, state_code, state_description=None): self.datamodel['state'] = state_code @@ -450,12 +446,13 @@ class Instance(object): def _fetch_s3_image(self, image, path): url = _image_url('%s/image' % image) - d = self._pool.simpleExecute('curl --silent %s -o %s' % (url, path)) + d = process.SharedPool().simple_execute( + 'curl --silent %s -o %s' % (url, path)) return d def _fetch_local_image(self, image, path): source = _image_path('%s/image' % image) - d = self._pool.simpleExecute('cp %s %s' % (source, path)) + d = process.SharedPool().simple_execute('cp %s %s' % (source, path)) return d @defer.inlineCallbacks @@ -465,8 +462,10 @@ class Instance(object): basepath = self.basepath # ensure directories exist and are writable - yield self._pool.simpleExecute('mkdir -p %s' % basepath()) - yield self._pool.simpleExecute('chmod 0777 %s' % basepath()) + yield process.SharedPool().simple_execute( + 'mkdir -p %s' % basepath()) + yield process.SharedPool().simple_execute( + 'chmod 0777 %s' % basepath()) # TODO(termie): these are blocking calls, it would be great @@ -492,9 +491,10 @@ class Instance(object): if not os.path.exists(basepath('ramdisk')): yield _fetch_file(data['ramdisk_id'], basepath('ramdisk')) - execute = lambda cmd, input=None: self._pool.simpleExecute(cmd=cmd, - input=input, - error_ok=1) + execute = lambda cmd, input=None: \ + process.SharedPool().simple_execute(cmd=cmd, + input=input, + error_ok=1) key = data['key_data'] net = None @@ -511,7 +511,8 @@ class Instance(object): yield disk.inject_data(basepath('disk-raw'), key, net, execute=execute) if os.path.exists(basepath('disk')): - yield self._pool.simpleExecute('rm -f %s' % basepath('disk')) + yield process.SharedPool().simple_execute( + 'rm -f %s' % basepath('disk')) bytes = (INSTANCE_TYPES[data['instance_type']]['local_gb'] * 1024 * 1024 * 1024) diff --git a/nova/crypto.py b/nova/crypto.py index 98d412687..cc84f5e45 100644 --- a/nova/crypto.py +++ b/nova/crypto.py @@ -24,6 +24,7 @@ SSH keypairs and x509 certificates. import base64 import hashlib import logging +import M2Crypto import os import shutil import struct @@ -31,9 +32,6 @@ import tempfile import time import utils -from nova import vendor -import M2Crypto - from nova import exception from nova import flags diff --git a/nova/datastore.py b/nova/datastore.py index 8d6272ada..dae78f50c 100644 --- a/nova/datastore.py +++ b/nova/datastore.py @@ -24,8 +24,6 @@ before trying to run this. """ import logging - -from nova import vendor import redis from nova import exception diff --git a/nova/endpoint/api.py b/nova/endpoint/api.py index 255519198..79a2aaddb 100755 --- a/nova/endpoint/api.py +++ b/nova/endpoint/api.py @@ -25,21 +25,20 @@ import logging import multiprocessing import random import re +import tornado.web +from twisted.internet import defer import urllib # TODO(termie): replace minidom with etree from xml.dom import minidom -from nova import vendor -import tornado.web -from twisted.internet import defer - from nova import crypto from nova import exception from nova import flags from nova import utils -from nova.endpoint import cloud from nova.auth import users import nova.cloudpipe.api +from nova.endpoint import cloud + FLAGS = flags.FLAGS flags.DEFINE_integer('cc_port', 8773, 'cloud controller port') diff --git a/nova/endpoint/cloud.py b/nova/endpoint/cloud.py index 5b713feb9..3b7b4804b 100644 --- a/nova/endpoint/cloud.py +++ b/nova/endpoint/cloud.py @@ -27,15 +27,13 @@ import json import logging import os import time - -from nova import vendor from twisted.internet import defer from nova import datastore +from nova import exception from nova import flags from nova import rpc from nova import utils -from nova import exception from nova.auth import rbac from nova.auth import users from nova.compute import model @@ -44,6 +42,7 @@ from nova.compute import node from nova.endpoint import images from nova.volume import storage + FLAGS = flags.FLAGS flags.DEFINE_string('cloud_topic', 'cloud', 'the topic clouds listen on') diff --git a/nova/endpoint/images.py b/nova/endpoint/images.py index b17e96819..12876da30 100644 --- a/nova/endpoint/images.py +++ b/nova/endpoint/images.py @@ -21,17 +21,16 @@ Proxy AMI-related calls from the cloud controller, to the running objectstore daemon. """ +import boto +import boto.s3 import json import random import urllib -from nova import vendor -import boto -import boto.s3 - from nova import flags from nova import utils + FLAGS = flags.FLAGS def modify(context, image_id, operation): diff --git a/nova/endpoint/rackspace.py b/nova/endpoint/rackspace.py index 29a077b24..9208ddab7 100644 --- a/nova/endpoint/rackspace.py +++ b/nova/endpoint/rackspace.py @@ -26,21 +26,19 @@ import logging import multiprocessing import os import time - -from nova import vendor import tornado.web from twisted.internet import defer from nova import datastore +from nova import exception from nova import flags from nova import rpc from nova import utils -from nova import exception from nova.auth import users from nova.compute import model from nova.compute import network -from nova.endpoint import wsgi from nova.endpoint import images +from nova.endpoint import wsgi from nova.volume import storage diff --git a/nova/exception.py b/nova/exception.py index 09d894e4b..bda002d1e 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -22,8 +22,8 @@ Nova-type exceptions. SHOULD include dedicated exception logging. """ import logging -import traceback import sys +import traceback class Error(Exception): def __init__(self, message=None): diff --git a/nova/fakerabbit.py b/nova/fakerabbit.py index 00eb18327..689194513 100644 --- a/nova/fakerabbit.py +++ b/nova/fakerabbit.py @@ -18,11 +18,10 @@ """ Based a bit on the carrot.backeds.queue backend... but a lot better """ +from carrot.backends import base import logging import Queue as queue -from carrot.backends import base - class Message(base.BaseMessage): pass diff --git a/nova/flags.py b/nova/flags.py index 22e00a44a..60245a349 100644 --- a/nova/flags.py +++ b/nova/flags.py @@ -23,7 +23,7 @@ where they're used. import socket -from nova import vendor + from gflags import * # This keeps pylint from barfing on the imports diff --git a/nova/objectstore/bucket.py b/nova/objectstore/bucket.py index 61feb4a4c..090ef4e61 100644 --- a/nova/objectstore/bucket.py +++ b/nova/objectstore/bucket.py @@ -20,17 +20,18 @@ Simple object store using Blobs and JSON files on disk. """ +import bisect import datetime import glob import json import os -import bisect from nova import exception from nova import flags from nova import utils from nova.objectstore import stored + FLAGS = flags.FLAGS flags.DEFINE_string('buckets_path', utils.abspath('../buckets'), 'path to s3 buckets') diff --git a/nova/objectstore/handler.py b/nova/objectstore/handler.py index 22cfca5fd..8377a57a6 100644 --- a/nova/objectstore/handler.py +++ b/nova/objectstore/handler.py @@ -38,14 +38,11 @@ S3 client with this module:: import datetime import os -import urllib import json import logging import multiprocessing - - -from nova import vendor from tornado import escape, web +import urllib from nova import exception from nova import flags diff --git a/nova/objectstore/stored.py b/nova/objectstore/stored.py index f1730cbc7..81c047b22 100644 --- a/nova/objectstore/stored.py +++ b/nova/objectstore/stored.py @@ -20,10 +20,11 @@ Properties of an object stored within a bucket. """ -from nova.exception import NotFound, NotAuthorized - import os + import nova.crypto +from nova.exception import NotFound, NotAuthorized + class Object(object): def __init__(self, bucket, key): diff --git a/nova/process.py b/nova/process.py index 00ec4a267..ebfb2f4ba 100644 --- a/nova/process.py +++ b/nova/process.py @@ -23,8 +23,6 @@ Process pool, still buggy right now. import logging import multiprocessing import StringIO - -from nova import vendor from twisted.internet import defer from twisted.internet import error from twisted.internet import process @@ -87,7 +85,7 @@ class _BackRelay(protocol.ProcessProtocol): def errReceivedIsBad(self, text): if self.deferred is not None: self.onProcessEnded = defer.Deferred() - err = _UnexpectedErrorOutput(text, self.onProcessEnded) + err = UnexpectedErrorOutput(text, self.onProcessEnded) self.deferred.errback(failure.Failure(err)) self.deferred = None self.transport.loseConnection() @@ -154,8 +152,8 @@ def getProcessOutput(executable, args=None, env=None, path=None, reactor=None, d = defer.Deferred() p = BackRelayWithInput( d, startedDeferred=startedDeferred, error_ok=error_ok, input=input) - # VISH: commands come in as unicode, but self.executes needs - # strings or process.spawn raises a deprecation warning + # NOTE(vish): commands come in as unicode, but self.executes needs + # strings or process.spawn raises a deprecation warning executable = str(executable) if not args is None: args = [str(x) for x in args] @@ -173,7 +171,7 @@ class ProcessPool(object): self.size = size and size or FLAGS.process_pool_size self._pool = defer.DeferredSemaphore(self.size) - def simpleExecute(self, cmd, **kw): + def simple_execute(self, cmd, **kw): """ Weak emulation of the old utils.execute() function. This only exists as a way to quickly move old execute methods to @@ -207,34 +205,10 @@ class ProcessPool(object): self._pool.release() return rv - -class Pool(object): - """ A simple process pool implementation around mutliprocessing. - - Allows up to `size` processes at a time and queues the rest. - - Using workarounds for multiprocessing behavior described in: - http://pypi.python.org/pypi/twisted.internet.processes/1.0b1 - """ - - def __init__(self, size=None): - self._size = size - self._pool = multiprocessing.Pool(size) - self._registerShutdown() - - def _registerShutdown(self): - reactor.addSystemEventTrigger( - 'during', 'shutdown', self.shutdown, reactor) - - def shutdown(self, reactor=None): - if not self._pool: - return - self._pool.close() - # wait for workers to finish - self._pool.terminate() - self._pool = None - - def apply(self, f, *args, **kw): - """ Add a task to the pool and return a deferred. """ - result = self._pool.apply_async(f, args, kw) - return threads.deferToThread(result.get) +class SharedPool(ProcessPool): + _instance = None + def __new__(cls, *args, **kwargs): + if not cls._instance: + cls._instance = super(SharedPool, cls).__new__( + cls, *args, **kwargs) + return cls._instance diff --git a/nova/rpc.py b/nova/rpc.py index 72a84b7f7..58a2b29cf 100644 --- a/nova/rpc.py +++ b/nova/rpc.py @@ -21,14 +21,12 @@ AMQP-based RPC. Queues have consumers and publishers. No fan-out support yet. """ +from carrot import connection +from carrot import messaging import json import logging import sys import uuid - -from nova import vendor -from carrot import connection -from carrot import messaging from twisted.internet import defer from twisted.internet import reactor from twisted.internet import task diff --git a/nova/server.py b/nova/server.py index 1a6f33876..7a1901a2f 100644 --- a/nova/server.py +++ b/nova/server.py @@ -20,6 +20,8 @@ Base functionality for nova daemons - gradually being replaced with twistd.py. """ +import daemon +from daemon import pidlockfile import logging import logging.handlers import os @@ -27,10 +29,6 @@ import signal import sys import time -from nova import vendor -import daemon -from daemon import pidlockfile - from nova import flags diff --git a/nova/test.py b/nova/test.py index 1f8a5ff47..5dcf0b9b0 100644 --- a/nova/test.py +++ b/nova/test.py @@ -23,16 +23,14 @@ and some black magic for inline callbacks. """ import logging +import mox +import stubout import time import unittest - -from nova import vendor -import mox from tornado import ioloop from twisted.internet import defer from twisted.python import failure from twisted.trial import unittest as trial_unittest -import stubout from nova import fakerabbit from nova import flags diff --git a/nova/tests/access_unittest.py b/nova/tests/access_unittest.py index 609bda901..8500dd0cb 100644 --- a/nova/tests/access_unittest.py +++ b/nova/tests/access_unittest.py @@ -19,11 +19,12 @@ import unittest import logging -from nova.auth.users import UserManager -from nova.auth import rbac from nova import exception from nova import flags from nova import test +from nova.auth.users import UserManager +from nova.auth import rbac + FLAGS = flags.FLAGS class Context(object): diff --git a/nova/tests/api_integration.py b/nova/tests/api_integration.py index 0ccf69525..23a88f083 100644 --- a/nova/tests/api_integration.py +++ b/nova/tests/api_integration.py @@ -16,10 +16,11 @@ # License for the specific language governing permissions and limitations # under the License. -import unittest import boto from boto.ec2.regioninfo import RegionInfo +import unittest + ACCESS_KEY = 'fake' SECRET_KEY = 'fake' diff --git a/nova/tests/api_unittest.py b/nova/tests/api_unittest.py index aee57b514..e5e2afe26 100644 --- a/nova/tests/api_unittest.py +++ b/nova/tests/api_unittest.py @@ -16,13 +16,11 @@ # License for the specific language governing permissions and limitations # under the License. +import boto +from boto.ec2 import regioninfo import httplib import random import StringIO - -from nova import vendor -import boto -from boto.ec2 import regioninfo from tornado import httpserver from twisted.internet import defer diff --git a/nova/tests/cloud_unittest.py b/nova/tests/cloud_unittest.py index 9df83ec62..b8614fdc8 100644 --- a/nova/tests/cloud_unittest.py +++ b/nova/tests/cloud_unittest.py @@ -19,12 +19,10 @@ import logging import StringIO import time -import unittest -from xml.etree import ElementTree - -from nova import vendor from tornado import ioloop from twisted.internet import defer +import unittest +from xml.etree import ElementTree from nova import flags from nova import rpc diff --git a/nova/tests/future_unittest.py b/nova/tests/future_unittest.py index be4218c39..da5470ffe 100644 --- a/nova/tests/future_unittest.py +++ b/nova/tests/future_unittest.py @@ -17,15 +17,13 @@ # under the License. import logging +import mox import StringIO import time -import unittest -from xml.etree import ElementTree - -from nova import vendor -import mox from tornado import ioloop from twisted.internet import defer +import unittest +from xml.etree import ElementTree from nova import cloud from nova import exception diff --git a/nova/tests/model_unittest.py b/nova/tests/model_unittest.py index f70cab40d..1bd7e527f 100644 --- a/nova/tests/model_unittest.py +++ b/nova/tests/model_unittest.py @@ -18,8 +18,6 @@ import logging import time - -from nova import vendor from twisted.internet import defer from nova import exception diff --git a/nova/tests/network_unittest.py b/nova/tests/network_unittest.py index dd1966ffa..a822cc1d9 100644 --- a/nova/tests/network_unittest.py +++ b/nova/tests/network_unittest.py @@ -16,13 +16,11 @@ # License for the specific language governing permissions and limitations # under the License. +import IPy import os import logging import unittest -from nova import vendor -import IPy - from nova import flags from nova import test from nova import exception diff --git a/nova/tests/node_unittest.py b/nova/tests/node_unittest.py index 4f7bbd587..93942d79e 100644 --- a/nova/tests/node_unittest.py +++ b/nova/tests/node_unittest.py @@ -18,11 +18,8 @@ import logging import time - -from xml.etree import ElementTree - -from nova import vendor from twisted.internet import defer +from xml.etree import ElementTree from nova import exception from nova import flags @@ -31,6 +28,7 @@ from nova import utils from nova.compute import model from nova.compute import node + FLAGS = flags.FLAGS diff --git a/nova/tests/objectstore_unittest.py b/nova/tests/objectstore_unittest.py index ca2d31159..f47ca7f00 100644 --- a/nova/tests/objectstore_unittest.py +++ b/nova/tests/objectstore_unittest.py @@ -23,15 +23,13 @@ import os import shutil import tempfile -from nova import vendor - from nova import flags from nova import objectstore from nova import test from nova.auth import users -FLAGS = flags.FLAGS +FLAGS = flags.FLAGS oss_tempdir = tempfile.mkdtemp(prefix='test_oss-') diff --git a/nova/tests/process_unittest.py b/nova/tests/process_unittest.py index 671ab05cd..1c15b69a0 100644 --- a/nova/tests/process_unittest.py +++ b/nova/tests/process_unittest.py @@ -17,11 +17,9 @@ # under the License. import logging -from xml.etree import ElementTree - -from nova import vendor from twisted.internet import defer from twisted.internet import reactor +from xml.etree import ElementTree from nova import exception from nova import flags @@ -39,7 +37,7 @@ class ProcessTestCase(test.TrialTestCase): def test_execute_stdout(self): pool = process.ProcessPool(2) - d = pool.simpleExecute('echo test') + d = pool.simple_execute('echo test') def _check(rv): self.assertEqual(rv[0], 'test\n') self.assertEqual(rv[1], '') @@ -50,38 +48,38 @@ class ProcessTestCase(test.TrialTestCase): def test_execute_stderr(self): pool = process.ProcessPool(2) - d = pool.simpleExecute('cat BAD_FILE', error_ok=1) + d = pool.simple_execute('cat BAD_FILE', error_ok=1) def _check(rv): self.assertEqual(rv[0], '') self.assert_('No such file' in rv[1]) - + d.addCallback(_check) d.addErrback(self.fail) return d def test_execute_unexpected_stderr(self): pool = process.ProcessPool(2) - d = pool.simpleExecute('cat BAD_FILE') + d = pool.simple_execute('cat BAD_FILE') d.addCallback(lambda x: self.fail('should have raised an error')) d.addErrback(lambda failure: failure.trap(IOError)) return d - + def test_max_processes(self): pool = process.ProcessPool(2) - d1 = pool.simpleExecute('sleep 0.01') - d2 = pool.simpleExecute('sleep 0.01') - d3 = pool.simpleExecute('sleep 0.005') - d4 = pool.simpleExecute('sleep 0.005') + d1 = pool.simple_execute('sleep 0.01') + d2 = pool.simple_execute('sleep 0.01') + d3 = pool.simple_execute('sleep 0.005') + d4 = pool.simple_execute('sleep 0.005') called = [] def _called(rv, name): called.append(name) - + d1.addCallback(_called, 'd1') d2.addCallback(_called, 'd2') d3.addCallback(_called, 'd3') d4.addCallback(_called, 'd4') - + # Make sure that d3 and d4 had to wait on the other two and were called # in order # NOTE(termie): there may be a race condition in this test if for some @@ -94,25 +92,31 @@ class ProcessTestCase(test.TrialTestCase): def test_kill_long_process(self): pool = process.ProcessPool(2) - - d1 = pool.simpleExecute('sleep 1') - d2 = pool.simpleExecute('sleep 0.005') + + d1 = pool.simple_execute('sleep 1') + d2 = pool.simple_execute('sleep 0.005') timeout = reactor.callLater(0.1, self.fail, 'should have been killed') - + # kill d1 and wait on it to end then cancel the timeout d2.addCallback(lambda _: d1.process.signalProcess('KILL')) d2.addCallback(lambda _: d1) d2.addBoth(lambda _: timeout.active() and timeout.cancel()) d2.addErrback(self.fail) return d2 - + def test_process_exit_is_contained(self): pool = process.ProcessPool(2) - - d1 = pool.simpleExecute('sleep 1') + + d1 = pool.simple_execute('sleep 1') d1.addCallback(lambda x: self.fail('should have errbacked')) d1.addErrback(lambda fail: fail.trap(IOError)) reactor.callLater(0.05, d1.process.signalProcess, 'KILL') - + return d1 + + def test_shared_pool_is_singleton(self): + pool1 = process.SharedPool() + pool2 = process.SharedPool() + self.assert_(id(pool1) == id(pool2)) + diff --git a/nova/tests/storage_unittest.py b/nova/tests/storage_unittest.py index b04602b71..60576d74f 100644 --- a/nova/tests/storage_unittest.py +++ b/nova/tests/storage_unittest.py @@ -69,13 +69,11 @@ class StorageTestCase(test.TrialTestCase): vols = [] for i in xrange(total_slots): vid = self.mystorage.create_volume(vol_size, user_id, project_id) - print vid vols.append(vid) self.assertRaises(storage.NoMoreVolumes, self.mystorage.create_volume, vol_size, user_id, project_id) for id in vols: - print id self.mystorage.delete_volume(id) def test_run_attach_detach_volume(self): diff --git a/nova/tests/users_unittest.py b/nova/tests/users_unittest.py index 6110248b5..301721075 100644 --- a/nova/tests/users_unittest.py +++ b/nova/tests/users_unittest.py @@ -17,12 +17,10 @@ # under the License. import logging -import unittest - -from nova import vendor from M2Crypto import BIO from M2Crypto import RSA from M2Crypto import X509 +import unittest from nova import crypto from nova import flags diff --git a/nova/tests/validator_unittest.py b/nova/tests/validator_unittest.py index 38cddfef1..84daa135e 100644 --- a/nova/tests/validator_unittest.py +++ b/nova/tests/validator_unittest.py @@ -19,8 +19,6 @@ import logging import unittest -from nova import vendor - from nova import flags from nova import test from nova import validate diff --git a/nova/twistd.py b/nova/twistd.py index 03de2d0ab..32a46ce03 100644 --- a/nova/twistd.py +++ b/nova/twistd.py @@ -22,22 +22,21 @@ manage pid files and support syslogging. """ import logging +import logging.handlers import os import signal import sys import time -import UserDict -import logging.handlers - -from nova import vendor from twisted.scripts import twistd from twisted.python import log from twisted.python import reflect from twisted.python import runtime from twisted.python import usage +import UserDict from nova import flags + if runtime.platformType == "win32": from twisted.scripts._twistw import ServerOptions else: diff --git a/nova/utils.py b/nova/utils.py index 25181332d..c5b935673 100644 --- a/nova/utils.py +++ b/nova/utils.py @@ -20,6 +20,7 @@ System-level utilities and helper functions. """ +from datetime import datetime import inspect import logging import os @@ -27,7 +28,6 @@ import random import subprocess import socket import sys -from datetime import datetime from nova import flags diff --git a/nova/vendor.py b/nova/vendor.py deleted file mode 100644 index db75f30ec..000000000 --- a/nova/vendor.py +++ /dev/null @@ -1,24 +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. - -""" -Get our vendor folders into the system path. -""" - -print 'sorry, we cannot include vendor open source libraries... :(' - diff --git a/nova/volume/storage.py b/nova/volume/storage.py index 1507b4ec7..de20f30b5 100644 --- a/nova/volume/storage.py +++ b/nova/volume/storage.py @@ -25,12 +25,10 @@ Currently uses Ata-over-Ethernet. import glob import logging import os -import socket import shutil +import socket import tempfile import time - -from nova import vendor from tornado import ioloop from twisted.internet import defer diff --git a/run_tests.py b/run_tests.py index bd1587d43..eb26459c5 100644 --- a/run_tests.py +++ b/run_tests.py @@ -41,7 +41,7 @@ Due to our use of multiprocessing it we frequently get some ignorable import __main__ import sys -from nova import vendor + from twisted.scripts import trial as trial_script from nova import datastore diff --git a/smoketests/flags.py b/smoketests/flags.py index ae0001e89..3617fb797 100644 --- a/smoketests/flags.py +++ b/smoketests/flags.py @@ -21,7 +21,7 @@ Package-level global flags are defined here, the rest are defined where they're used. """ -from nova import vendor + from gflags import * # This keeps pylint from barfing on the imports diff --git a/smoketests/novatestcase.py b/smoketests/novatestcase.py index 11c8661ba..513e0ca91 100644 --- a/smoketests/novatestcase.py +++ b/smoketests/novatestcase.py @@ -22,7 +22,7 @@ import random import sys import unittest -from nova import vendor + import paramiko from nova import adminclient diff --git a/smoketests/smoketest.py b/smoketests/smoketest.py index 61967d3b7..ad95114d4 100644 --- a/smoketests/smoketest.py +++ b/smoketests/smoketest.py @@ -25,7 +25,7 @@ import time import unittest import zipfile -from nova import vendor + import paramiko from smoketests import flags |
