当前位置: 首页>>代码示例>>Python>>正文


Python ConsistentHashRing.get_nodes方法代码示例

本文整理汇总了Python中carbon.hashing.ConsistentHashRing.get_nodes方法的典型用法代码示例。如果您正苦于以下问题:Python ConsistentHashRing.get_nodes方法的具体用法?Python ConsistentHashRing.get_nodes怎么用?Python ConsistentHashRing.get_nodes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在carbon.hashing.ConsistentHashRing的用法示例。


在下文中一共展示了ConsistentHashRing.get_nodes方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: ConsistentHashingRouter

# 需要导入模块: from carbon.hashing import ConsistentHashRing [as 别名]
# 或者: from carbon.hashing.ConsistentHashRing import get_nodes [as 别名]
class ConsistentHashingRouter(DatapointRouter):
  plugin_name = 'consistent-hashing'

  def __init__(self, settings):
    replication_factor = settings.REPLICATION_FACTOR
    diverse_replicas = settings.DIVERSE_REPLICAS

    self.replication_factor = int(replication_factor)
    self.diverse_replicas = diverse_replicas
    self.instance_ports = {}  # { (server, instance) : port }
    self.ring = ConsistentHashRing([])

  def addDestination(self, destination):
    (server, port, instance) = destination
    if (server, instance) in self.instance_ports:
      raise Exception("destination instance (%s, %s) already configured" % (server, instance))
    self.instance_ports[(server, instance)] = port
    self.ring.add_node((server, instance))

  def removeDestination(self, destination):
    (server, port, instance) = destination
    if (server, instance) not in self.instance_ports:
      raise Exception("destination instance (%s, %s) not configured" % (server, instance))
    del self.instance_ports[(server, instance)]
    self.ring.remove_node((server, instance))

  def getDestinations(self, metric):
    key = self.getKey(metric)
    if self.diverse_replicas:
      used_servers = set()
      for (server, instance) in self.ring.get_nodes(key):
        if server in used_servers:
          continue
        else:
          used_servers.add(server)
          port = self.instance_ports[(server, instance)]
          yield (server, port, instance)
        if len(used_servers) >= self.replication_factor:
          return
    else:
      for (count, node) in enumerate(self.ring.get_nodes(key)):
        if count == self.replication_factor:
          return
        (server, instance) = node
        port = self.instance_ports[(server, instance)]
        yield (server, port, instance)

  def getKey(self, metric):
    return metric

  def setKeyFunction(self, func):
    self.getKey = func

  def setKeyFunctionFromModule(self, keyfunc_spec):
    module_path, func_name = keyfunc_spec.rsplit(':', 1)
    module_file = open(module_path, 'U')
    description = ('.py', 'U', imp.PY_SOURCE)
    module = imp.load_module('keyfunc_module', module_file, module_path, description)
    keyfunc = getattr(module, func_name)
    self.setKeyFunction(keyfunc)
开发者ID:criteo-forks,项目名称:carbon,代码行数:62,代码来源:routers.py

示例2: ConsistentHashingRouter

# 需要导入模块: from carbon.hashing import ConsistentHashRing [as 别名]
# 或者: from carbon.hashing.ConsistentHashRing import get_nodes [as 别名]
class ConsistentHashingRouter(DatapointRouter):
    def __init__(self, replication_factor=1):
        self.replication_factor = int(replication_factor)
        self.instance_ports = {}  # { (server, instance) : port }
        self.ring = ConsistentHashRing([])

    def addDestination(self, destination):
        (server, port, instance) = destination
        if (server, instance) in self.instance_ports:
            raise Exception("destination instance (%s, %s) already configured" % (server, instance))
        self.instance_ports[(server, instance)] = port
        self.ring.add_node((server, instance))

    def removeDestination(self, destination):
        (server, port, instance) = destination
        if (server, instance) not in self.instance_ports:
            raise Exception("destination instance (%s, %s) not configured" % (server, instance))
        del self.instance_ports[(server, instance)]
        self.ring.remove_node((server, instance))

    def getDestinations(self, metric):
        key = self.getKey(metric)

        used_servers = set()
        for (server, instance) in self.ring.get_nodes(key):
            if server in used_servers:
                continue
            else:
                used_servers.add(server)
                port = self.instance_ports[(server, instance)]
                yield (server, port, instance)

            if len(used_servers) >= self.replication_factor:
                return

    def getKey(self, metric):
        return metric

    def setKeyFunction(self, func):
        self.getKey = func

    def setKeyFunctionFromModule(self, keyfunc_spec):
        module_path, func_name = keyfunc_spec.rsplit(":", 1)
        module_file = open(module_path, "U")
        description = (".py", "U", imp.PY_SOURCE)
        module = imp.load_module("keyfunc_module", module_file, module_path, description)
        keyfunc = getattr(module, func_name)
        self.setKeyFunction(keyfunc)
开发者ID:Cue,项目名称:graphite,代码行数:50,代码来源:routers.py

示例3: ConsistentHashingRouter

# 需要导入模块: from carbon.hashing import ConsistentHashRing [as 别名]
# 或者: from carbon.hashing.ConsistentHashRing import get_nodes [as 别名]
class ConsistentHashingRouter(DatapointRouter):
  def __init__(self, replication_factor=1):
    self.replication_factor = int(replication_factor)
    self.instance_ports = {} # { (server, instance) : port }
    self.ring = ConsistentHashRing([])

  def addDestination(self, destination):
    (server, port, instance) = destination
    if (server, instance) in self.instance_ports:
      raise Exception("destination instance (%s, %s) already configured" % (server, instance))
    self.instance_ports[ (server, instance) ] = port
    self.ring.add_node( (server, instance) )

  def removeDestination(self, destination):
    (server, port, instance) = destination
    if (server, instance) not in self.instance_ports:
      raise Exception("destination instance (%s, %s) not configured" % (server, instance))
    del self.instance_ports[ (server, instance) ]
    self.ring.remove_node( (server, instance) )

  def getDestinations(self, metric):
    key = self.getKey(metric)

    for count,node in enumerate(self.ring.get_nodes(key)):
      if count == self.replication_factor:
        return
      (server, instance) = node
      port = self.instance_ports[ (server, instance) ]
      yield (server, port, instance)

  #def getKey(self, metric):
  #  return metric
  
  def getKey(self, metric):
    #RBA: modification done to ensure that all the metrics to be aggregated are processed by the same aggregator
    return metric.rsplit('.',1)[0]
  
  def setKeyFunction(self, func):
    self.getKey = func

  def setKeyFunctionFromModule(self, keyfunc_spec):
    module_path, func_name = keyfunc_spec.rsplit(':', 1)
    module_file = open(module_path, 'U')
    description = ('.py', 'U', imp.PY_SOURCE)
    module = imp.load_module('keyfunc_module', module_file, module_path, description)
    keyfunc = getattr(module, func_name)
    self.setKeyFunction(keyfunc)
开发者ID:dmichau,项目名称:carbon,代码行数:49,代码来源:routers.py

示例4: test_11_get_nodes

# 需要导入模块: from carbon.hashing import ConsistentHashRing [as 别名]
# 或者: from carbon.hashing.ConsistentHashRing import get_nodes [as 别名]
 def test_11_get_nodes(self):
     """Trigger bisect on identical first key, see: issues/766"""
     ring = ConsistentHashRing([], replica_count=1)
     ring.add_node(("1", "1"))
     n = ring.get_nodes("('1', '1'):0")
     self.assertEqual([('1', '1')], list(n))
开发者ID:NixM0nk3y,项目名称:carbon,代码行数:8,代码来源:test_hashing.py


注:本文中的carbon.hashing.ConsistentHashRing.get_nodes方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。