def _fetch_all(self):
        """
        Internal helper that fetches the ring from Redis, including any
        inactive nodes/replicas. Returns a list of tuples (start, replica,
        heartbeat, expired), where
        * start: start of the range for which the replica is responsible
        * replica: name of the replica
        * heartbeat: unix time stamp of the last heartbeat
        * expired: boolean denoting whether this replica is inactive
        """

        now = time.time()
        expiry_time = now - NODE_TIMEOUT

        data = self.conn.zrange(self.key, 0, -1, withscores=True)

        ring = []

        for node_data, heartbeat in data:
            start, replica = node_data.split(':', 1)
            ring.append((int(start), replica, heartbeat, heartbeat < expiry_time))

        ring = sorted(ring, key=operator.itemgetter(0))

        return ring
Internal helper that fetches the ring from Redis, including any
        inactive nodes/replicas. Returns a list of tuples (start, replica,
        heartbeat, expired), where
        * start: start of the range for which the replica is responsible
        * replica: name of the replica
        * heartbeat: unix time stamp of the last heartbeat
        * expired: boolean denoting whether this replica is inactive