class_docstr: InstanceReconciler is responsible for reconciling the difference between
  node provider and instance storage. It is also responsible for handling
  failures.
code: def _reconcile_with_node_provider(self) -> None:
      # reconcile storage state with cloud state.
      none_terminated_cloud_instances = (
          self._node_provider.get_non_terminated_nodes()
      )
  
      # 1. if the storage instance is in STOPPING state and the no
      # cloud instance is found, change the instance state to TERMINATED.
      stopping_instances, _ = self._instance_storage.get_instances(
          status_filter={Instance.STOPPING}
      )
  
      for instance in stopping_instances.values():
          if (
              none_terminated_cloud_instances.get(
                  instance.cloud_instance_id
              )
              is None
          ):
              instance.status = Instance.STOPPED
              result, _ = self._instance_storage.upsert_instance(
                  instance, expected_instance_version=instance.version
              )
              if not result:
                  logger.warning(
                      "Failed to update instance status to STOPPED"
                  )
  
file_path: ray/python/ray/autoscaler/v2/instance_manager/subscribers/reconciler.py
imports: import logging
  import threading
  from concurrent.futures import ThreadPoolExecutor
  from typing import List
  from ray.autoscaler.v2.instance_manager.instance_storage import InstanceStorage, InstanceUpdatedSubscriber
  from ray.autoscaler.v2.instance_manager.node_provider import NodeProvider
  from ray.core.generated.instance_manager_pb2 import Instance, InstanceUpdateEvent
label_desc: Use image node_id 6 for calling the InstanceReconciler obj's underlying member method code with example usage: obj._reconcile_with_node_provider() without return types