code: def _open_iterator(self) -> Iterable[Any]:
      # data iterator from airstore for current data split.
      # data are sharded by global total number of workers after shuffling
  
      split_cfg = self.cfg["DATA"][self.split]
  
      # extract numbers of dataloading workers and current worker id (range from
      # 0 to num_workers-1) from torch.utils. If we can't get worker_info we
      # assume the current process is the only dataloading worker.
      worker_info = torch.utils.data.get_worker_info()
      if worker_info is None:
          num_workers = 1
          worker_id = 0
      else:
          num_workers = worker_info.num_workers
          worker_id = worker_info.id
  
      # split the dataset for each worker
      airstore_world_size = self.global_world_size * num_workers
      # each worker take it's split by it's parent process rank and worker id
      airstore_rank = self.global_rank * num_workers + worker_id
  
      return self.pathmanager.opent(
          self.airstore_uri,
          "r",
          skip_samples=self._calculate_skip_samples(
              num_workers, worker_id
          ),
          enable_shuffle=getattr(
              split_cfg, "AIRSTORE_ENABLE_SHUFFLE", True
          ),
          shuffle_window=getattr(
              split_cfg, "AIRSTORE_SHUFFLE_WINDOW", 128
          ),
          seed=self.epoch,
          world_size=airstore_world_size,
          rank=airstore_rank,
          limit=getattr(split_cfg, "DATA_LIMIT", -1),
          offset=getattr(split_cfg, "DATA_OFFSET", 0),
          num_of_threads=getattr(
              split_cfg, "AIRSTORE_NUM_OF_THREADS", 2
          ),
          prefetch=getattr(split_cfg, "AIRSTORE_PREFETCH", 1),
          max_holding_bundles=getattr(
              split_cfg, "AIRSTORE_MAX_HOLDING_BUNDLES", 5
          ),
          bundle_download_timeout_ms=getattr(
              split_cfg, "AIRSTORE_BUNDLE_DOWNLOAD_TIMEOUT_MS", 30000
          ),
          max_retries=getattr(split_cfg, "AIRSTORE_MAX_RETRIES", 5),
          dataset_catalog_path=getattr(
              split_cfg, "AIRSTORE_DS_CATALOG_PATH", None
          ),  # temporary need during airstore development
          env=getattr(
              split_cfg, "AIRSTORE_ENV", "OSS"
          ),  # env need set to "fb" if run in FB, otherwise set to "OSS"
      )
  
file_path: vissl/vissl/data/airstore_dataset.py
imports: import io
  import logging
  from typing import Any, Iterable, Tuple
  import torch
  from classy_vision.generic.distributed_util import get_rank, get_world_size
  from iopath.common.file_io import PathManager
  from PIL import Image, ImageFile
  from vissl.config import AttrDict
  from vissl.data.data_helper import get_mean_image, QueueDataset
label_desc: Use image node_id 5 for calling the AirstoreDataset obj's underlying member method code with example usage: obj._open_iterator() and returns: self