class_docstr: Implement a tunable consistent hashing ring.
docstr: Remove the given node from the continuum/ring.
  
  :param node_name: the node name.
docstr_tok: ["Remove","the","given","node","from","the","continuum\/ring",".",":","param","node_name",":","the","node","name","."]
code: def _remove_node(self, node_name):
      """Remove the given node from the continuum/ring.
  
      :param node_name: the node name.
      """
      try:
          node_conf = self._nodes.pop(node_name)
      except Exception:
          raise KeyError(
              f"node '{node_name}' not found, "
              f"available nodes: {list(self._nodes.keys())}"
          )
      else:
          self._distribution.pop(node_name)
          for w in range(0, node_conf["vnodes"] * node_conf["weight"]):
              del self._ring[self.hashi(f"{node_name}-{w}")]
          self._keys = sorted(self._ring.keys())
  
file_path: mars/mars/lib/uhashring/ring_meta.py
imports: from collections import Counter
  from hashlib import md5
label_desc: Use image node_id 4 for calling the MetaRing obj's underlying member method code with example usage: obj._remove_node(node_name) without return types