diff --git a/ppf.py b/ppf.py index d03f9bd..607d57c 100644 --- a/ppf.py +++ b/ppf.py @@ -498,8 +498,6 @@ def worker_main(config): jobs_completed = 0 proxies_tested = 0 start_time = time.time() - last_tor_check = time.time() - tor_check_interval = 300 # Check Tor every 5 minutes current_tor_ip = None consecutive_tor_failures = 0 worker_profiling = config.args.profile or config.common.profiling @@ -546,33 +544,33 @@ def worker_main(config): try: while True: - # Periodic Tor health check - now = time.time() - if now - last_tor_check > tor_check_interval: - working, tor_ip = check_tor_connectivity(config.torhosts) - last_tor_check = now - if working: + # Tor check before claiming work - don't claim if Tor is down + working, tor_ip = check_tor_connectivity(config.torhosts) + if not working: + consecutive_tor_failures += 1 + _log('tor down before claiming work (consecutive: %d)' % consecutive_tor_failures, 'warn') + try: + worker_send_heartbeat(server_url, wstate['worker_key'], False, None, worker_profiling) + except NeedReregister: + do_register() + if consecutive_tor_failures >= 2: + _log('tor appears down, waiting before claiming work', 'error') + working, current_tor_ip = wait_for_tor() consecutive_tor_failures = 0 - if tor_ip != current_tor_ip: - _log('tor circuit rotated: %s' % tor_ip, 'info') - current_tor_ip = tor_ip - # Send periodic heartbeat - try: - worker_send_heartbeat(server_url, wstate['worker_key'], True, tor_ip, worker_profiling) - except NeedReregister: - do_register() else: - consecutive_tor_failures += 1 - _log('tor connectivity failed (consecutive: %d)' % consecutive_tor_failures, 'warn') - if consecutive_tor_failures >= 2: - _log('tor appears down, pausing work', 'error') - try: - worker_send_heartbeat(server_url, wstate['worker_key'], False, None, worker_profiling) - except NeedReregister: - do_register() - working, current_tor_ip = wait_for_tor() - consecutive_tor_failures = 0 - last_tor_check = time.time() + time.sleep(10) + continue + else: + consecutive_tor_failures = 0 + if tor_ip != current_tor_ip: + if current_tor_ip: + _log('tor circuit rotated: %s' % tor_ip, 'info') + current_tor_ip = tor_ip + # Send heartbeat to manager + try: + worker_send_heartbeat(server_url, wstate['worker_key'], True, tor_ip, worker_profiling) + except NeedReregister: + do_register() # Get work from master try: