code: def _run_forever(self):
      idle_cycles = 0
      while True:
          self._indexing_in_progress = False
          for run_hash in self._next_stalled_run():
              logger.info(
                  f"Found un-indexed run {run_hash}. Indexing..."
              )
              self._indexing_in_progress = True
              idle_cycles = 0
              self.index(run_hash)
  
              # sleep for small interval to release index db lock in between and allow
              # other running jobs to properly finalize and index Run.
              sleep_interval = 0.1
              time.sleep(sleep_interval)
          if not self._indexing_in_progress:
              idle_cycles += 1
              sleep_interval = (
                  2 * idle_cycles if idle_cycles < 5 else 10
              )
              logger.info(
                  f"No un-indexed runs found. Next check will run in {sleep_interval} seconds. "
                  f"Waiting for un-indexed run..."
              )
              time.sleep(sleep_interval)
  
imports: import contextlib
  import time
  import datetime
  import pytz
  import logging
  import os
  from threading import Thread
  from pathlib import Path
  from typing import Iterable
  from aim.sdk.repo import Repo
  from aim.sdk.run_status_watcher import Event
  from aim.storage.locking import RefreshLock
label_desc: Use image node_id 6 for calling the RepoIndexManager obj's underlying member method code with example usage: obj._run_forever() without return types