code: def test_cluster_id(ray_start_regular):
      # Kill GCS and check that raylets kill themselves when not backed by Redis,
      # and stay alive when backed by Redis.
      # Raylets should kill themselves due to cluster ID mismatch in the
      # non-persisted case.
      raylet_proc = ray._private.worker._global_node.all_processes[
          ray_constants.PROCESS_TYPE_RAYLET
      ][0].process
  
      def check_raylet_healthy():
          return raylet_proc.poll() is None
  
      wait_for_condition(lambda: check_raylet_healthy())
      for i in range(10):
          assert check_raylet_healthy()
          sleep(1)
  
      ray._private.worker._global_node.kill_gcs_server()
      ray._private.worker._global_node.start_gcs_server()
  
      if not enable_external_redis():
          # Waiting for raylet to become unhealthy
          wait_for_condition(lambda: not check_raylet_healthy())
      else:
          # Waiting for raylet to stay healthy
          for i in range(10):
              assert check_raylet_healthy()
              sleep(1)
  
imports: import sys
  import os
  import threading
  from time import sleep
  import pytest
  import ray
  from ray._private.utils import get_or_create_event_loop
  from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy
  import ray._private.gcs_utils
  from ray._private import ray_constants
  from ray._private.test_utils import convert_actor_state, enable_external_redis, generate_system_config_map, wait_for_condition, wait_for_pid_to_exit, run_string_as_driver
  from ray.job_submission import JobSubmissionClient, JobStatus
  from ray._raylet import GcsClient
  import psutil
label_desc: Use image node_id 20 for calling a global function with example usage: test_cluster_id(ray_start_regular) and returns: unknown