mirror of
https://github.com/internetarchive/warcprox.git
synced 2025-01-18 13:22:09 +01:00
Merge pull request #4 from internetarchive/fixes-no-unique-service-after-nomination
Fixes no unique service after nomination
This commit is contained in:
commit
9b8b708c8c
@ -20,6 +20,7 @@ import rethinkdb as r
|
|||||||
import logging
|
import logging
|
||||||
import socket
|
import socket
|
||||||
import os
|
import os
|
||||||
|
import doublethink
|
||||||
|
|
||||||
class ServiceRegistry(object):
|
class ServiceRegistry(object):
|
||||||
'''
|
'''
|
||||||
@ -220,6 +221,8 @@ class ServiceRegistry(object):
|
|||||||
the unique service, if there is one and it is healthy, otherwise
|
the unique service, if there is one and it is healthy, otherwise
|
||||||
None
|
None
|
||||||
'''
|
'''
|
||||||
|
# use the same concept of 'now' for all queries
|
||||||
|
now = doublethink.utcnow()
|
||||||
if candidate is not None:
|
if candidate is not None:
|
||||||
candidate['id'] = role
|
candidate['id'] = role
|
||||||
|
|
||||||
@ -231,8 +234,8 @@ class ServiceRegistry(object):
|
|||||||
if not (isinstance(val, float) or isinstance(val, int)) or val <= 0:
|
if not (isinstance(val, float) or isinstance(val, int)) or val <= 0:
|
||||||
raise Exception('heartbeat_interval must be a number > 0')
|
raise Exception('heartbeat_interval must be a number > 0')
|
||||||
|
|
||||||
candidate['first_heartbeat'] = r.now()
|
candidate['first_heartbeat'] = now
|
||||||
candidate['last_heartbeat'] = r.now()
|
candidate['last_heartbeat'] = now
|
||||||
if not 'host' in candidate:
|
if not 'host' in candidate:
|
||||||
candidate['host'] = socket.gethostname()
|
candidate['host'] = socket.gethostname()
|
||||||
if not 'pid' in candidate:
|
if not 'pid' in candidate:
|
||||||
@ -243,7 +246,7 @@ class ServiceRegistry(object):
|
|||||||
lambda row: r.branch(
|
lambda row: r.branch(
|
||||||
r.branch(
|
r.branch(
|
||||||
row,
|
row,
|
||||||
row['last_heartbeat'] > r.now() - row['heartbeat_interval'] * 3,
|
row['last_heartbeat'] > now - row['heartbeat_interval'] * 3,
|
||||||
False),
|
False),
|
||||||
row, candidate),
|
row, candidate),
|
||||||
return_changes='always').run()
|
return_changes='always').run()
|
||||||
@ -256,7 +259,7 @@ class ServiceRegistry(object):
|
|||||||
|
|
||||||
results = list(self.rr.table(
|
results = list(self.rr.table(
|
||||||
'services', read_mode='majority').get_all(role).filter(
|
'services', read_mode='majority').get_all(role).filter(
|
||||||
lambda row: row['last_heartbeat'] > r.now() - row['heartbeat_interval'] * 3).run())
|
lambda row: row['last_heartbeat'] > now - row['heartbeat_interval'] * 3).run())
|
||||||
if results:
|
if results:
|
||||||
return results[0]
|
return results[0]
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user