def run_periodic_tasks(self, context, raise_on_error=False): """Tasks to be run at a periodic interval.""" idle_for = DEFAULT_INTERVAL for task_name, task in self._periodic_tasks: full_task_name = '.'.join([self.__class__.__name__, task_name]) now = timeutils.utcnow() spacing = self._periodic_spacing[task_name] last_run = self._periodic_last_run[task_name] # If a periodic task is _nearly_ due, then we'll run it early if spacing is not None and last_run is not None: due = last_run + datetime.timedelta(seconds=spacing) if not timeutils.is_soon(due, 0.2): idle_for = min(idle_for, timeutils.delta_seconds(now, due)) continue if spacing is not None: idle_for = min(idle_for, spacing) LOG.debug(_("Running periodic task %(full_task_name)s"), {"full_task_name": full_task_name}) self._periodic_last_run[task_name] = timeutils.utcnow() try: task(self, context) except Exception as e: if raise_on_error: raise LOG.exception(_("Error during %(full_task_name)s: %(e)s"), {"full_task_name": full_task_name, "e": e}) time.sleep(0) return idle_for
def _inner(): if initial_delay: greenthread.sleep(initial_delay) try: while self._running: start = timeutils.utcnow() self.f(*self.args, **self.kw) end = timeutils.utcnow() if not self._running: break delay = interval - timeutils.delta_seconds(start, end) print "## delay=%s" % delay if delay <= 0: LOG.warn( _('task run outlasted interval by %s sec') % -delay) greenthread.sleep(delay if delay > 0 else 0) except LoopingCallDone as e: print "#### exception=%s" % e.retvalue self.stop() done.send(e.retvalue) except Exception: LOG.exception(_('in fixed duration looping call')) done.send_exception(*sys.exc_info()) return else: done.send(True)
def run_periodic_tasks(self, context, raise_on_error=False): """Tasks to be run at a periodic interval.""" idle_for = DEFAULT_INTERVAL for task_name, task in self._periodic_tasks: full_task_name = '.'.join([self.__class__.__name__, task_name]) now = timeutils.utcnow() spacing = self._periodic_spacing[task_name] last_run = self._periodic_last_run[task_name] # If a periodic task is _nearly_ due, then we'll run it early if spacing is not None and last_run is not None: due = last_run + datetime.timedelta(seconds=spacing) if not timeutils.is_soon(due, 0.2): idle_for = min(idle_for, timeutils.delta_seconds(now, due)) continue if spacing is not None: idle_for = min(idle_for, spacing) LOG.debug(_("Running periodic task %(full_task_name)s"), locals()) self._periodic_last_run[task_name] = timeutils.utcnow() try: task(self, context) except Exception as e: if raise_on_error: raise LOG.exception(_("Error during %(full_task_name)s: %(e)s"), locals()) time.sleep(0) return idle_for
def _inner(): if initial_delay: greenthread.sleep(initial_delay) try: while self._running: start = timeutils.utcnow() self.f(*self.args, **self.kw) end = timeutils.utcnow() if not self._running: break delay = interval - timeutils.delta_seconds(start, end) if delay <= 0: LOG.warn(_('task run outlasted interval by %s sec') % -delay) greenthread.sleep(delay if delay > 0 else 0) except LoopingCallDone as e: self.stop() done.send(e.retvalue) except Exception: LOG.exception(_('in fixed duration looping call')) done.send_exception(*sys.exc_info()) return else: done.send(True)
def _test_create_time(self, func, resource, resources=None): if not resources: resources = resource + "s" _now = timeutils.utcnow() with func() as obj: _obj = self._show(resources, obj[resource]['id']) c_time = _obj[resource]['created_at'] _c = timeutils.parse_strtime(c_time) delta = timeutils.delta_seconds(_now, _c) self.assertTrue(delta > 0)
def _test_create_time(self, func, resource, resources=None): if not resources: resources = resource + "s" _now = timeutils.utcnow() with func() as obj: _obj = self._show(resources, obj[resource]['id']) c_time = _obj[resource]['created_at'] _c = timeutils.parse_strtime(c_time) delta = timeutils.delta_seconds(_now, _c) self.assertTrue(delta > 0)
def _get_cached_vswitch_existence(self, host): """Returns cached existence. Old and non-cached raise ValueError.""" entry = self.ivs_host_cache.get(host) if not entry: raise ValueError(_('No cache entry for host %s') % host) diff = timeutils.delta_seconds(entry['timestamp'], datetime.datetime.now()) if diff > CACHE_VSWITCH_TIME: self.ivs_host_cache.pop(host) raise ValueError(_('Expired cache entry for host %s') % host) return entry['exists']
def _get_eligible_ovs_vapp_agent(self, old_agent): chosen_agent = None latest_time = old_agent['heartbeat_timestamp'] cluster_id = old_agent['configurations'].get('cluster_id') for agent in self.agents: agent_cluster_id = agent['configurations'].get('cluster_id') if cluster_id != agent_cluster_id: continue delta = timeutils.delta_seconds(latest_time, agent['heartbeat_timestamp']) if delta > 0: latest_time = agent['heartbeat_timestamp'] chosen_agent = agent return chosen_agent
def test_router_create(self): name = 'router1' tenant_id = _uuid() expected_value = [('name', name), ('tenant_id', tenant_id), ('admin_state_up', True), ('status', 'ACTIVE'), ('external_gateway_info', None)] _now = timeutils.utcnow() with self.router(name='router1', admin_state_up=True, tenant_id=tenant_id) as router: for k, v in expected_value: self.assertEqual(router['router'][k], v) _created = timeutils.parse_strtime(router['router']['created_at']) delta = timeutils.delta_seconds(_now, _created) self.assertTrue(delta > 0)
def test_router_create(self): name = 'router1' tenant_id = _uuid() expected_value = [('name', name), ('tenant_id', tenant_id), ('admin_state_up', True), ('status', 'ACTIVE'), ('external_gateway_info', None)] _now = timeutils.utcnow() with self.router(name='router1', admin_state_up=True, tenant_id=tenant_id) as router: for k, v in expected_value: self.assertEqual(router['router'][k], v) _created = timeutils.parse_strtime(router['router']['created_at']) delta = timeutils.delta_seconds(_now, _created) self.assertTrue(delta > 0)
def get_agent_uptime(self, agent): return timeutils.delta_seconds(agent.started_at, agent.heartbeat_timestamp)