docs: def wait_for_any_log(nodes, pattern, timeout, filename='system.log', marks=None):
      """
      Look for a pattern in the system.log of any in a given list
      of nodes.
      @param nodes The list of nodes whose logs to scan
      @param pattern The target pattern
      @param timeout How long to wait for the pattern. Note that
                      strictly speaking, timeout is not really a timeout,
                      but a maximum number of attempts. This implies that
                      the all the grepping takes no time at all, so it is
                      somewhat inaccurate, but probably close enough.
      @param marks A dict of nodes to marks in the file. Keys must match the first param list.
      @return The first node in whose log the pattern was found
      """
      if marks is None:
          marks = {}
      for _ in range(timeout):
          for node in nodes:
              found = node.grep_log(pattern, filename=filename, from_mark=marks.get(node, None))
              if found:
                  return node
          time.sleep(1)
  
      raise TimeoutError(time.strftime("%d %b %Y %H:%M:%S", time.gmtime()) +
                         " Unable to find: " + repr(pattern) + " in any node log within " + str(timeout) + "s")