示例#1
0
    def report_state(self):
        """Update the state of this service in the datastore."""
        if not self.manager.is_working():
            # NOTE(dulek): If manager reports a problem we're not sending
            # heartbeats - to indicate that service is actually down.
            LOG.error(
                'Manager for service %(binary)s %(host)s is '
                'reporting problems, not sending heartbeat. '
                'Service will appear "down".', {
                    'binary': self.binary,
                    'host': self.host
                })
            return

        ctxt = context.get_admin_context()
        state_catalog = {}
        try:
            try:
                service_ref = db.service_get(ctxt, self.service_id)
            except exception.NotFound:
                LOG.debug('The service database object disappeared, '
                          'recreating it.')
                self._create_service_ref(ctxt)
                service_ref = db.service_get(ctxt, self.service_id)

            state_catalog['report_count'] = service_ref['report_count'] + 1

            db.service_update(ctxt, self.service_id, state_catalog)

            # TODO(termie): make this pattern be more elegant.
            if getattr(self, 'model_disconnected', False):
                self.model_disconnected = False
                LOG.error('Recovered model server connection!')

        except db_exc.DBConnectionError:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception('model server went away')

        # NOTE(jsbryant) Other DB errors can happen in HA configurations.
        # such errors shouldn't kill this thread, so we handle them here.
        except db_exc.DBError:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception('DBError encountered: ')

        except Exception:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception('Exception encountered: ')
示例#2
0
    def report_state(self):
        """Update the state of this service in the datastore."""
        if not self.manager.is_working():
            # NOTE(dulek): If manager reports a problem we're not sending
            # heartbeats - to indicate that service is actually down.
            LOG.error(_LE('Manager for service %(binary)s %(host)s is '
                          'reporting problems, not sending heartbeat. '
                          'Service will appear "down".'),
                      {'binary': self.binary,
                       'host': self.host})
            return

        ctxt = context.get_admin_context()
        state_catalog = {}
        try:
            try:
                service_ref = db.service_get(ctxt, self.service_id)
            except exception.NotFound:
                LOG.debug('The service database object disappeared, '
                          'recreating it.')
                self._create_service_ref(ctxt)
                service_ref = db.service_get(ctxt, self.service_id)

            state_catalog['report_count'] = service_ref['report_count'] + 1

            db.service_update(ctxt,
                              self.service_id, state_catalog)

            # TODO(termie): make this pattern be more elegant.
            if getattr(self, 'model_disconnected', False):
                self.model_disconnected = False
                LOG.error(_LE('Recovered model server connection!'))

        except db_exc.DBConnectionError:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception(_LE('model server went away'))

        # NOTE(jsbryant) Other DB errors can happen in HA configurations.
        # such errors shouldn't kill this thread, so we handle them here.
        except db_exc.DBError:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception(_LE('DBError encountered: '))

        except Exception:
            if not getattr(self, 'model_disconnected', False):
                self.model_disconnected = True
                LOG.exception(_LE('Exception encountered: '))
示例#3
0
 def test_service_update(self):
     service_ref = db.service_create(self.ctxt,
                                     {'host': 'hosttest3',
                                      'binary': 'binarytest3',
                                      'topic': 'topictest3',
                                      'report_count': 0})
     service_id = service_ref['id']
     service_update_ref = db.service_update(self.ctxt, service_id,
                                            {'host': 'hosttest4',
                                             'binary': 'binarytest4',
                                             'topic': 'topictest4',
                                             'report_count': 0})
     self.assertEqual(service_ref['host'], 'hosttest3')
     self.assertEqual(service_update_ref['host'], 'hosttest4')
示例#4
0
 def test_service_update(self):
     service_ref = db.service_create(
         self.ctxt, {
             'host': 'hosttest3',
             'binary': 'binarytest3',
             'topic': 'topictest3',
             'report_count': 0
         })
     service_id = service_ref['id']
     service_update_ref = db.service_update(
         self.ctxt, service_id, {
             'host': 'hosttest4',
             'binary': 'binarytest4',
             'topic': 'topictest4',
             'report_count': 0
         })
     self.assertEqual('hosttest3', service_ref['host'])
     self.assertEqual('hosttest4', service_update_ref['host'])
示例#5
0
 def save(self):
     updates = self.karbor_obj_get_changes()
     if updates:
         db.service_update(self._context, self.id, updates)
         self.obj_reset_changes()
示例#6
0
 def save(self):
     updates = self.karbor_obj_get_changes()
     if updates:
         db.service_update(self._context, self.id, updates)
         self.obj_reset_changes()