code: def test_external_storage_namespace_isolation(shutdown_only):
      addr = ray.init(
          namespace="a",
          _system_config={"external_storage_namespace": "c1"},
      ).address_info["address"]
      gcs_client = GcsClient(address=addr)
  
      assert gcs_client.internal_kv_put(b"ABC", b"DEF", True, None) == 1
  
      assert gcs_client.internal_kv_get(b"ABC", None) == b"DEF"
  
      ray.shutdown()
  
      addr = ray.init(
          namespace="a",
          _system_config={"external_storage_namespace": "c2"},
      ).address_info["address"]
      gcs_client = GcsClient(address=addr)
      assert gcs_client.internal_kv_get(b"ABC", None) is None
      assert gcs_client.internal_kv_put(b"ABC", b"XYZ", True, None) == 1
  
      assert gcs_client.internal_kv_get(b"ABC", None) == b"XYZ"
      ray.shutdown()
  
      addr = ray.init(
          namespace="a",
          _system_config={"external_storage_namespace": "c1"},
      ).address_info["address"]
      gcs_client = GcsClient(address=addr)
      assert gcs_client.internal_kv_get(b"ABC", None) == b"DEF"
  
imports: import contextlib
  import os
  import time
  import signal
  import sys
  import asyncio
  import async_timeout
  import pytest
  import ray
  import redis
  from ray._raylet import GcsClient
  import ray._private.gcs_utils
  from ray._private.test_utils import enable_external_redis, find_free_port, generate_system_config_map, async_wait_for_condition_async_predicate
  import ray._private.ray_constants
label_desc: Use image node_id 4 for calling a global function with example usage: test_external_storage_namespace_isolation(shutdown_only) without return types