def check_repeaters(): start = datetime.utcnow() cutoff = start + CHECK_REPEATERS_INTERVAL redis_client = get_redis_client().client.get_client() # Timeout for slightly less than periodic check check_repeater_lock = redis_client.lock( CHECK_REPEATERS_KEY, timeout=CHECK_REPEATERS_INTERVAL.seconds - 10) if not check_repeater_lock.acquire(blocking=False): return for record in iterate_repeat_records(start): now = datetime.utcnow() lock_key = _get_repeat_record_lock_key(record) if now > cutoff: break lock = redis_client.lock(lock_key, timeout=60 * 60 * 48) if not lock.acquire(blocking=False): continue process_repeat_record.delay(record) try: check_repeater_lock.release() except LockError: # Ignore if already released pass
def check_repeaters(): start = datetime.utcnow() cutoff = start + CHECK_REPEATERS_INTERVAL redis_client = get_redis_client().client.get_client() # Timeout for slightly less than periodic check check_repeater_lock = redis_client.lock( CHECK_REPEATERS_KEY, timeout=CHECK_REPEATERS_INTERVAL.seconds - 10 ) if not check_repeater_lock.acquire(blocking=False): return for record in iterate_repeat_records(start): now = datetime.utcnow() lock_key = _get_repeat_record_lock_key(record) if now > cutoff: break lock = redis_client.lock(lock_key, timeout=60 * 60 * 48) if not lock.acquire(blocking=False): continue process_repeat_record.delay(record) try: check_repeater_lock.release() except LockError: # Ignore if already released pass
def test_iterate_repeat_records(self): records = list(iterate_repeat_records(datetime.utcnow(), chunk_size=2)) self.assertEqual(len(records), 4) # Should grab all but the succeeded one
def test_iterate_repeat_records(self): records = list(iterate_repeat_records(datetime.utcnow(), chunk_size=2)) self.assertEqual(len(records), 3) # Should grab all but the succeeded one