def set(self, key, value, time=0, min_compress_len=0): """Sets the value for a key.""" timeout = 0 if time != 0: timeout = timeutils.utcnow_ts() + time self.cache[key] = (timeout, value) return True
def testExpiredClaims(self): """Test that old claims get cleaned up automatically if not finished or aborted explicitly. """ claim = self.tracker.begin_resource_claim(self.context, memory_mb=2, disk_gb=2) claim.expire_ts = timeutils.utcnow_ts() - 1 self.assertTrue(claim.is_expired()) # and an unexpired claim claim2 = self.tracker.begin_resource_claim(self.context, memory_mb=1, disk_gb=1) self.assertEqual(2, len(self.tracker.claims)) self.assertEqual(2 + 1, self.tracker.compute_node['memory_mb_used']) self.assertEqual(2 + 1, self.tracker.compute_node['local_gb_used']) # expired claims get expunged when audit runs: self.tracker.update_available_resource(self.context) self.assertEqual(1, len(self.tracker.claims)) self.assertEqual(1, self.tracker.compute_node['memory_mb_used']) self.assertEqual(1, self.tracker.compute_node['local_gb_used']) # and just call finish & abort to ensure expired claims do not cause # any other explosions: self.tracker.abort_resource_claim(self.context, claim) self.tracker.finish_resource_claim(claim)
def get(self, key): """Retrieves the value for a key or None. this expunges expired keys during each get""" for k in self.cache.keys(): (timeout, _value) = self.cache[k] if timeout and timeutils.utcnow_ts() >= timeout: del self.cache[k] return self.cache.get(key, (0, None))[1]
def testExpiredClaims(self): """Test that old claims get cleaned up automatically if not finished or aborted explicitly. """ instance = self._fake_instance(memory_mb=2, root_gb=2, ephemeral_gb=0) claim = self.tracker.begin_resource_claim(self.context, instance) claim.expire_ts = timeutils.utcnow_ts() - 1 self.assertTrue(claim.is_expired()) # and an unexpired claim instance2 = self._fake_instance(memory_mb=1, root_gb=1, ephemeral_gb=0) claim2 = self.tracker.begin_resource_claim(self.context, instance2) self.assertEqual(2, len(self.tracker.claims)) self.assertEqual(2 + 1, self.tracker.compute_node['memory_mb_used']) self.assertEqual(2 + 1, self.tracker.compute_node['local_gb_used']) # expired claims get expunged when audit runs: self.tracker.update_available_resource(self.context) self.assertEqual(1, len(self.tracker.claims)) self.assertEqual(2, len(self.tracker.tracked_instances)) # the expired claim's instance is assumed to still exist, so the # resources should be counted: self.assertEqual(2 + 1, self.tracker.compute_node['memory_mb_used']) self.assertEqual(2 + 1, self.tracker.compute_node['local_gb_used']) # this abort should do nothing because the claim was purged due to # expiration: self.tracker.abort_resource_claim(self.context, claim) # call finish on claim2: self.tracker.finish_resource_claim(claim2) # should have usage from both instances: self.assertEqual(1 + 2, self.tracker.compute_node['memory_mb_used']) self.assertEqual(1 + 2, self.tracker.compute_node['local_gb_used'])
def test_service_is_up(self): serv = self.useFixture( ServiceFixture(self._host, self._binary, self._topic)).serv serv.start() service_ref = db.service_get_by_args(self._ctx, self._host, self._binary) fake_now = 1000 down_time = 5 self.flags(service_down_time=down_time) self.mox.StubOutWithMock(timeutils, 'utcnow_ts') self.servicegroup_api = servicegroup.API() hostkey = str("%s:%s" % (self._topic, self._host)) # Up (equal) timeutils.utcnow_ts().AndReturn(fake_now) timeutils.utcnow_ts().AndReturn(fake_now + down_time - 1) self.mox.ReplayAll() self.servicegroup_api._driver.mc.set(hostkey, timeutils.utcnow(), time=down_time) result = self.servicegroup_api.service_is_up(service_ref) self.assertTrue(result) self.mox.ResetAll() # Up timeutils.utcnow_ts().AndReturn(fake_now) timeutils.utcnow_ts().AndReturn(fake_now + down_time - 2) self.mox.ReplayAll() self.servicegroup_api._driver.mc.set(hostkey, timeutils.utcnow(), time=down_time) result = self.servicegroup_api.service_is_up(service_ref) self.assertTrue(result) self.mox.ResetAll() # Down timeutils.utcnow_ts().AndReturn(fake_now) timeutils.utcnow_ts().AndReturn(fake_now + down_time) self.mox.ReplayAll() self.servicegroup_api._driver.mc.set(hostkey, timeutils.utcnow(), time=down_time) result = self.servicegroup_api.service_is_up(service_ref) self.assertFalse(result) self.mox.ResetAll() # Down timeutils.utcnow_ts().AndReturn(fake_now) timeutils.utcnow_ts().AndReturn(fake_now + down_time + 1) self.mox.ReplayAll() self.servicegroup_api._driver.mc.set(hostkey, timeutils.utcnow(), time=down_time) result = self.servicegroup_api.service_is_up(service_ref) self.assertFalse(result) self.mox.ResetAll()
def is_expired(self): """Determine if this adjustment is old enough that we can assume it's no longer needed. """ return timeutils.utcnow_ts() > self.expire_ts
def __init__(self, instance, timeout): self.instance = jsonutils.to_primitive(instance) self.timeout = timeout self.expire_ts = timeutils.utcnow_ts() + timeout
def __init__(self, claim_id, memory_mb, disk_gb, timeout, *args, **kwargs): self.claim_id = claim_id self.memory_mb = memory_mb self.disk_gb = disk_gb self.timeout = timeout self.expire_ts = timeutils.utcnow_ts() + timeout