code: def test_bundle_recreated_when_raylet_fo_after_gcs_server_restart(
      ray_start_cluster_head_with_external_redis,
  ):
      cluster = ray_start_cluster_head_with_external_redis
      cluster.add_node(num_cpus=2)
      cluster.wait_for_nodes()
  
      # Create one placement group and make sure its creation successfully.
      placement_group = ray.util.placement_group([{"CPU": 2}])
      ray.get(placement_group.ready(), timeout=10)
      table = ray.util.placement_group_table(placement_group)
      assert table["state"] == "CREATED"
  
      # Restart gcs server.
      cluster.head_node.kill_gcs_server()
      cluster.head_node.start_gcs_server()
  
      # Restart the raylet.
      cluster.remove_node(
          get_other_nodes(cluster, exclude_head=True)[-1]
      )
      cluster.add_node(num_cpus=2)
      cluster.wait_for_nodes()
  
      # Schedule an actor and make sure its creaton successfully.
      actor = Increase.options(
          scheduling_strategy=PlacementGroupSchedulingStrategy(
              placement_group=placement_group,
              placement_group_bundle_index=0,
          )
      ).remote()
  
      assert ray.get(actor.method.remote(1), timeout=5) == 3
  
imports: import sys
  import time
  import pytest
  import ray
  import ray._private.gcs_utils
  import ray.cluster_utils
  from ray._private.test_utils import convert_actor_state, generate_system_config_map, get_error_message, get_other_nodes, kill_actor_and_wait_for_failure, placement_group_assert_no_leak, run_string_as_driver, wait_for_condition
  from ray.util.client.ray_client_helpers import connect_to_client_or_not
  from ray.util.placement_group import get_current_placement_group
  from ray.util.scheduling_strategies import PlacementGroupSchedulingStrategy
label_desc: Use image node_id 14 for calling a global function with example usage: test_bundle_recreated_when_raylet_fo_after_gcs_server_restart(ray_start_cluster_head_with_external_redis) without return types