Update the clustering and job processor app to use the ClusterScope setting and not their own settings singleton

This commit is contained in:
Roberto Rosario
2012-09-15 04:56:58 -04:00
parent fa2795dd96
commit a4bbc65508
17 changed files with 244 additions and 218 deletions
+8 -27
View File
@@ -30,6 +30,14 @@ class NodeManager(models.Manager):
def live_nodes(self):
return self.model.objects.filter(state=NODE_STATE_HEALTHY)
def dead_nodes(self):
from .literals import DEFAULT_NODE_HEARTBEAT_TIMEOUT
return self.model.objects.filter(state=NODE_STATE_HEALTHY).filter(heartbeat__lt=datetime.datetime.now() - datetime.timedelta(seconds=DEFAULT_NODE_HEARTBEAT_TIMEOUT))
def check_dead_nodes(self):
for node in self.dead_nodes():
node.mark_as_dead()
class Node(models.Model):
hostname = models.CharField(max_length=255, verbose_name=_(u'hostname'), unique=True)
@@ -77,30 +85,3 @@ class Node(models.Model):
class Meta:
verbose_name = _(u'node')
verbose_name_plural = _(u'nodes')
class ClusteringConfigManager(models.Manager):
def dead_nodes(self):
return Node.objects.filter(state=NODE_STATE_HEALTHY).filter(heartbeat__lt=datetime.datetime.now() - datetime.timedelta(seconds=self.model.get().node_heartbeat_timeout))
def check_dead_nodes(self):
for node in self.dead_nodes():
node.mark_as_dead()
class ClusteringConfig(Singleton):
node_heartbeat_interval = models.PositiveIntegerField(verbose_name=(u'node heartbeat interval (in seconds)'), help_text=_(u'Interval of time for the node\'s heartbeat update to the cluster.'), default=DEFAULT_NODE_HEARTBEAT_INTERVAL)
node_heartbeat_timeout = models.PositiveIntegerField(verbose_name=(u'node heartbeat timeout (in seconds)'), help_text=_(u'After this amount of time a node without heartbeat updates is considered dead and removed from the cluster node list.'), default=DEFAULT_NODE_HEARTBEAT_TIMEOUT)
dead_node_removal_interval = models.PositiveIntegerField(verbose_name=(u'dead node check and removal interval (in seconds)'), help_text=_(u'Interval of time to check the cluster for unresponsive nodes and remove them from the cluster.'), default=DEFAULT_DEAD_NODE_REMOVAL_INTERVAL)
cluster = ClusteringConfigManager()
def __unicode__(self):
return ugettext('clustering config')
#def clean(self):
# if self.node_heartbeat_interval > self.node_heartbeat_timeout:
# raise ValidationError(_(u'Heartbeat interval cannot be greater than heartbeat timeout or else nodes will always be rated as "dead"'))
class Meta:
verbose_name = verbose_name_plural = _(u'clustering config')