diff options
author | Andy Smith <code@term.ie> | 2010-12-08 12:59:22 -0800 |
---|---|---|
committer | Andy Smith <code@term.ie> | 2010-12-08 12:59:22 -0800 |
commit | 0324b6609fe413866fd4cc52a87760f2b5ab2d85 (patch) | |
tree | 72ba1bf70e99f8b7f1d790c0a16c5e1e75960618 /nova/manager.py | |
parent | 2337fab0979b72bbc7e7730e94518a0e835a2751 (diff) | |
parent | 69d826ee3b036d80439396166bb7406f8258f03c (diff) | |
download | nova-0324b6609fe413866fd4cc52a87760f2b5ab2d85.tar.gz nova-0324b6609fe413866fd4cc52a87760f2b5ab2d85.tar.xz nova-0324b6609fe413866fd4cc52a87760f2b5ab2d85.zip |
merged upstream changes
Diffstat (limited to 'nova/manager.py')
-rw-r--r-- | nova/manager.py | 44 |
1 files changed, 36 insertions, 8 deletions
diff --git a/nova/manager.py b/nova/manager.py index 994d6e7af..5e067bd08 100644 --- a/nova/manager.py +++ b/nova/manager.py @@ -15,29 +15,57 @@ # 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 class for managers of different parts of the system +Managers are responsible for a certain aspect of the sytem. It is a logical +grouping of code relating to a portion of the system. In general other +components should be using the manager to make changes to the components that +it is responsible for. + +For example, other components that need to deal with volumes in some way, +should do so by calling methods on the VolumeManager instead of directly +changing fields in the database. This allows us to keep all of the code +relating to volumes in the same place. + +We have adopted a basic strategy of Smart managers and dumb data, which means +rather than attaching methods to data objects, components should call manager +methods that act on the data. + +Methods on managers that can be executed locally should be called directly. If +a particular method must execute on a remote host, this should be done via rpc +to the service that wraps the manager + +Managers should be responsible for most of the db access, and +non-implementation specific data. Anything implementation specific that can't +be generalized should be done by the Driver. + +In general, we prefer to have one manager with multiple drivers for different +implementations, but sometimes it makes sense to have multiple managers. You +can think of it this way: Abstract different overall strategies at the manager +level(FlatNetwork vs VlanNetwork), and different implementations at the driver +level(LinuxNetDriver vs CiscoNetDriver). + +Managers will often provide methods for initial setup of a host or periodic +tasksto a wrapping service. + +This module provides Manager, a base class for managers. """ from nova import utils from nova import flags +from nova.db import base from twisted.internet import defer FLAGS = flags.FLAGS -flags.DEFINE_string('db_driver', 'nova.db.api', - 'driver to use for volume creation') -class Manager(object): - """DB driver is injected in the init method""" +class Manager(base.Base): def __init__(self, host=None, db_driver=None): if not host: host = FLAGS.host self.host = host - if not db_driver: - db_driver = FLAGS.db_driver - self.db = utils.import_object(db_driver) # pylint: disable-msg=C0103 + super(Manager, self).__init__(db_driver) def periodic_tasks(self, context=None): """Tasks to be run at a periodic interval""" |