code: def test_shard_consistency(tmp_path: pathlib.Path):
      assert_project_root()
  
      peer_api_uris, peer_dirs, bootstrap_uri = start_cluster(
          tmp_path, N_PEERS
      )
  
      create_collection(
          peer_api_uris[0],
          shard_number=N_SHARDS,
          replication_factor=N_REPLICAS,
      )
      wait_collection_exists_and_active_on_all_peers(
          collection_name="test_collection", peer_api_uris=peer_api_uris
      )
  
      # upload points to the leader
      upload_processes = [
          run_update_points_in_background(
              peer_api_uris[i], "test_collection"
          )
          for i in range(len(peer_api_uris))
      ]
  
      print("Waiting for 5 seconds")
      time.sleep(5)
  
      # Kill all upload processes
      for p in upload_processes:
          p.kill()
  
      # Give it some time to apply the updates
      time.sleep(3)
  
      # Validate that all peers have the same data
      results = []
      for url in peer_api_uris:
          res = get_all_points(url, COLLECTION_NAME)
          results.append(res)
  
      for res in results:
          for idx, row in enumerate(res["points"]):
              assert row == results[0]["points"][idx]
  
file_path: qdrant/tests/consensus_tests/test_read_consistency.py
imports: import logging
  import multiprocessing
  import pathlib
  import random
  from .fixtures import create_collection, upsert_random_points
  from .utils import *
label_desc: Use image node_id 4 for calling a global function with example usage: test_shard_consistency(tmp_path) without return types