summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2010-07-16 19:57:27 +0000
committerVishvananda Ishaya <vishvananda@gmail.com>2010-07-16 19:57:27 +0000
commitef6d3f3be8e83cbfe417ba5fe221464acfba5588 (patch)
treeebf0f9c5ab953327bcb358a12c4e7e2acd84f74b
parent1047fed400501e31a3c938bf56bb9aea683c0000 (diff)
parentae9e4e81d992fb81c01acd2dfcb1cb3d32956041 (diff)
downloadnova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.tar.gz
nova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.tar.xz
nova-ef6d3f3be8e83cbfe417ba5fe221464acfba5588.zip
merge with singleton pool
-rw-r--r--HACKING4
-rwxr-xr-xbin/dhcpleasor.py5
-rwxr-xr-xbin/nova-api2
-rwxr-xr-xbin/nova-compute2
-rwxr-xr-xbin/nova-import-canonical-imagestore2
-rwxr-xr-xbin/nova-instancemonitor2
-rwxr-xr-xbin/nova-manage3
-rwxr-xr-xbin/nova-objectstore2
-rwxr-xr-xbin/nova-rsapi4
-rwxr-xr-xbin/nova-volume2
-rw-r--r--docs/conf.py2
-rw-r--r--nova/adminclient.py2
-rw-r--r--nova/auth/signer.py5
-rw-r--r--nova/auth/users.py3
-rw-r--r--nova/cloudpipe/api.py5
-rw-r--r--nova/cloudpipe/pipelib.py9
-rw-r--r--nova/compute/disk.py3
-rw-r--r--nova/compute/exception.py1
-rw-r--r--nova/compute/linux_net.py3
-rw-r--r--nova/compute/model.py2
-rw-r--r--nova/compute/monitor.py16
-rw-r--r--nova/compute/network.py11
-rw-r--r--nova/compute/node.py47
-rw-r--r--nova/crypto.py4
-rw-r--r--nova/datastore.py2
-rwxr-xr-xnova/endpoint/api.py9
-rw-r--r--nova/endpoint/cloud.py5
-rw-r--r--nova/endpoint/images.py7
-rw-r--r--nova/endpoint/rackspace.py6
-rw-r--r--nova/exception.py2
-rw-r--r--nova/fakerabbit.py3
-rw-r--r--nova/flags.py2
-rw-r--r--nova/objectstore/bucket.py3
-rw-r--r--nova/objectstore/handler.py5
-rw-r--r--nova/objectstore/stored.py5
-rw-r--r--nova/process.py48
-rw-r--r--nova/rpc.py6
-rw-r--r--nova/server.py6
-rw-r--r--nova/test.py6
-rw-r--r--nova/tests/access_unittest.py5
-rw-r--r--nova/tests/api_integration.py3
-rw-r--r--nova/tests/api_unittest.py6
-rw-r--r--nova/tests/cloud_unittest.py6
-rw-r--r--nova/tests/future_unittest.py8
-rw-r--r--nova/tests/model_unittest.py2
-rw-r--r--nova/tests/network_unittest.py4
-rw-r--r--nova/tests/node_unittest.py6
-rw-r--r--nova/tests/objectstore_unittest.py4
-rw-r--r--nova/tests/process_unittest.py48
-rw-r--r--nova/tests/storage_unittest.py2
-rw-r--r--nova/tests/users_unittest.py4
-rw-r--r--nova/tests/validator_unittest.py2
-rw-r--r--nova/twistd.py7
-rw-r--r--nova/utils.py2
-rw-r--r--nova/vendor.py24
-rw-r--r--nova/volume/storage.py4
-rw-r--r--run_tests.py2
-rw-r--r--smoketests/flags.py2
-rw-r--r--smoketests/novatestcase.py2
-rw-r--r--smoketests/smoketest.py2
60 files changed, 148 insertions, 253 deletions
diff --git a/HACKING b/HACKING
index 77e42b8e6..3af2381bf 100644
--- a/HACKING
+++ b/HACKING
@@ -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