diff options
| author | Russell Bryant <rbryant@redhat.com> | 2013-01-14 17:39:29 -0500 |
|---|---|---|
| committer | Russell Bryant <rbryant@redhat.com> | 2013-01-18 10:31:55 -0600 |
| commit | e9d342637b78a4d2ef13852905ee4a2d88b48af2 (patch) | |
| tree | 5cfd0df970dc52d737a132837f2022311589e8c0 | |
| parent | e3a729b7c8873146d00d915a07094d327f97d184 (diff) | |
| download | nova-e9d342637b78a4d2ef13852905ee4a2d88b48af2.tar.gz nova-e9d342637b78a4d2ef13852905ee4a2d88b48af2.tar.xz nova-e9d342637b78a4d2ef13852905ee4a2d88b48af2.zip | |
Remove some db calls from db servicegroup driver.
The base service code already ensures that a service record is created.
Store that in the service object. Then down in the servicegroup db
driver, access it instead of having to go look it up again.
Part of bp no-db-compute.
Change-Id: Ife3c98c29c6f654585e14ded5a9b4c7e3bec226d
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 1 | ||||
| -rw-r--r-- | nova/service.py | 8 | ||||
| -rw-r--r-- | nova/servicegroup/drivers/db.py | 13 |
3 files changed, 8 insertions, 14 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index 970332896..4a752d177 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -448,6 +448,7 @@ def service_update(context, service_id, values): service_ref = service_get(context, service_id, session=session) service_ref.update(values) service_ref.save(session=session) + return service_ref ################### diff --git a/nova/service.py b/nova/service.py index 0fde14baa..de000bfa8 100644 --- a/nova/service.py +++ b/nova/service.py @@ -421,12 +421,11 @@ class Service(object): self.model_disconnected = False ctxt = context.get_admin_context() try: - service_ref = self.conductor_api.service_get_by_args(ctxt, - self.host, - self.binary) + self.service_ref = self.conductor_api.service_get_by_args(ctxt, + self.host, self.binary) self.service_id = service_ref['id'] except exception.NotFound: - self._create_service_ref(ctxt) + self.service_ref = self._create_service_ref(ctxt) if self.backdoor_port is not None: self.manager.backdoor_port = self.backdoor_port @@ -479,6 +478,7 @@ class Service(object): } service = self.conductor_api.service_create(context, svc_values) self.service_id = service['id'] + return service def __getattr__(self, key): manager = self.__dict__.get('manager', None) diff --git a/nova/servicegroup/drivers/db.py b/nova/servicegroup/drivers/db.py index 075db3ed8..e304f0f20 100644 --- a/nova/servicegroup/drivers/db.py +++ b/nova/servicegroup/drivers/db.py @@ -76,17 +76,10 @@ class DbDriver(api.ServiceGroupDriver): ctxt = context.get_admin_context() state_catalog = {} try: - try: - service_ref = db.service_get(ctxt, service.service_id) - except exception.NotFound: - LOG.debug(_('The service database object disappeared, ' - 'Recreating it.')) - service._create_service_ref(ctxt) - service_ref = db.service_get(ctxt, service.service_id) + report_count = service.service_ref['report_count'] + 1 + state_catalog['report_count'] = report_count - state_catalog['report_count'] = service_ref['report_count'] + 1 - - db.service_update(ctxt, + service.service_ref = db.service_update(ctxt, service.service_id, state_catalog) # TODO(termie): make this pattern be more elegant. |
