diff options
author | Dan Smith <danms@us.ibm.com> | 2013-01-04 09:01:29 -0800 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2013-01-05 03:26:30 +0000 |
commit | ba2a0565a6451ee3227b6e11bbdd8ea75cbf1fc3 (patch) | |
tree | 1fb950f9c010e317bff621da557ca39d9219cd76 | |
parent | 6323c80323d01e042558bd78e74c5d6da66a1e17 (diff) | |
download | nova-ba2a0565a6451ee3227b6e11bbdd8ea75cbf1fc3.tar.gz nova-ba2a0565a6451ee3227b6e11bbdd8ea75cbf1fc3.tar.xz nova-ba2a0565a6451ee3227b6e11bbdd8ea75cbf1fc3.zip |
Move vol_usage methods to conductor
This patch moves the compute/manager's use of the following methods
to conductor:
- vol_usage_update()
- vol_get_usage_by_time()
Related to blueprint no-db-compute-manager
Change-Id: I51a30d66be51eb532cb19c8b06b87ad07387dd54
-rw-r--r-- | nova/compute/manager.py | 23 | ||||
-rw-r--r-- | nova/conductor/api.py | 24 | ||||
-rw-r--r-- | nova/conductor/manager.py | 13 | ||||
-rw-r--r-- | nova/conductor/rpcapi.py | 17 | ||||
-rw-r--r-- | nova/tests/conductor/test_conductor.py | 20 |
5 files changed, 87 insertions, 10 deletions
diff --git a/nova/compute/manager.py b/nova/compute/manager.py index f01fa265b..588e437f9 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -2430,9 +2430,11 @@ class ComputeManager(manager.SchedulerDependentManager): if vol_stats: LOG.debug(_("Updating volume usage cache with totals")) rd_req, rd_bytes, wr_req, wr_bytes, flush_ops = vol_stats - self.db.vol_usage_update(context, volume_id, rd_req, rd_bytes, - wr_req, wr_bytes, instance['id'], - update_totals=True) + self.conductor_api.vol_usage_update(context, volume_id, + rd_req, rd_bytes, + wr_req, wr_bytes, + instance, + update_totals=True) self._detach_volume(context, instance, bdm) volume = self.volume_api.get(context, volume_id) @@ -3056,11 +3058,13 @@ class ComputeManager(manager.SchedulerDependentManager): for usage in vol_usages: # Allow switching of greenthreads between queries. greenthread.sleep(0) - self.db.vol_usage_update(context, usage['volume'], usage['rd_req'], - usage['rd_bytes'], usage['wr_req'], - usage['wr_bytes'], - usage['instance']['uuid'], - last_refreshed=refreshed) + self.conductor_api.vol_usage_update(context, usage['volume'], + usage['rd_req'], + usage['rd_bytes'], + usage['wr_req'], + usage['wr_bytes'], + usage['instance'], + last_refreshed=refreshed) def _send_volume_usage_notifications(self, context, start_time): """Queries vol usage cache table and sends a vol usage notification""" @@ -3068,7 +3072,8 @@ class ComputeManager(manager.SchedulerDependentManager): # the last run of get_all_volume_usage and this one # but detach stats will be recorded in db and returned from # vol_get_usage_by_time - vol_usages = self.db.vol_get_usage_by_time(context, start_time) + vol_usages = self.conductor_api.vol_get_usage_by_time(context, + start_time) for vol_usage in vol_usages: notifier.notify(context, 'volume.%s' % self.host, 'volume.usage', notifier.INFO, diff --git a/nova/conductor/api.py b/nova/conductor/api.py index ca65e83db..883b368df 100644 --- a/nova/conductor/api.py +++ b/nova/conductor/api.py @@ -198,6 +198,18 @@ class LocalAPI(object): return self._manager.block_device_mapping_destroy( context, instance=instance, volume_id=volume_id) + def vol_get_usage_by_time(self, context, start_time): + return self._manager.vol_get_usage_by_time(context, start_time) + + def vol_usage_update(self, context, vol_id, rd_req, rd_bytes, wr_req, + wr_bytes, instance, last_refreshed=None, + update_totals=False): + return self._manager.vol_usage_update(context, vol_id, + rd_req, rd_bytes, + wr_req, wr_bytes, + instance, last_refreshed, + update_totals) + class API(object): """Conductor API that does updates via RPC to the ConductorManager""" @@ -348,3 +360,15 @@ class API(object): volume_id): return self.conductor_rpcapi.block_device_mapping_destroy( context, instance=instance, volume_id=volume_id) + + def vol_get_usage_by_time(self, context, start_time): + return self.conductor_rpcapi.vol_get_usage_by_time(context, start_time) + + def vol_usage_update(self, context, vol_id, rd_req, rd_bytes, wr_req, + wr_bytes, instance, last_refreshed=None, + update_totals=False): + return self.conductor_rpcapi.vol_usage_update(context, vol_id, + rd_req, rd_bytes, + wr_req, wr_bytes, + instance, last_refreshed, + update_totals) diff --git a/nova/conductor/manager.py b/nova/conductor/manager.py index 7ddfd497e..1585a6e83 100644 --- a/nova/conductor/manager.py +++ b/nova/conductor/manager.py @@ -43,7 +43,7 @@ datetime_fields = ['launched_at', 'terminated_at'] class ConductorManager(manager.SchedulerDependentManager): """Mission: TBD""" - RPC_API_VERSION = '1.18' + RPC_API_VERSION = '1.19' def __init__(self, *args, **kwargs): super(ConductorManager, self).__init__(service_name='conductor', @@ -215,3 +215,14 @@ class ConductorManager(manager.SchedulerDependentManager): def instance_type_get(self, context, instance_type_id): result = self.db.instance_type_get(context, instance_type_id) return jsonutils.to_primitive(result) + + def vol_get_usage_by_time(self, context, start_time): + result = self.db.vol_get_usage_by_time(context, start_time) + return jsonutils.to_primitive(result) + + def vol_usage_update(self, context, vol_id, rd_req, rd_bytes, wr_req, + wr_bytes, instance, last_refreshed=None, + update_totals=False): + self.db.vol_usage_update(context, vol_id, rd_req, rd_bytes, wr_req, + wr_bytes, instance['uuid'], last_refreshed, + update_totals) diff --git a/nova/conductor/rpcapi.py b/nova/conductor/rpcapi.py index aeaad8868..21ee59d31 100644 --- a/nova/conductor/rpcapi.py +++ b/nova/conductor/rpcapi.py @@ -50,6 +50,7 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): 1.16 - Added instance_destroy 1.17 - Added instance_info_cache_delete 1.18 - Added instance_type_get + 1.19 - Added vol_get_usage_by_time and vol_usage_update """ BASE_RPC_API_VERSION = '1.0' @@ -208,3 +209,19 @@ class ConductorAPI(nova.openstack.common.rpc.proxy.RpcProxy): msg = self.make_msg('instance_type_get', instance_type_id=instance_type_id) return self.call(context, msg, version='1.18') + + def vol_get_usage_by_time(self, context, start_time): + start_time_p = jsonutils.to_primitive(start_time) + msg = self.make_msg('vol_get_usage_by_time', start_time=start_time_p) + return self.call(context, msg, version='1.19') + + def vol_usage_update(self, context, vol_id, rd_req, rd_bytes, wr_req, + wr_bytes, instance, last_refreshed=None, + update_totals=False): + instance_p = jsonutils.to_primitive(instance) + msg = self.make_msg('vol_usage_update', vol_id=vol_id, rd_req=rd_req, + rd_bytes=rd_bytes, wr_req=wr_req, + wr_bytes=wr_bytes, + instance=instance_p, last_refreshed=last_refreshed, + update_totals=update_totals) + return self.call(context, msg, version='1.19') diff --git a/nova/tests/conductor/test_conductor.py b/nova/tests/conductor/test_conductor.py index 454d5347a..d2c3df19a 100644 --- a/nova/tests/conductor/test_conductor.py +++ b/nova/tests/conductor/test_conductor.py @@ -308,6 +308,26 @@ class _BaseTestCase(object): result = self.conductor.instance_type_get(self.context, 'fake-id') self.assertEqual(result, 'fake-type') + def test_vol_get_usage_by_time(self): + self.mox.StubOutWithMock(db, 'vol_get_usage_by_time') + db.vol_get_usage_by_time(self.context, 'fake-time').AndReturn( + 'fake-usage') + self.mox.ReplayAll() + result = self.conductor.vol_get_usage_by_time(self.context, + 'fake-time') + self.assertEqual(result, 'fake-usage') + + def test_vol_usage_update(self): + self.mox.StubOutWithMock(db, 'vol_usage_update') + db.vol_usage_update(self.context, 'fake-vol', 'rd-req', 'rd-bytes', + 'wr-req', 'wr-bytes', 'fake-id', 'fake-refr', + 'fake-bool') + self.mox.ReplayAll() + self.conductor.vol_usage_update(self.context, 'fake-vol', 'rd-req', + 'rd-bytes', 'wr-req', 'wr-bytes', + {'uuid': 'fake-id'}, 'fake-refr', + 'fake-bool') + class ConductorTestCase(_BaseTestCase, test.TestCase): """Conductor Manager Tests""" |